From c43939dcd22e351dc0446fd68492157d3278a3bb Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Fri, 24 Jun 2022 09:14:48 +0100 Subject: [PATCH 1/6] Added flights, members and coupons to php quickstart --- README.md | 109 +- composer.json | 51 + composer.lock | 767 +++ coupons/count-coupons.php | 46 + coupons/create-campaign.php | 37 + coupons/create-coupon.php | 54 + coupons/create-offer.php | 75 + coupons/delete-campaign.php | 36 + coupons/get-single-coupon.php | 41 + coupons/list-coupons.php | 41 + coupons/redeem-coupon.php | 44 + coupons/update-coupon.php | 46 + coupons/void-coupon.php | 43 + flights/create-airport.php | 60 + flights/create-boarding-pass.php | 58 + flights/create-carrier.php | 41 + flights/create-flight-designator.php | 67 + flights/create-flight.php | 51 + flights/create-template.php | 52 + flights/delete-airport.php | 37 + flights/delete-carrier.php | 39 + flights/delete-flight-designator.php | 41 + flights/delete-flight.php | 49 + images/certificate.png | Bin 0 -> 60520 bytes images/decrypt-key.png | Bin 0 -> 38452 bytes images/decrypted-key.png | Bin 0 -> 56875 bytes images/grpc.png | Bin 0 -> 21505 bytes images/ini.png | Bin 0 -> 44649 bytes images/pecl.png | Bin 0 -> 13399 bytes images/variables.png | Bin 0 -> 36339 bytes membership/burn-points.php | 43 + membership/create-program.php | 36 + membership/create-tier.php | 73 + membership/delete-member.php | 36 + membership/earn-points.php | 45 + membership/enrol-member.php | 52 + membership/list-members.php | 36 + membership/set-points.php | 42 + membership/update-member.php | 42 + vendor/autoload.php | 12 + vendor/bin/openapi | 117 + vendor/bin/yaml-lint | 117 + vendor/composer/ClassLoader.php | 572 +++ vendor/composer/InstalledVersions.php | 352 ++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 10 + vendor/composer/autoload_files.php | 10 + vendor/composer/autoload_namespaces.php | 9 + vendor/composer/autoload_psr4.php | 31 + vendor/composer/autoload_real.php | 57 + vendor/composer/autoload_static.php | 185 + vendor/composer/installed.json | 790 +++ vendor/composer/installed.php | 131 + vendor/composer/platform_check.php | 26 + vendor/doctrine/annotations/LICENSE | 19 + vendor/doctrine/annotations/README.md | 18 + vendor/doctrine/annotations/composer.json | 44 + .../annotations/docs/en/annotations.rst | 252 + .../doctrine/annotations/docs/en/custom.rst | 443 ++ vendor/doctrine/annotations/docs/en/index.rst | 101 + .../doctrine/annotations/docs/en/sidebar.rst | 6 + .../Common/Annotations/Annotation.php | 59 + .../Annotations/Annotation/Attribute.php | 21 + .../Annotations/Annotation/Attributes.php | 15 + .../Common/Annotations/Annotation/Enum.php | 69 + .../Annotation/IgnoreAnnotation.php | 43 + .../Annotation/NamedArgumentConstructor.php | 13 + .../Annotations/Annotation/Required.php | 13 + .../Common/Annotations/Annotation/Target.php | 101 + .../Annotations/AnnotationException.php | 171 + .../Common/Annotations/AnnotationReader.php | 389 ++ .../Common/Annotations/AnnotationRegistry.php | 190 + .../Common/Annotations/CachedReader.php | 268 + .../Doctrine/Common/Annotations/DocLexer.php | 129 + .../Doctrine/Common/Annotations/DocParser.php | 1459 ++++++ .../Common/Annotations/FileCacheReader.php | 315 ++ .../ImplicitlyIgnoredAnnotationNames.php | 177 + .../Common/Annotations/IndexedReader.php | 100 + .../NamedArgumentConstructorAnnotation.php | 14 + .../Doctrine/Common/Annotations/PhpParser.php | 92 + .../Common/Annotations/PsrCachedReader.php | 232 + .../Doctrine/Common/Annotations/Reader.php | 80 + .../Annotations/SimpleAnnotationReader.php | 114 + .../Common/Annotations/TokenParser.php | 208 + vendor/doctrine/lexer/LICENSE | 19 + vendor/doctrine/lexer/README.md | 9 + vendor/doctrine/lexer/composer.json | 41 + .../Doctrine/Common/Lexer/AbstractLexer.php | 337 ++ vendor/doctrine/lexer/psalm.xml | 15 + vendor/google/protobuf/LICENSE | 29 + vendor/google/protobuf/README.md | 2 + vendor/google/protobuf/composer.json | 23 + .../src/GPBMetadata/Google/Protobuf/Any.php | 30 + .../src/GPBMetadata/Google/Protobuf/Api.php | 48 + .../GPBMetadata/Google/Protobuf/Duration.php | 30 + .../GPBMetadata/Google/Protobuf/FieldMask.php | 29 + .../GPBMetadata/Google/Protobuf/GPBEmpty.php | 29 + .../Google/Protobuf/Internal/Descriptor.php | 279 ++ .../Google/Protobuf/SourceContext.php | 29 + .../GPBMetadata/Google/Protobuf/Struct.php | Bin 0 -> 1162 bytes .../GPBMetadata/Google/Protobuf/Timestamp.php | 30 + .../src/GPBMetadata/Google/Protobuf/Type.php | Bin 0 -> 2205 bytes .../GPBMetadata/Google/Protobuf/Wrappers.php | 49 + .../protobuf/src/Google/Protobuf/Any.php | 253 + .../protobuf/src/Google/Protobuf/Api.php | 360 ++ .../src/Google/Protobuf/BoolValue.php | 68 + .../src/Google/Protobuf/BytesValue.php | 68 + .../src/Google/Protobuf/Descriptor.php | 108 + .../src/Google/Protobuf/DescriptorPool.php | 76 + .../src/Google/Protobuf/DoubleValue.php | 68 + .../protobuf/src/Google/Protobuf/Duration.php | 173 + .../protobuf/src/Google/Protobuf/Enum.php | 213 + .../src/Google/Protobuf/EnumDescriptor.php | 79 + .../src/Google/Protobuf/EnumValue.php | 135 + .../Google/Protobuf/EnumValueDescriptor.php | 64 + .../protobuf/src/Google/Protobuf/Field.php | 381 ++ .../src/Google/Protobuf/Field/Cardinality.php | 71 + .../src/Google/Protobuf/Field/Kind.php | 176 + .../src/Google/Protobuf/FieldDescriptor.php | 125 + .../src/Google/Protobuf/FieldMask.php | 217 + .../src/Google/Protobuf/Field_Cardinality.php | 16 + .../src/Google/Protobuf/Field_Kind.php | 16 + .../src/Google/Protobuf/FloatValue.php | 68 + .../protobuf/src/Google/Protobuf/GPBEmpty.php | 38 + .../src/Google/Protobuf/Int32Value.php | 68 + .../src/Google/Protobuf/Int64Value.php | 68 + .../src/Google/Protobuf/Internal/AnyBase.php | 86 + .../Protobuf/Internal/CodedInputStream.php | 382 ++ .../Protobuf/Internal/CodedOutputStream.php | 159 + .../Google/Protobuf/Internal/Descriptor.php | 222 + .../Protobuf/Internal/DescriptorPool.php | 193 + .../Protobuf/Internal/DescriptorProto.php | 336 ++ .../DescriptorProto/ExtensionRange.php | 161 + .../DescriptorProto/ReservedRange.php | 128 + .../DescriptorProto_ExtensionRange.php | 16 + .../DescriptorProto_ReservedRange.php | 16 + .../Protobuf/Internal/EnumBuilderContext.php | 63 + .../Protobuf/Internal/EnumDescriptor.php | 115 + .../Protobuf/Internal/EnumDescriptorProto.php | 216 + .../EnumDescriptorProto/EnumReservedRange.php | 130 + .../EnumDescriptorProto_EnumReservedRange.php | 16 + .../Google/Protobuf/Internal/EnumOptions.php | 171 + .../Internal/EnumValueDescriptorProto.php | 146 + .../Protobuf/Internal/EnumValueOptions.php | 123 + .../Internal/ExtensionRangeOptions.php | 67 + .../Protobuf/Internal/FieldDescriptor.php | 294 ++ .../Internal/FieldDescriptorProto.php | 611 +++ .../Internal/FieldDescriptorProto/Label.php | 58 + .../Internal/FieldDescriptorProto/Type.php | 153 + .../Internal/FieldDescriptorProto_Label.php | 16 + .../Internal/FieldDescriptorProto_Type.php | 16 + .../Google/Protobuf/Internal/FieldOptions.php | 567 +++ .../Protobuf/Internal/FieldOptions/CType.php | 58 + .../Protobuf/Internal/FieldOptions/JSType.php | 62 + .../Protobuf/Internal/FieldOptions_CType.php | 16 + .../Protobuf/Internal/FieldOptions_JSType.php | 16 + .../Protobuf/Internal/FileDescriptor.php | 89 + .../Protobuf/Internal/FileDescriptorProto.php | 485 ++ .../Protobuf/Internal/FileDescriptorSet.php | 63 + .../Google/Protobuf/Internal/FileOptions.php | 1106 +++++ .../Internal/FileOptions/OptimizeMode.php | 64 + .../Internal/FileOptions_OptimizeMode.php | 16 + .../Protobuf/Internal/GPBDecodeException.php | 47 + .../Google/Protobuf/Internal/GPBJsonWire.php | 304 ++ .../src/Google/Protobuf/Internal/GPBLabel.php | 40 + .../src/Google/Protobuf/Internal/GPBType.php | 55 + .../src/Google/Protobuf/Internal/GPBUtil.php | 617 +++ .../src/Google/Protobuf/Internal/GPBWire.php | 622 +++ .../Google/Protobuf/Internal/GPBWireType.php | 43 + .../Protobuf/Internal/GeneratedCodeInfo.php | 75 + .../Internal/GeneratedCodeInfo/Annotation.php | 218 + .../Internal/GeneratedCodeInfo_Annotation.php | 16 + .../Internal/GetPublicDescriptorTrait.php | 41 + .../Internal/HasPublicDescriptorTrait.php | 43 + .../src/Google/Protobuf/Internal/MapEntry.php | 71 + .../src/Google/Protobuf/Internal/MapField.php | 298 ++ .../Google/Protobuf/Internal/MapFieldIter.php | 142 + .../src/Google/Protobuf/Internal/Message.php | 2034 ++++++++ .../Internal/MessageBuilderContext.php | 120 + .../Protobuf/Internal/MessageOptions.php | 387 ++ .../Internal/MethodDescriptorProto.php | 282 ++ .../Protobuf/Internal/MethodOptions.php | 160 + .../MethodOptions/IdempotencyLevel.php | 64 + .../MethodOptions_IdempotencyLevel.php | 16 + .../Protobuf/Internal/OneofDescriptor.php | 78 + .../Internal/OneofDescriptorProto.php | 109 + .../Google/Protobuf/Internal/OneofField.php | 77 + .../Google/Protobuf/Internal/OneofOptions.php | 67 + .../Protobuf/Internal/RawInputStream.php | 50 + .../Protobuf/Internal/RepeatedField.php | 264 + .../Protobuf/Internal/RepeatedFieldIter.php | 126 + .../Internal/ServiceDescriptorProto.php | 136 + .../Protobuf/Internal/ServiceOptions.php | 123 + .../Protobuf/Internal/SourceCodeInfo.php | 230 + .../Internal/SourceCodeInfo/Location.php | 448 ++ .../Internal/SourceCodeInfo_Location.php | 16 + .../Protobuf/Internal/TimestampBase.php | 32 + .../Protobuf/Internal/UninterpretedOption.php | 300 ++ .../Internal/UninterpretedOption/NamePart.php | 116 + .../Internal/UninterpretedOption_NamePart.php | 16 + .../src/Google/Protobuf/ListValue.php | 68 + .../protobuf/src/Google/Protobuf/Method.php | 271 + .../protobuf/src/Google/Protobuf/Mixin.php | 166 + .../src/Google/Protobuf/NullValue.php | 49 + .../src/Google/Protobuf/OneofDescriptor.php | 80 + .../protobuf/src/Google/Protobuf/Option.php | 136 + .../src/Google/Protobuf/SourceContext.php | 72 + .../src/Google/Protobuf/StringValue.php | 68 + .../protobuf/src/Google/Protobuf/Struct.php | 73 + .../protobuf/src/Google/Protobuf/Syntax.php | 54 + .../src/Google/Protobuf/Timestamp.php | 186 + .../protobuf/src/Google/Protobuf/Type.php | 247 + .../src/Google/Protobuf/UInt32Value.php | 68 + .../src/Google/Protobuf/UInt64Value.php | 68 + .../protobuf/src/Google/Protobuf/Value.php | 244 + vendor/google/protobuf/src/phpdoc.dist.xml | 15 + vendor/grpc/grpc/LICENSE | 201 + vendor/grpc/grpc/MAINTAINERS.md | 16 + vendor/grpc/grpc/README.md | 9 + vendor/grpc/grpc/composer.json | 24 + vendor/grpc/grpc/etc/roots.pem | 4337 +++++++++++++++++ vendor/grpc/grpc/src/lib/AbstractCall.php | 147 + vendor/grpc/grpc/src/lib/BaseStub.php | 618 +++ .../grpc/grpc/src/lib/BidiStreamingCall.php | 105 + vendor/grpc/grpc/src/lib/CallInvoker.php | 32 + .../grpc/grpc/src/lib/ClientStreamingCall.php | 80 + .../grpc/grpc/src/lib/DefaultCallInvoker.php | 46 + vendor/grpc/grpc/src/lib/Interceptor.php | 91 + .../src/lib/Internal/InterceptorChannel.php | 76 + vendor/grpc/grpc/src/lib/MethodDescriptor.php | 52 + vendor/grpc/grpc/src/lib/RpcServer.php | 151 + vendor/grpc/grpc/src/lib/ServerCallReader.php | 52 + vendor/grpc/grpc/src/lib/ServerCallWriter.php | 109 + vendor/grpc/grpc/src/lib/ServerContext.php | 76 + .../grpc/grpc/src/lib/ServerStreamingCall.php | 100 + vendor/grpc/grpc/src/lib/Status.php | 55 + vendor/grpc/grpc/src/lib/UnaryCall.php | 85 + vendor/passkit/vendor/autoload.php | 12 + vendor/passkit/vendor/bin/openapi | 117 + vendor/passkit/vendor/bin/yaml-lint | 117 + .../passkit/vendor/composer/ClassLoader.php | 572 +++ .../vendor/composer/InstalledVersions.php | 352 ++ vendor/passkit/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 10 + .../vendor/composer/autoload_files.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../passkit/vendor/composer/autoload_psr4.php | 17 + .../passkit/vendor/composer/autoload_real.php | 57 + .../vendor/composer/autoload_static.php | 84 + vendor/passkit/vendor/composer/installed.json | 574 +++ vendor/passkit/vendor/composer/installed.php | 95 + .../vendor/composer/platform_check.php | 26 + .../vendor/doctrine/annotations/LICENSE | 19 + .../vendor/doctrine/annotations/README.md | 18 + .../vendor/doctrine/annotations/composer.json | 44 + .../annotations/docs/en/annotations.rst | 252 + .../doctrine/annotations/docs/en/custom.rst | 443 ++ .../doctrine/annotations/docs/en/index.rst | 101 + .../doctrine/annotations/docs/en/sidebar.rst | 6 + .../Common/Annotations/Annotation.php | 59 + .../Annotations/Annotation/Attribute.php | 21 + .../Annotations/Annotation/Attributes.php | 15 + .../Common/Annotations/Annotation/Enum.php | 69 + .../Annotation/IgnoreAnnotation.php | 43 + .../Annotation/NamedArgumentConstructor.php | 13 + .../Annotations/Annotation/Required.php | 13 + .../Common/Annotations/Annotation/Target.php | 101 + .../Annotations/AnnotationException.php | 171 + .../Common/Annotations/AnnotationReader.php | 389 ++ .../Common/Annotations/AnnotationRegistry.php | 190 + .../Common/Annotations/CachedReader.php | 268 + .../Doctrine/Common/Annotations/DocLexer.php | 129 + .../Doctrine/Common/Annotations/DocParser.php | 1459 ++++++ .../Common/Annotations/FileCacheReader.php | 315 ++ .../ImplicitlyIgnoredAnnotationNames.php | 177 + .../Common/Annotations/IndexedReader.php | 100 + .../NamedArgumentConstructorAnnotation.php | 14 + .../Doctrine/Common/Annotations/PhpParser.php | 92 + .../Common/Annotations/PsrCachedReader.php | 232 + .../Doctrine/Common/Annotations/Reader.php | 80 + .../Annotations/SimpleAnnotationReader.php | 114 + .../Common/Annotations/TokenParser.php | 208 + vendor/passkit/vendor/doctrine/lexer/LICENSE | 19 + .../passkit/vendor/doctrine/lexer/README.md | 9 + .../vendor/doctrine/lexer/composer.json | 41 + .../Doctrine/Common/Lexer/AbstractLexer.php | 337 ++ .../passkit/vendor/doctrine/lexer/psalm.xml | 15 + vendor/passkit/vendor/psr/cache/CHANGELOG.md | 16 + vendor/passkit/vendor/psr/cache/LICENSE.txt | 19 + vendor/passkit/vendor/psr/cache/README.md | 12 + vendor/passkit/vendor/psr/cache/composer.json | 25 + .../vendor/psr/cache/src/CacheException.php | 10 + .../psr/cache/src/CacheItemInterface.php | 105 + .../psr/cache/src/CacheItemPoolInterface.php | 138 + .../cache/src/InvalidArgumentException.php | 13 + vendor/passkit/vendor/psr/log/LICENSE | 19 + vendor/passkit/vendor/psr/log/README.md | 58 + vendor/passkit/vendor/psr/log/composer.json | 26 + .../vendor/psr/log/src/AbstractLogger.php | 15 + .../psr/log/src/InvalidArgumentException.php | 7 + .../passkit/vendor/psr/log/src/LogLevel.php | 18 + .../psr/log/src/LoggerAwareInterface.php | 18 + .../vendor/psr/log/src/LoggerAwareTrait.php | 26 + .../vendor/psr/log/src/LoggerInterface.php | 125 + .../vendor/psr/log/src/LoggerTrait.php | 142 + .../passkit/vendor/psr/log/src/NullLogger.php | 30 + .../vendor/symfony/finder/CHANGELOG.md | 92 + .../symfony/finder/Comparator/Comparator.php | 62 + .../finder/Comparator/DateComparator.php | 50 + .../finder/Comparator/NumberComparator.php | 78 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + .../passkit/vendor/symfony/finder/Finder.php | 798 +++ .../vendor/symfony/finder/Gitignore.php | 93 + vendor/passkit/vendor/symfony/finder/Glob.php | 109 + .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 48 + .../ExcludeDirectoryFilterIterator.php | 88 + .../Iterator/FileTypeFilterIterator.php | 53 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 45 + .../symfony/finder/Iterator/LazyIterator.php | 32 + .../Iterator/MultiplePcreFilterIterator.php | 111 + .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 146 + .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 101 + .../Iterator/VcsIgnoredFilterIterator.php | 178 + vendor/passkit/vendor/symfony/finder/LICENSE | 19 + .../passkit/vendor/symfony/finder/README.md | 14 + .../vendor/symfony/finder/SplFileInfo.php | 82 + .../vendor/symfony/finder/composer.json | 31 + .../vendor/symfony/polyfill-ctype/Ctype.php | 232 + .../vendor/symfony/polyfill-ctype/LICENSE | 19 + .../vendor/symfony/polyfill-ctype/README.md | 12 + .../symfony/polyfill-ctype/bootstrap.php | 50 + .../symfony/polyfill-ctype/bootstrap80.php | 46 + .../symfony/polyfill-ctype/composer.json | 41 + .../passkit/vendor/symfony/yaml/CHANGELOG.md | 242 + .../symfony/yaml/Command/LintCommand.php | 279 ++ vendor/passkit/vendor/symfony/yaml/Dumper.php | 138 + .../passkit/vendor/symfony/yaml/Escaper.php | 95 + .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 126 + .../yaml/Exception/RuntimeException.php | 21 + vendor/passkit/vendor/symfony/yaml/Inline.php | 779 +++ vendor/passkit/vendor/symfony/yaml/LICENSE | 19 + vendor/passkit/vendor/symfony/yaml/Parser.php | 1255 +++++ vendor/passkit/vendor/symfony/yaml/README.md | 13 + .../symfony/yaml/Resources/bin/yaml-lint | 45 + .../vendor/symfony/yaml/Tag/TaggedValue.php | 38 + .../passkit/vendor/symfony/yaml/Unescaper.php | 110 + vendor/passkit/vendor/symfony/yaml/Yaml.php | 96 + .../passkit/vendor/symfony/yaml/composer.json | 41 + .../vendor/zircote/swagger-php/Changelog.md | 3 + .../zircote/swagger-php/Examples/Readme.md | 71 + .../Examples/example-object/OpenApiSpec.php | 117 + .../example-object/example-object.yaml | 90 + .../swagger-php/Examples/misc/OpenApiSpec.php | 107 + .../swagger-php/Examples/misc/misc.yaml | 100 + .../swagger-php/Examples/misc/sideeffect.php | 5 + .../Examples/nesting/ActualModel.php | 16 + .../Examples/nesting/AlmostModel.php | 16 + .../Examples/nesting/ApiController.php | 49 + .../Examples/nesting/BaseModel.php | 16 + .../Examples/nesting/IntermediateModel.php | 16 + .../Examples/nesting/SoCloseModel.php | 16 + .../swagger-php/Examples/nesting/nesting.yaml | 66 + .../Examples/petstore-3.0/Controllers/Pet.php | 327 ++ .../petstore-3.0/Controllers/Store.php | 137 + .../petstore-3.0/Controllers/User.php | 231 + .../petstore-3.0/Models/ApiResponse.php | 51 + .../Examples/petstore-3.0/Models/Category.php | 43 + .../Examples/petstore-3.0/Models/Order.php | 93 + .../Examples/petstore-3.0/Models/Pet.php | 88 + .../petstore-3.0/Models/PetRequestBody.php | 23 + .../Examples/petstore-3.0/Models/Tag.php | 43 + .../Examples/petstore-3.0/Models/User.php | 106 + .../Models/UserArrayRequestBody.php | 22 + .../Examples/petstore-3.0/Petstore.php | 57 + .../Examples/petstore-3.0/Security.php | 32 + .../Examples/petstore-3.0/petstore-3.0.yaml | 734 +++ .../petstore.swagger.io/ApiResponse.php | 31 + .../Controllers/PetController.php | 342 ++ .../Controllers/StoreController.php | 111 + .../Controllers/UserController.php | 218 + .../petstore.swagger.io/Models/Category.php | 26 + .../petstore.swagger.io/Models/Order.php | 52 + .../petstore.swagger.io/Models/Pet.php | 50 + .../petstore.swagger.io/Models/Tag.php | 26 + .../petstore.swagger.io/Models/User.php | 64 + .../petstore.swagger.io/OpenApiSpec.php | 32 + .../petstore.swagger.io/OpenApiTags.php | 29 + .../petstore.swagger.io/PetstoreAuth.php | 27 + .../petstore.swagger.io.json | 980 ++++ .../petstore.swagger.io.yaml | 669 +++ .../polymorphism/AbstractResponsible.php | 38 + .../Examples/polymorphism/Controller.php | 40 + .../Examples/polymorphism/Employee.php | 23 + .../swagger-php/Examples/polymorphism/Fl.php | 20 + .../Examples/polymorphism/Request.php | 20 + .../polymorphism/polymorphism-3.1.0.yaml | 76 + .../Examples/polymorphism/polymorphism.yaml | 78 + .../SchemaQueryParameter.php | 82 + .../schema-query-parameter/app/OpenApi.php | 17 + .../schema-query-parameter/app/Product.php | 27 + .../app/ProductController.php | 49 + .../schema-query-parameter/scan.php | 33 + .../schema-query-parameter.yaml | 62 + .../sort-components/SortComponents.php | 20 + .../petstore-simple/OpenApiSpec.php | 46 + .../petstore-simple/SimplePet.php | 41 + .../petstore-simple/SimplePetsController.php | 196 + .../petstore-simple-3.1.0.yaml | 209 + .../petstore-simple/petstore-simple.yaml | 208 + .../Controllers/PetWithDocsController.php | 197 + .../Models/ErrorModel.php | 22 + .../Models/Pet.php | 40 + .../OpenApiSpec.php | 38 + .../petstore-with-external-docs.yaml | 217 + .../swagger-spec/petstore/OpenApiSpec.php | 50 + .../Examples/swagger-spec/petstore/Pet.php | 29 + .../swagger-spec/petstore/PetsController.php | 88 + .../swagger-spec/petstore/petstore.yaml | 95 + .../using-interfaces/ColorInterface.php | 16 + .../using-interfaces/GreenProduct.php | 17 + .../Examples/using-interfaces/OpenApiSpec.php | 29 + .../Examples/using-interfaces/Product.php | 26 + .../using-interfaces/ProductController.php | 58 + .../using-interfaces/ProductInterface.php | 16 + .../using-interfaces/using-interfaces.yaml | 89 + .../using-links-php81/MyAttribute.php | 8 + .../using-links-php81/OpenApiSpec.php | 10 + .../using-links-php81/PullRequest.php | 38 + .../RepositoriesController.php | 108 + .../Examples/using-links-php81/Repository.php | 19 + .../Examples/using-links-php81/State.php | 13 + .../Examples/using-links-php81/User.php | 27 + .../using-links-php81/UsersController.php | 16 + .../using-links-php81/using-links-php81.yaml | 217 + .../Examples/using-links/OpenApiSpec.php | 15 + .../Examples/using-links/PullRequest.php | 40 + .../using-links/RepositoriesController.php | 168 + .../Examples/using-links/Repository.php | 26 + .../swagger-php/Examples/using-links/User.php | 26 + .../Examples/using-links/UsersController.php | 30 + .../Examples/using-links/using-links.yaml | 212 + .../swagger-php/Examples/using-refs/Model.php | 12 + .../Examples/using-refs/OpenApiSpec.php | 91 + .../Examples/using-refs/Product.php | 36 + .../Examples/using-refs/ProductController.php | 41 + .../using-refs/PropertyRefController.php | 21 + .../Examples/using-refs/StockLevel.php | 13 + .../Examples/using-refs/using-refs.yaml | 97 + .../using-traits/BellsAndWhistles.php | 21 + .../Examples/using-traits/Blink.php | 17 + .../Examples/using-traits/Colour.php | 17 + .../using-traits/Decoration/Bells.php | 17 + .../Decoration/UndocumentedBell.php | 8 + .../using-traits/Decoration/Whistles.php | 16 + .../Examples/using-traits/DeleteEntity.php | 30 + .../Examples/using-traits/OpenApiSpec.php | 21 + .../Examples/using-traits/Product.php | 27 + .../using-traits/ProductController.php | 43 + .../Examples/using-traits/SimpleProduct.php | 21 + .../Examples/using-traits/TrickyProduct.php | 21 + .../Examples/using-traits/using-traits.yaml | 127 + .../vendor/zircote/swagger-php/LICENSE | 202 + .../vendor/zircote/swagger-php/README.md | 150 + .../vendor/zircote/swagger-php/bin/openapi | 234 + .../vendor/zircote/swagger-php/composer.json | 112 + .../swagger-php/docs/.vitepress/config.js | 82 + .../.vitepress/theme/components/Codeblock.vue | 31 + .../docs/.vitepress/theme/custom.css | 30 + .../docs/.vitepress/theme/index.js | 14 + .../docs/.vitepress/theme/tabs.css | 80 + .../swagger-php/docs/guide/annotations.md | 141 + .../swagger-php/docs/guide/attributes.md | 41 + .../docs/guide/common-techniques.md | 190 + .../swagger-php/docs/guide/cookbook.md | 690 +++ .../zircote/swagger-php/docs/guide/faq.md | 80 + .../guide/generating-openapi-documents.md | 60 + .../zircote/swagger-php/docs/guide/index.md | 20 + .../swagger-php/docs/guide/installation.md | 20 + .../swagger-php/docs/guide/migrating-to-v3.md | 58 + .../swagger-php/docs/guide/migrating-to-v4.md | 138 + .../docs/guide/required-elements.md | 41 + .../swagger-php/docs/guide/under-the-hood.md | 50 + .../vendor/zircote/swagger-php/docs/index.md | 56 + .../zircote/swagger-php/docs/package.json | 14 + .../swagger-php/docs/reference/annotations.md | 1212 +++++ .../swagger-php/docs/reference/attributes.md | 1664 +++++++ .../swagger-php/docs/reference/generator.md | 161 + .../swagger-php/docs/reference/index.md | 23 + .../swagger-php/docs/reference/processors.md | 6 + .../swagger-php/docs/related-projects.md | 35 + .../docs/snippets/example_annotations.php | 21 + .../docs/snippets/minimal_api.yaml | 11 + .../docs/snippets/minimal_api_annotations.php | 27 + .../docs/snippets/minimal_api_attributes.php | 15 + .../src/Analysers/AnalyserInterface.php | 18 + .../Analysers/AnnotationFactoryInterface.php | 21 + .../Analysers/AttributeAnnotationFactory.php | 132 + .../Analysers/ComposerAutoloaderScanner.php | 49 + .../Analysers/DocBlockAnnotationFactory.php | 58 + .../src/Analysers/DocBlockParser.php | 76 + .../src/Analysers/ReflectionAnalyser.php | 186 + .../src/Analysers/TokenAnalyser.php | 639 +++ .../src/Analysers/TokenScanner.php | 356 ++ .../zircote/swagger-php/src/Analysis.php | 440 ++ .../src/Annotations/AbstractAnnotation.php | 714 +++ .../src/Annotations/AdditionalProperties.php | 38 + .../src/Annotations/Attachable.php | 73 + .../src/Annotations/Components.php | 146 + .../swagger-php/src/Annotations/Contact.php | 63 + .../swagger-php/src/Annotations/Delete.php | 25 + .../src/Annotations/Discriminator.php | 69 + .../swagger-php/src/Annotations/Examples.php | 96 + .../src/Annotations/ExternalDocumentation.php | 76 + .../swagger-php/src/Annotations/Flow.php | 106 + .../swagger-php/src/Annotations/Get.php | 25 + .../swagger-php/src/Annotations/Head.php | 25 + .../swagger-php/src/Annotations/Header.php | 99 + .../swagger-php/src/Annotations/Info.php | 98 + .../swagger-php/src/Annotations/Items.php | 62 + .../src/Annotations/JsonContent.php | 42 + .../swagger-php/src/Annotations/License.php | 102 + .../swagger-php/src/Annotations/Link.php | 113 + .../swagger-php/src/Annotations/MediaType.php | 87 + .../swagger-php/src/Annotations/OpenApi.php | 236 + .../swagger-php/src/Annotations/Operation.php | 248 + .../swagger-php/src/Annotations/Options.php | 25 + .../swagger-php/src/Annotations/Parameter.php | 297 ++ .../swagger-php/src/Annotations/Patch.php | 25 + .../swagger-php/src/Annotations/PathItem.php | 151 + .../src/Annotations/PathParameter.php | 25 + .../swagger-php/src/Annotations/Post.php | 25 + .../swagger-php/src/Annotations/Property.php | 47 + .../swagger-php/src/Annotations/Put.php | 25 + .../src/Annotations/RequestBody.php | 94 + .../swagger-php/src/Annotations/Response.php | 128 + .../swagger-php/src/Annotations/Schema.php | 440 ++ .../src/Annotations/SecurityScheme.php | 136 + .../swagger-php/src/Annotations/Server.php | 87 + .../src/Annotations/ServerVariable.php | 87 + .../swagger-php/src/Annotations/Tag.php | 66 + .../swagger-php/src/Annotations/Trace.php | 25 + .../swagger-php/src/Annotations/Xml.php | 95 + .../src/Annotations/XmlContent.php | 43 + .../src/Attributes/AdditionalProperties.php | 101 + .../swagger-php/src/Attributes/Attachable.php | 16 + .../swagger-php/src/Attributes/Components.php | 48 + .../swagger-php/src/Attributes/Contact.php | 34 + .../swagger-php/src/Attributes/Delete.php | 13 + .../src/Attributes/Discriminator.php | 33 + .../swagger-php/src/Attributes/Examples.php | 42 + .../src/Attributes/ExternalDocumentation.php | 32 + .../swagger-php/src/Attributes/Flow.php | 38 + .../swagger-php/src/Attributes/Get.php | 13 + .../swagger-php/src/Attributes/Head.php | 13 + .../swagger-php/src/Attributes/Header.php | 40 + .../swagger-php/src/Attributes/Info.php | 38 + .../swagger-php/src/Attributes/Items.php | 105 + .../src/Attributes/JsonContent.php | 108 + .../swagger-php/src/Attributes/License.php | 34 + .../swagger-php/src/Attributes/Link.php | 44 + .../swagger-php/src/Attributes/MediaType.php | 38 + .../swagger-php/src/Attributes/OpenApi.php | 41 + .../src/Attributes/OperationTrait.php | 55 + .../swagger-php/src/Attributes/Options.php | 13 + .../swagger-php/src/Attributes/Parameter.php | 13 + .../src/Attributes/ParameterTrait.php | 58 + .../swagger-php/src/Attributes/Patch.php | 13 + .../swagger-php/src/Attributes/PathItem.php | 38 + .../src/Attributes/PathParameter.php | 13 + .../swagger-php/src/Attributes/Post.php | 13 + .../swagger-php/src/Attributes/Property.php | 107 + .../swagger-php/src/Attributes/Put.php | 13 + .../src/Attributes/RequestBody.php | 38 + .../swagger-php/src/Attributes/Response.php | 43 + .../swagger-php/src/Attributes/Schema.php | 106 + .../src/Attributes/SecurityScheme.php | 48 + .../swagger-php/src/Attributes/Server.php | 34 + .../src/Attributes/ServerVariable.php | 39 + .../swagger-php/src/Attributes/Tag.php | 33 + .../swagger-php/src/Attributes/Trace.php | 13 + .../swagger-php/src/Attributes/Xml.php | 38 + .../swagger-php/src/Attributes/XmlContent.php | 108 + .../zircote/swagger-php/src/Context.php | 273 ++ .../zircote/swagger-php/src/Generator.php | 438 ++ .../swagger-php/src/Loggers/ConsoleLogger.php | 95 + .../swagger-php/src/Loggers/DefaultLogger.php | 33 + .../src/Processors/AugmentParameters.php | 94 + .../src/Processors/AugmentProperties.php | 197 + .../src/Processors/AugmentRefs.php | 50 + .../src/Processors/AugmentSchemas.php | 137 + .../swagger-php/src/Processors/BuildPaths.php | 62 + .../src/Processors/CleanUnmerged.php | 35 + .../src/Processors/CleanUnusedComponents.php | 110 + .../src/Processors/DocBlockDescriptions.php | 104 + .../src/Processors/DocblockTrait.php | 170 + .../src/Processors/ExpandClasses.php | 49 + .../src/Processors/ExpandEnums.php | 57 + .../src/Processors/ExpandInterfaces.php | 57 + .../src/Processors/ExpandTraits.php | 49 + .../src/Processors/MergeIntoComponents.php | 34 + .../src/Processors/MergeIntoOpenApi.php | 56 + .../src/Processors/MergeJsonContent.php | 61 + .../swagger-php/src/Processors/MergeTrait.php | 80 + .../src/Processors/MergeXmlContent.php | 61 + .../src/Processors/OperationId.php | 72 + .../zircote/swagger-php/src/Serializer.php | 205 + .../vendor/zircote/swagger-php/src/Util.php | 197 + vendor/protobuf-php/protobuf/.gitignore | 34 + vendor/protobuf-php/protobuf/.travis.yml | 37 + vendor/protobuf-php/protobuf/LICENSE | 19 + vendor/protobuf-php/protobuf/Makefile | 56 + vendor/protobuf-php/protobuf/README.md | 404 ++ vendor/protobuf-php/protobuf/composer.json | 50 + .../examples/addressbook-add-person.php | 78 + .../protobuf/examples/addressbook.proto | 28 + .../protobuf/examples/src/.gitignore | 2 + vendor/protobuf-php/protobuf/phpunit.xml.dist | 35 + vendor/protobuf-php/protobuf/ruleset.xml | 14 + .../protobuf/src/AbstractMessage.php | 50 + .../src/Binary/Platform/BcNegativeEncoder.php | 67 + .../src/Binary/Platform/BigEndian.php | 53 + .../Binary/Platform/GmpNegativeEncoder.php | 92 + .../Platform/InvalidNegativeEncoder.php | 29 + .../src/Binary/Platform/NegativeEncoder.php | 29 + .../src/Binary/Platform/PlatformFactory.php | 58 + .../protobuf/src/Binary/SizeCalculator.php | 212 + .../protobuf/src/Binary/StreamReader.php | 329 ++ .../protobuf/src/Binary/StreamWriter.php | 301 ++ .../protobuf-php/protobuf/src/Collection.php | 16 + .../protobuf/src/ComputeSizeContext.php | 34 + .../protobuf/src/Configuration.php | 195 + vendor/protobuf-php/protobuf/src/Enum.php | 63 + .../protobuf/src/EnumCollection.php | 48 + .../protobuf-php/protobuf/src/Exception.php | 13 + .../protobuf-php/protobuf/src/Extension.php | 17 + .../protobuf/src/Extension/ExtensionField.php | 133 + .../src/Extension/ExtensionFieldMap.php | 117 + .../src/Extension/ExtensionRegistry.php | 60 + vendor/protobuf-php/protobuf/src/Field.php | 129 + vendor/protobuf-php/protobuf/src/Message.php | 86 + .../protobuf/src/MessageCollection.php | 48 + .../protobuf/src/MessageSerializer.php | 57 + .../protobuf-php/protobuf/src/ReadContext.php | 93 + .../protobuf/src/ScalarCollection.php | 56 + .../protobuf-php/protobuf/src/Serializer.php | 30 + vendor/protobuf-php/protobuf/src/Stream.php | 304 ++ .../protobuf/src/StreamCollection.php | 48 + .../protobuf-php/protobuf/src/TextFormat.php | 117 + vendor/protobuf-php/protobuf/src/Unknown.php | 39 + .../protobuf/src/UnknownFieldSet.php | 23 + .../protobuf-php/protobuf/src/WireFormat.php | 122 + .../protobuf/src/WriteContext.php | 71 + .../Binary/Platform/BcNegativeEncoderTest.php | 44 + .../tests/Binary/Platform/BigEndianTest.php | 18 + .../Platform/GmpNegativeEncoderTest.php | 77 + .../Platform/InvalidNegativeEncoderTest.php | 31 + .../Binary/Platform/PlatformFactoryTest.php | 63 + .../tests/Binary/SizeCalculatorTest.php | 333 ++ .../tests/Binary/StreamReaderTest.php | 97 + .../tests/Binary/StreamWriterTest.php | 80 + .../protobuf/tests/ConfigurationTest.php | 43 + .../protobuf/tests/EnumCollectionTest.php | 63 + .../protobuf-php/protobuf/tests/EnumTest.php | 20 + .../tests/Extension/ExtensionFieldMapTest.php | 62 + .../tests/Extension/ExtensionRegistryTest.php | 28 + .../protobuf-php/protobuf/tests/FieldTest.php | 93 + .../protobuf/tests/MessageCollectionTest.php | 63 + .../protobuf/tests/MessageSerializerTest.php | 115 + .../tests/ProtocSerializeMessageTest.php | 235 + .../protobuf/tests/Protos/.gitignore | 2 + .../protobuf/tests/Resources/addressbook.bin | Bin 0 -> 127 bytes .../tests/Resources/addressbook.proto | 40 + .../protobuf/tests/Resources/addressbook.txt | 22 + .../protobuf/tests/Resources/complex.proto | 19 + .../tests/Resources/extension-animal-cat.bin | 1 + .../Resources/extension-command-version.bin | Bin 0 -> 15 bytes .../protobuf/tests/Resources/extension.bin | 2 + .../protobuf/tests/Resources/extension.proto | 93 + .../protobuf/tests/Resources/php_options.bin | 1 + .../tests/Resources/php_options.proto | 30 + .../tests/Resources/repeated-bytes.bin | 1 + .../tests/Resources/repeated-enum.bin | Bin 0 -> 4 bytes .../tests/Resources/repeated-int32.bin | 1 + .../tests/Resources/repeated-int32.txt | 3 + .../tests/Resources/repeated-nested.bin | 1 + .../tests/Resources/repeated-nested.txt | 9 + .../tests/Resources/repeated-packed-enum.bin | Bin 0 -> 4 bytes .../tests/Resources/repeated-packed.bin | 1 + .../tests/Resources/repeated-string.bin | 4 + .../tests/Resources/repeated-string.txt | 3 + .../protobuf/tests/Resources/repeated.proto | 23 + .../protobuf/tests/Resources/service.proto | 24 + .../protobuf/tests/Resources/simple.bin | 1 + .../protobuf/tests/Resources/simple.proto | 21 + .../protobuf/tests/Resources/simple.txt | 15 + .../protobuf/tests/Resources/tree.bin | 6 + .../protobuf/tests/Resources/tree.proto | 9 + .../protobuf/tests/Resources/tree.txt | 13 + .../protobuf/tests/Resources/unknown.bin | 1 + .../protobuf/tests/Resources/unknown.proto | 7 + .../protobuf/tests/ScalarCollectionTest.php | 65 + .../protobuf/tests/SerializeMessageTest.php | 612 +++ .../protobuf/tests/StreamCollectionTest.php | 63 + .../protobuf/tests/StreamTest.php | 202 + .../protobuf-php/protobuf/tests/TestCase.php | 76 + .../protobuf/tests/TextFormatTest.php | 185 + .../protobuf/tests/travis/install-protobuf.sh | 32 + vendor/psr/cache/CHANGELOG.md | 16 + vendor/psr/cache/LICENSE.txt | 19 + vendor/psr/cache/README.md | 12 + vendor/psr/cache/composer.json | 25 + vendor/psr/cache/src/CacheException.php | 10 + vendor/psr/cache/src/CacheItemInterface.php | 105 + .../psr/cache/src/CacheItemPoolInterface.php | 138 + .../cache/src/InvalidArgumentException.php | 13 + vendor/psr/log/LICENSE | 19 + vendor/psr/log/README.md | 58 + vendor/psr/log/composer.json | 26 + vendor/psr/log/src/AbstractLogger.php | 15 + .../psr/log/src/InvalidArgumentException.php | 7 + vendor/psr/log/src/LogLevel.php | 18 + vendor/psr/log/src/LoggerAwareInterface.php | 18 + vendor/psr/log/src/LoggerAwareTrait.php | 26 + vendor/psr/log/src/LoggerInterface.php | 125 + vendor/psr/log/src/LoggerTrait.php | 142 + vendor/psr/log/src/NullLogger.php | 30 + vendor/symfony/finder/CHANGELOG.md | 92 + .../symfony/finder/Comparator/Comparator.php | 62 + .../finder/Comparator/DateComparator.php | 50 + .../finder/Comparator/NumberComparator.php | 78 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + vendor/symfony/finder/Finder.php | 798 +++ vendor/symfony/finder/Gitignore.php | 93 + vendor/symfony/finder/Glob.php | 109 + .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 48 + .../ExcludeDirectoryFilterIterator.php | 88 + .../Iterator/FileTypeFilterIterator.php | 53 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 45 + .../symfony/finder/Iterator/LazyIterator.php | 32 + .../Iterator/MultiplePcreFilterIterator.php | 111 + .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 146 + .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 101 + .../Iterator/VcsIgnoredFilterIterator.php | 178 + vendor/symfony/finder/LICENSE | 19 + vendor/symfony/finder/README.md | 14 + vendor/symfony/finder/SplFileInfo.php | 82 + vendor/symfony/finder/composer.json | 31 + vendor/symfony/polyfill-ctype/Ctype.php | 232 + vendor/symfony/polyfill-ctype/LICENSE | 19 + vendor/symfony/polyfill-ctype/README.md | 12 + vendor/symfony/polyfill-ctype/bootstrap.php | 50 + vendor/symfony/polyfill-ctype/bootstrap80.php | 46 + vendor/symfony/polyfill-ctype/composer.json | 41 + vendor/symfony/yaml/CHANGELOG.md | 242 + vendor/symfony/yaml/Command/LintCommand.php | 279 ++ vendor/symfony/yaml/Dumper.php | 138 + vendor/symfony/yaml/Escaper.php | 95 + .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 126 + .../yaml/Exception/RuntimeException.php | 21 + vendor/symfony/yaml/Inline.php | 779 +++ vendor/symfony/yaml/LICENSE | 19 + vendor/symfony/yaml/Parser.php | 1255 +++++ vendor/symfony/yaml/README.md | 13 + vendor/symfony/yaml/Resources/bin/yaml-lint | 45 + vendor/symfony/yaml/Tag/TaggedValue.php | 38 + vendor/symfony/yaml/Unescaper.php | 110 + vendor/symfony/yaml/Yaml.php | 96 + vendor/symfony/yaml/composer.json | 41 + vendor/zircote/swagger-php/Changelog.md | 3 + vendor/zircote/swagger-php/Examples/Readme.md | 71 + .../Examples/example-object/OpenApiSpec.php | 117 + .../example-object/example-object.yaml | 90 + .../swagger-php/Examples/misc/OpenApiSpec.php | 107 + .../swagger-php/Examples/misc/misc.yaml | 100 + .../swagger-php/Examples/misc/sideeffect.php | 5 + .../Examples/nesting/ActualModel.php | 16 + .../Examples/nesting/AlmostModel.php | 16 + .../Examples/nesting/ApiController.php | 49 + .../Examples/nesting/BaseModel.php | 16 + .../Examples/nesting/IntermediateModel.php | 16 + .../Examples/nesting/SoCloseModel.php | 16 + .../swagger-php/Examples/nesting/nesting.yaml | 66 + .../Examples/petstore-3.0/Controllers/Pet.php | 327 ++ .../petstore-3.0/Controllers/Store.php | 137 + .../petstore-3.0/Controllers/User.php | 231 + .../petstore-3.0/Models/ApiResponse.php | 51 + .../Examples/petstore-3.0/Models/Category.php | 43 + .../Examples/petstore-3.0/Models/Order.php | 93 + .../Examples/petstore-3.0/Models/Pet.php | 88 + .../petstore-3.0/Models/PetRequestBody.php | 23 + .../Examples/petstore-3.0/Models/Tag.php | 43 + .../Examples/petstore-3.0/Models/User.php | 106 + .../Models/UserArrayRequestBody.php | 22 + .../Examples/petstore-3.0/Petstore.php | 57 + .../Examples/petstore-3.0/Security.php | 32 + .../Examples/petstore-3.0/petstore-3.0.yaml | 734 +++ .../petstore.swagger.io/ApiResponse.php | 31 + .../Controllers/PetController.php | 342 ++ .../Controllers/StoreController.php | 111 + .../Controllers/UserController.php | 218 + .../petstore.swagger.io/Models/Category.php | 26 + .../petstore.swagger.io/Models/Order.php | 52 + .../petstore.swagger.io/Models/Pet.php | 50 + .../petstore.swagger.io/Models/Tag.php | 26 + .../petstore.swagger.io/Models/User.php | 64 + .../petstore.swagger.io/OpenApiSpec.php | 32 + .../petstore.swagger.io/OpenApiTags.php | 29 + .../petstore.swagger.io/PetstoreAuth.php | 27 + .../petstore.swagger.io.json | 980 ++++ .../petstore.swagger.io.yaml | 669 +++ .../polymorphism/AbstractResponsible.php | 38 + .../Examples/polymorphism/Controller.php | 40 + .../Examples/polymorphism/Employee.php | 23 + .../swagger-php/Examples/polymorphism/Fl.php | 20 + .../Examples/polymorphism/Request.php | 20 + .../polymorphism/polymorphism-3.1.0.yaml | 76 + .../Examples/polymorphism/polymorphism.yaml | 78 + .../SchemaQueryParameter.php | 82 + .../schema-query-parameter/app/OpenApi.php | 17 + .../schema-query-parameter/app/Product.php | 27 + .../app/ProductController.php | 49 + .../schema-query-parameter/scan.php | 33 + .../schema-query-parameter.yaml | 62 + .../sort-components/SortComponents.php | 20 + .../petstore-simple/OpenApiSpec.php | 46 + .../petstore-simple/SimplePet.php | 41 + .../petstore-simple/SimplePetsController.php | 196 + .../petstore-simple-3.1.0.yaml | 209 + .../petstore-simple/petstore-simple.yaml | 208 + .../Controllers/PetWithDocsController.php | 197 + .../Models/ErrorModel.php | 22 + .../Models/Pet.php | 40 + .../OpenApiSpec.php | 38 + .../petstore-with-external-docs.yaml | 217 + .../swagger-spec/petstore/OpenApiSpec.php | 50 + .../Examples/swagger-spec/petstore/Pet.php | 29 + .../swagger-spec/petstore/PetsController.php | 88 + .../swagger-spec/petstore/petstore.yaml | 95 + .../using-interfaces/ColorInterface.php | 16 + .../using-interfaces/GreenProduct.php | 17 + .../Examples/using-interfaces/OpenApiSpec.php | 29 + .../Examples/using-interfaces/Product.php | 26 + .../using-interfaces/ProductController.php | 58 + .../using-interfaces/ProductInterface.php | 16 + .../using-interfaces/using-interfaces.yaml | 89 + .../using-links-php81/MyAttribute.php | 8 + .../using-links-php81/OpenApiSpec.php | 10 + .../using-links-php81/PullRequest.php | 38 + .../RepositoriesController.php | 108 + .../Examples/using-links-php81/Repository.php | 19 + .../Examples/using-links-php81/State.php | 13 + .../Examples/using-links-php81/User.php | 27 + .../using-links-php81/UsersController.php | 16 + .../using-links-php81/using-links-php81.yaml | 217 + .../Examples/using-links/OpenApiSpec.php | 15 + .../Examples/using-links/PullRequest.php | 40 + .../using-links/RepositoriesController.php | 168 + .../Examples/using-links/Repository.php | 26 + .../swagger-php/Examples/using-links/User.php | 26 + .../Examples/using-links/UsersController.php | 30 + .../Examples/using-links/using-links.yaml | 212 + .../swagger-php/Examples/using-refs/Model.php | 12 + .../Examples/using-refs/OpenApiSpec.php | 91 + .../Examples/using-refs/Product.php | 36 + .../Examples/using-refs/ProductController.php | 41 + .../using-refs/PropertyRefController.php | 21 + .../Examples/using-refs/StockLevel.php | 13 + .../Examples/using-refs/using-refs.yaml | 97 + .../using-traits/BellsAndWhistles.php | 21 + .../Examples/using-traits/Blink.php | 17 + .../Examples/using-traits/Colour.php | 17 + .../using-traits/Decoration/Bells.php | 17 + .../Decoration/UndocumentedBell.php | 8 + .../using-traits/Decoration/Whistles.php | 16 + .../Examples/using-traits/DeleteEntity.php | 30 + .../Examples/using-traits/OpenApiSpec.php | 21 + .../Examples/using-traits/Product.php | 27 + .../using-traits/ProductController.php | 43 + .../Examples/using-traits/SimpleProduct.php | 21 + .../Examples/using-traits/TrickyProduct.php | 21 + .../Examples/using-traits/using-traits.yaml | 127 + vendor/zircote/swagger-php/LICENSE | 202 + vendor/zircote/swagger-php/README.md | 150 + vendor/zircote/swagger-php/bin/openapi | 234 + vendor/zircote/swagger-php/composer.json | 112 + .../swagger-php/docs/.vitepress/config.js | 82 + .../.vitepress/theme/components/Codeblock.vue | 31 + .../docs/.vitepress/theme/custom.css | 30 + .../docs/.vitepress/theme/index.js | 14 + .../docs/.vitepress/theme/tabs.css | 80 + .../swagger-php/docs/guide/annotations.md | 141 + .../swagger-php/docs/guide/attributes.md | 41 + .../docs/guide/common-techniques.md | 190 + .../swagger-php/docs/guide/cookbook.md | 690 +++ vendor/zircote/swagger-php/docs/guide/faq.md | 80 + .../guide/generating-openapi-documents.md | 60 + .../zircote/swagger-php/docs/guide/index.md | 20 + .../swagger-php/docs/guide/installation.md | 20 + .../swagger-php/docs/guide/migrating-to-v3.md | 58 + .../swagger-php/docs/guide/migrating-to-v4.md | 138 + .../docs/guide/required-elements.md | 41 + .../swagger-php/docs/guide/under-the-hood.md | 50 + vendor/zircote/swagger-php/docs/index.md | 56 + vendor/zircote/swagger-php/docs/package.json | 14 + .../swagger-php/docs/reference/annotations.md | 1212 +++++ .../swagger-php/docs/reference/attributes.md | 1664 +++++++ .../swagger-php/docs/reference/generator.md | 161 + .../swagger-php/docs/reference/index.md | 23 + .../swagger-php/docs/reference/processors.md | 6 + .../swagger-php/docs/related-projects.md | 35 + .../docs/snippets/example_annotations.php | 21 + .../docs/snippets/minimal_api.yaml | 11 + .../docs/snippets/minimal_api_annotations.php | 27 + .../docs/snippets/minimal_api_attributes.php | 15 + .../src/Analysers/AnalyserInterface.php | 18 + .../Analysers/AnnotationFactoryInterface.php | 21 + .../Analysers/AttributeAnnotationFactory.php | 132 + .../Analysers/ComposerAutoloaderScanner.php | 49 + .../Analysers/DocBlockAnnotationFactory.php | 58 + .../src/Analysers/DocBlockParser.php | 76 + .../src/Analysers/ReflectionAnalyser.php | 186 + .../src/Analysers/TokenAnalyser.php | 639 +++ .../src/Analysers/TokenScanner.php | 356 ++ vendor/zircote/swagger-php/src/Analysis.php | 440 ++ .../src/Annotations/AbstractAnnotation.php | 714 +++ .../src/Annotations/AdditionalProperties.php | 38 + .../src/Annotations/Attachable.php | 73 + .../src/Annotations/Components.php | 146 + .../swagger-php/src/Annotations/Contact.php | 63 + .../swagger-php/src/Annotations/Delete.php | 25 + .../src/Annotations/Discriminator.php | 69 + .../swagger-php/src/Annotations/Examples.php | 96 + .../src/Annotations/ExternalDocumentation.php | 76 + .../swagger-php/src/Annotations/Flow.php | 106 + .../swagger-php/src/Annotations/Get.php | 25 + .../swagger-php/src/Annotations/Head.php | 25 + .../swagger-php/src/Annotations/Header.php | 99 + .../swagger-php/src/Annotations/Info.php | 98 + .../swagger-php/src/Annotations/Items.php | 62 + .../src/Annotations/JsonContent.php | 42 + .../swagger-php/src/Annotations/License.php | 102 + .../swagger-php/src/Annotations/Link.php | 113 + .../swagger-php/src/Annotations/MediaType.php | 87 + .../swagger-php/src/Annotations/OpenApi.php | 236 + .../swagger-php/src/Annotations/Operation.php | 248 + .../swagger-php/src/Annotations/Options.php | 25 + .../swagger-php/src/Annotations/Parameter.php | 297 ++ .../swagger-php/src/Annotations/Patch.php | 25 + .../swagger-php/src/Annotations/PathItem.php | 151 + .../src/Annotations/PathParameter.php | 25 + .../swagger-php/src/Annotations/Post.php | 25 + .../swagger-php/src/Annotations/Property.php | 47 + .../swagger-php/src/Annotations/Put.php | 25 + .../src/Annotations/RequestBody.php | 94 + .../swagger-php/src/Annotations/Response.php | 128 + .../swagger-php/src/Annotations/Schema.php | 440 ++ .../src/Annotations/SecurityScheme.php | 136 + .../swagger-php/src/Annotations/Server.php | 87 + .../src/Annotations/ServerVariable.php | 87 + .../swagger-php/src/Annotations/Tag.php | 66 + .../swagger-php/src/Annotations/Trace.php | 25 + .../swagger-php/src/Annotations/Xml.php | 95 + .../src/Annotations/XmlContent.php | 43 + .../src/Attributes/AdditionalProperties.php | 101 + .../swagger-php/src/Attributes/Attachable.php | 16 + .../swagger-php/src/Attributes/Components.php | 48 + .../swagger-php/src/Attributes/Contact.php | 34 + .../swagger-php/src/Attributes/Delete.php | 13 + .../src/Attributes/Discriminator.php | 33 + .../swagger-php/src/Attributes/Examples.php | 42 + .../src/Attributes/ExternalDocumentation.php | 32 + .../swagger-php/src/Attributes/Flow.php | 38 + .../swagger-php/src/Attributes/Get.php | 13 + .../swagger-php/src/Attributes/Head.php | 13 + .../swagger-php/src/Attributes/Header.php | 40 + .../swagger-php/src/Attributes/Info.php | 38 + .../swagger-php/src/Attributes/Items.php | 105 + .../src/Attributes/JsonContent.php | 108 + .../swagger-php/src/Attributes/License.php | 34 + .../swagger-php/src/Attributes/Link.php | 44 + .../swagger-php/src/Attributes/MediaType.php | 38 + .../swagger-php/src/Attributes/OpenApi.php | 41 + .../src/Attributes/OperationTrait.php | 55 + .../swagger-php/src/Attributes/Options.php | 13 + .../swagger-php/src/Attributes/Parameter.php | 13 + .../src/Attributes/ParameterTrait.php | 58 + .../swagger-php/src/Attributes/Patch.php | 13 + .../swagger-php/src/Attributes/PathItem.php | 38 + .../src/Attributes/PathParameter.php | 13 + .../swagger-php/src/Attributes/Post.php | 13 + .../swagger-php/src/Attributes/Property.php | 107 + .../swagger-php/src/Attributes/Put.php | 13 + .../src/Attributes/RequestBody.php | 38 + .../swagger-php/src/Attributes/Response.php | 43 + .../swagger-php/src/Attributes/Schema.php | 106 + .../src/Attributes/SecurityScheme.php | 48 + .../swagger-php/src/Attributes/Server.php | 34 + .../src/Attributes/ServerVariable.php | 39 + .../swagger-php/src/Attributes/Tag.php | 33 + .../swagger-php/src/Attributes/Trace.php | 13 + .../swagger-php/src/Attributes/Xml.php | 38 + .../swagger-php/src/Attributes/XmlContent.php | 108 + vendor/zircote/swagger-php/src/Context.php | 273 ++ vendor/zircote/swagger-php/src/Generator.php | 438 ++ .../swagger-php/src/Loggers/ConsoleLogger.php | 95 + .../swagger-php/src/Loggers/DefaultLogger.php | 33 + .../src/Processors/AugmentParameters.php | 94 + .../src/Processors/AugmentProperties.php | 197 + .../src/Processors/AugmentRefs.php | 50 + .../src/Processors/AugmentSchemas.php | 137 + .../swagger-php/src/Processors/BuildPaths.php | 62 + .../src/Processors/CleanUnmerged.php | 35 + .../src/Processors/CleanUnusedComponents.php | 110 + .../src/Processors/DocBlockDescriptions.php | 104 + .../src/Processors/DocblockTrait.php | 170 + .../src/Processors/ExpandClasses.php | 49 + .../src/Processors/ExpandEnums.php | 57 + .../src/Processors/ExpandInterfaces.php | 57 + .../src/Processors/ExpandTraits.php | 49 + .../src/Processors/MergeIntoComponents.php | 34 + .../src/Processors/MergeIntoOpenApi.php | 56 + .../src/Processors/MergeJsonContent.php | 61 + .../swagger-php/src/Processors/MergeTrait.php | 80 + .../src/Processors/MergeXmlContent.php | 61 + .../src/Processors/OperationId.php | 72 + vendor/zircote/swagger-php/src/Serializer.php | 205 + vendor/zircote/swagger-php/src/Util.php | 197 + 1043 files changed, 116912 insertions(+), 2 deletions(-) create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 coupons/count-coupons.php create mode 100644 coupons/create-campaign.php create mode 100644 coupons/create-coupon.php create mode 100644 coupons/create-offer.php create mode 100644 coupons/delete-campaign.php create mode 100644 coupons/get-single-coupon.php create mode 100644 coupons/list-coupons.php create mode 100644 coupons/redeem-coupon.php create mode 100644 coupons/update-coupon.php create mode 100644 coupons/void-coupon.php create mode 100644 flights/create-airport.php create mode 100644 flights/create-boarding-pass.php create mode 100644 flights/create-carrier.php create mode 100644 flights/create-flight-designator.php create mode 100644 flights/create-flight.php create mode 100644 flights/create-template.php create mode 100644 flights/delete-airport.php create mode 100644 flights/delete-carrier.php create mode 100644 flights/delete-flight-designator.php create mode 100644 flights/delete-flight.php create mode 100644 images/certificate.png create mode 100644 images/decrypt-key.png create mode 100644 images/decrypted-key.png create mode 100644 images/grpc.png create mode 100644 images/ini.png create mode 100644 images/pecl.png create mode 100644 images/variables.png create mode 100644 membership/burn-points.php create mode 100644 membership/create-program.php create mode 100644 membership/create-tier.php create mode 100644 membership/delete-member.php create mode 100644 membership/earn-points.php create mode 100644 membership/enrol-member.php create mode 100644 membership/list-members.php create mode 100644 membership/set-points.php create mode 100644 membership/update-member.php create mode 100644 vendor/autoload.php create mode 100755 vendor/bin/openapi create mode 100755 vendor/bin/yaml-lint create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php create mode 100644 vendor/doctrine/annotations/LICENSE create mode 100644 vendor/doctrine/annotations/README.md create mode 100644 vendor/doctrine/annotations/composer.json create mode 100644 vendor/doctrine/annotations/docs/en/annotations.rst create mode 100644 vendor/doctrine/annotations/docs/en/custom.rst create mode 100644 vendor/doctrine/annotations/docs/en/index.rst create mode 100644 vendor/doctrine/annotations/docs/en/sidebar.rst create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php create mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php create mode 100644 vendor/doctrine/lexer/LICENSE create mode 100644 vendor/doctrine/lexer/README.md create mode 100644 vendor/doctrine/lexer/composer.json create mode 100644 vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php create mode 100644 vendor/doctrine/lexer/psalm.xml create mode 100644 vendor/google/protobuf/LICENSE create mode 100644 vendor/google/protobuf/README.md create mode 100644 vendor/google/protobuf/composer.json create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php create mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Wrappers.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Any.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Api.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/BoolValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/BytesValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Descriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Duration.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Enum.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/FieldMask.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field_Kind.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/FloatValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Int32Value.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Int64Value.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ReservedRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumBuilderContext.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Type.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_JSType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBDecodeException.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBJsonWire.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/TimestampBase.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/ListValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Method.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Mixin.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/NullValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Option.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/SourceContext.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/StringValue.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Struct.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Syntax.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Timestamp.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Type.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php create mode 100644 vendor/google/protobuf/src/Google/Protobuf/Value.php create mode 100644 vendor/google/protobuf/src/phpdoc.dist.xml create mode 100644 vendor/grpc/grpc/LICENSE create mode 100644 vendor/grpc/grpc/MAINTAINERS.md create mode 100644 vendor/grpc/grpc/README.md create mode 100644 vendor/grpc/grpc/composer.json create mode 100644 vendor/grpc/grpc/etc/roots.pem create mode 100644 vendor/grpc/grpc/src/lib/AbstractCall.php create mode 100644 vendor/grpc/grpc/src/lib/BaseStub.php create mode 100644 vendor/grpc/grpc/src/lib/BidiStreamingCall.php create mode 100644 vendor/grpc/grpc/src/lib/CallInvoker.php create mode 100644 vendor/grpc/grpc/src/lib/ClientStreamingCall.php create mode 100644 vendor/grpc/grpc/src/lib/DefaultCallInvoker.php create mode 100644 vendor/grpc/grpc/src/lib/Interceptor.php create mode 100644 vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php create mode 100644 vendor/grpc/grpc/src/lib/MethodDescriptor.php create mode 100644 vendor/grpc/grpc/src/lib/RpcServer.php create mode 100644 vendor/grpc/grpc/src/lib/ServerCallReader.php create mode 100644 vendor/grpc/grpc/src/lib/ServerCallWriter.php create mode 100644 vendor/grpc/grpc/src/lib/ServerContext.php create mode 100644 vendor/grpc/grpc/src/lib/ServerStreamingCall.php create mode 100644 vendor/grpc/grpc/src/lib/Status.php create mode 100644 vendor/grpc/grpc/src/lib/UnaryCall.php create mode 100644 vendor/passkit/vendor/autoload.php create mode 100755 vendor/passkit/vendor/bin/openapi create mode 100755 vendor/passkit/vendor/bin/yaml-lint create mode 100644 vendor/passkit/vendor/composer/ClassLoader.php create mode 100644 vendor/passkit/vendor/composer/InstalledVersions.php create mode 100644 vendor/passkit/vendor/composer/LICENSE create mode 100644 vendor/passkit/vendor/composer/autoload_classmap.php create mode 100644 vendor/passkit/vendor/composer/autoload_files.php create mode 100644 vendor/passkit/vendor/composer/autoload_namespaces.php create mode 100644 vendor/passkit/vendor/composer/autoload_psr4.php create mode 100644 vendor/passkit/vendor/composer/autoload_real.php create mode 100644 vendor/passkit/vendor/composer/autoload_static.php create mode 100644 vendor/passkit/vendor/composer/installed.json create mode 100644 vendor/passkit/vendor/composer/installed.php create mode 100644 vendor/passkit/vendor/composer/platform_check.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/LICENSE create mode 100644 vendor/passkit/vendor/doctrine/annotations/README.md create mode 100644 vendor/passkit/vendor/doctrine/annotations/composer.json create mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst create mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst create mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst create mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php create mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php create mode 100644 vendor/passkit/vendor/doctrine/lexer/LICENSE create mode 100644 vendor/passkit/vendor/doctrine/lexer/README.md create mode 100644 vendor/passkit/vendor/doctrine/lexer/composer.json create mode 100644 vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php create mode 100644 vendor/passkit/vendor/doctrine/lexer/psalm.xml create mode 100644 vendor/passkit/vendor/psr/cache/CHANGELOG.md create mode 100644 vendor/passkit/vendor/psr/cache/LICENSE.txt create mode 100644 vendor/passkit/vendor/psr/cache/README.md create mode 100644 vendor/passkit/vendor/psr/cache/composer.json create mode 100644 vendor/passkit/vendor/psr/cache/src/CacheException.php create mode 100644 vendor/passkit/vendor/psr/cache/src/CacheItemInterface.php create mode 100644 vendor/passkit/vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100644 vendor/passkit/vendor/psr/cache/src/InvalidArgumentException.php create mode 100644 vendor/passkit/vendor/psr/log/LICENSE create mode 100644 vendor/passkit/vendor/psr/log/README.md create mode 100644 vendor/passkit/vendor/psr/log/composer.json create mode 100644 vendor/passkit/vendor/psr/log/src/AbstractLogger.php create mode 100644 vendor/passkit/vendor/psr/log/src/InvalidArgumentException.php create mode 100644 vendor/passkit/vendor/psr/log/src/LogLevel.php create mode 100644 vendor/passkit/vendor/psr/log/src/LoggerAwareInterface.php create mode 100644 vendor/passkit/vendor/psr/log/src/LoggerAwareTrait.php create mode 100644 vendor/passkit/vendor/psr/log/src/LoggerInterface.php create mode 100644 vendor/passkit/vendor/psr/log/src/LoggerTrait.php create mode 100644 vendor/passkit/vendor/psr/log/src/NullLogger.php create mode 100644 vendor/passkit/vendor/symfony/finder/CHANGELOG.md create mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 vendor/passkit/vendor/symfony/finder/Finder.php create mode 100644 vendor/passkit/vendor/symfony/finder/Gitignore.php create mode 100644 vendor/passkit/vendor/symfony/finder/Glob.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php create mode 100644 vendor/passkit/vendor/symfony/finder/LICENSE create mode 100644 vendor/passkit/vendor/symfony/finder/README.md create mode 100644 vendor/passkit/vendor/symfony/finder/SplFileInfo.php create mode 100644 vendor/passkit/vendor/symfony/finder/composer.json create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/README.md create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/composer.json create mode 100644 vendor/passkit/vendor/symfony/yaml/CHANGELOG.md create mode 100644 vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Dumper.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Escaper.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Inline.php create mode 100644 vendor/passkit/vendor/symfony/yaml/LICENSE create mode 100644 vendor/passkit/vendor/symfony/yaml/Parser.php create mode 100644 vendor/passkit/vendor/symfony/yaml/README.md create mode 100755 vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint create mode 100644 vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Unescaper.php create mode 100644 vendor/passkit/vendor/symfony/yaml/Yaml.php create mode 100644 vendor/passkit/vendor/symfony/yaml/composer.json create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Changelog.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/example-object/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/example-object/example-object.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/misc.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/sideeffect.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/ActualModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/AlmostModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/ApiController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/BaseModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/IntermediateModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/SoCloseModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/nesting.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Pet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Tag.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Petstore.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Security.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/petstore-3.0.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/PetController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/StoreController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Category.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Order.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Pet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Tag.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/User.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiTags.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/PetstoreAuth.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.json create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Employee.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Fl.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Request.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/polymorphism-3.1.0.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/polymorphism.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/SchemaQueryParameter.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/Product.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/ProductController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/scan.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePetsController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple-3.1.0.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Controllers/PetWithDocsController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/ErrorModel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/Pet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/Pet.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/PetsController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/petstore.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ColorInterface.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/GreenProduct.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/Product.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ProductController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ProductInterface.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/using-interfaces.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/MyAttribute.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/PullRequest.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/RepositoriesController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/State.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/User.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/using-links-php81.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/PullRequest.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/RepositoriesController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/Repository.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/User.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/UsersController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/using-links.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/Model.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/Product.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/ProductController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/PropertyRefController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/StockLevel.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/using-refs.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/BellsAndWhistles.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Blink.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Colour.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/Bells.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/UndocumentedBell.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/Whistles.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/DeleteEntity.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/OpenApiSpec.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Product.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/ProductController.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/SimpleProduct.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/TrickyProduct.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/using-traits.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/LICENSE create mode 100644 vendor/passkit/vendor/zircote/swagger-php/README.md create mode 100755 vendor/passkit/vendor/zircote/swagger-php/bin/openapi create mode 100644 vendor/passkit/vendor/zircote/swagger-php/composer.json create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/cookbook.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/index.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/package.json create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api.yaml create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api_annotations.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api_attributes.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AnnotationFactoryInterface.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Components.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Discriminator.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Head.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Header.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Parameter.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathItem.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Post.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Property.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/RequestBody.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Xml.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Components.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Discriminator.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Head.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Header.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Parameter.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ParameterTrait.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathItem.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Post.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Property.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/RequestBody.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Xml.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Context.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Generator.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php create mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Util.php create mode 100644 vendor/protobuf-php/protobuf/.gitignore create mode 100644 vendor/protobuf-php/protobuf/.travis.yml create mode 100644 vendor/protobuf-php/protobuf/LICENSE create mode 100644 vendor/protobuf-php/protobuf/Makefile create mode 100644 vendor/protobuf-php/protobuf/README.md create mode 100644 vendor/protobuf-php/protobuf/composer.json create mode 100755 vendor/protobuf-php/protobuf/examples/addressbook-add-person.php create mode 100644 vendor/protobuf-php/protobuf/examples/addressbook.proto create mode 100644 vendor/protobuf-php/protobuf/examples/src/.gitignore create mode 100644 vendor/protobuf-php/protobuf/phpunit.xml.dist create mode 100644 vendor/protobuf-php/protobuf/ruleset.xml create mode 100644 vendor/protobuf-php/protobuf/src/AbstractMessage.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/StreamReader.php create mode 100644 vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php create mode 100644 vendor/protobuf-php/protobuf/src/Collection.php create mode 100644 vendor/protobuf-php/protobuf/src/ComputeSizeContext.php create mode 100644 vendor/protobuf-php/protobuf/src/Configuration.php create mode 100644 vendor/protobuf-php/protobuf/src/Enum.php create mode 100644 vendor/protobuf-php/protobuf/src/EnumCollection.php create mode 100644 vendor/protobuf-php/protobuf/src/Exception.php create mode 100644 vendor/protobuf-php/protobuf/src/Extension.php create mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php create mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php create mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php create mode 100644 vendor/protobuf-php/protobuf/src/Field.php create mode 100644 vendor/protobuf-php/protobuf/src/Message.php create mode 100644 vendor/protobuf-php/protobuf/src/MessageCollection.php create mode 100644 vendor/protobuf-php/protobuf/src/MessageSerializer.php create mode 100644 vendor/protobuf-php/protobuf/src/ReadContext.php create mode 100644 vendor/protobuf-php/protobuf/src/ScalarCollection.php create mode 100644 vendor/protobuf-php/protobuf/src/Serializer.php create mode 100644 vendor/protobuf-php/protobuf/src/Stream.php create mode 100644 vendor/protobuf-php/protobuf/src/StreamCollection.php create mode 100644 vendor/protobuf-php/protobuf/src/TextFormat.php create mode 100644 vendor/protobuf-php/protobuf/src/Unknown.php create mode 100644 vendor/protobuf-php/protobuf/src/UnknownFieldSet.php create mode 100644 vendor/protobuf-php/protobuf/src/WireFormat.php create mode 100644 vendor/protobuf-php/protobuf/src/WriteContext.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/ConfigurationTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/EnumTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/FieldTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/Protos/.gitignore create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/complex.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension-animal-cat.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension-command-version.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/php_options.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/php_options.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/service.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.proto create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.txt create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/unknown.bin create mode 100644 vendor/protobuf-php/protobuf/tests/Resources/unknown.proto create mode 100644 vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/StreamTest.php create mode 100644 vendor/protobuf-php/protobuf/tests/TestCase.php create mode 100644 vendor/protobuf-php/protobuf/tests/TextFormatTest.php create mode 100755 vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh create mode 100644 vendor/psr/cache/CHANGELOG.md create mode 100644 vendor/psr/cache/LICENSE.txt create mode 100644 vendor/psr/cache/README.md create mode 100644 vendor/psr/cache/composer.json create mode 100644 vendor/psr/cache/src/CacheException.php create mode 100644 vendor/psr/cache/src/CacheItemInterface.php create mode 100644 vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100644 vendor/psr/cache/src/InvalidArgumentException.php create mode 100644 vendor/psr/log/LICENSE create mode 100644 vendor/psr/log/README.md create mode 100644 vendor/psr/log/composer.json create mode 100644 vendor/psr/log/src/AbstractLogger.php create mode 100644 vendor/psr/log/src/InvalidArgumentException.php create mode 100644 vendor/psr/log/src/LogLevel.php create mode 100644 vendor/psr/log/src/LoggerAwareInterface.php create mode 100644 vendor/psr/log/src/LoggerAwareTrait.php create mode 100644 vendor/psr/log/src/LoggerInterface.php create mode 100644 vendor/psr/log/src/LoggerTrait.php create mode 100644 vendor/psr/log/src/NullLogger.php create mode 100644 vendor/symfony/finder/CHANGELOG.md create mode 100644 vendor/symfony/finder/Comparator/Comparator.php create mode 100644 vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 vendor/symfony/finder/Finder.php create mode 100644 vendor/symfony/finder/Gitignore.php create mode 100644 vendor/symfony/finder/Glob.php create mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php create mode 100644 vendor/symfony/finder/LICENSE create mode 100644 vendor/symfony/finder/README.md create mode 100644 vendor/symfony/finder/SplFileInfo.php create mode 100644 vendor/symfony/finder/composer.json create mode 100644 vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 vendor/symfony/polyfill-ctype/LICENSE create mode 100644 vendor/symfony/polyfill-ctype/README.md create mode 100644 vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 vendor/symfony/polyfill-ctype/composer.json create mode 100644 vendor/symfony/yaml/CHANGELOG.md create mode 100644 vendor/symfony/yaml/Command/LintCommand.php create mode 100644 vendor/symfony/yaml/Dumper.php create mode 100644 vendor/symfony/yaml/Escaper.php create mode 100644 vendor/symfony/yaml/Exception/DumpException.php create mode 100644 vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/yaml/Exception/ParseException.php create mode 100644 vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 vendor/symfony/yaml/Inline.php create mode 100644 vendor/symfony/yaml/LICENSE create mode 100644 vendor/symfony/yaml/Parser.php create mode 100644 vendor/symfony/yaml/README.md create mode 100755 vendor/symfony/yaml/Resources/bin/yaml-lint create mode 100644 vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 vendor/symfony/yaml/Unescaper.php create mode 100644 vendor/symfony/yaml/Yaml.php create mode 100644 vendor/symfony/yaml/composer.json create mode 100644 vendor/zircote/swagger-php/Changelog.md create mode 100644 vendor/zircote/swagger-php/Examples/Readme.md create mode 100644 vendor/zircote/swagger-php/Examples/example-object/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/example-object/example-object.yaml create mode 100644 vendor/zircote/swagger-php/Examples/misc/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/misc/misc.yaml create mode 100644 vendor/zircote/swagger-php/Examples/misc/sideeffect.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/ActualModel.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/AlmostModel.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/ApiController.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/BaseModel.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/IntermediateModel.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/SoCloseModel.php create mode 100644 vendor/zircote/swagger-php/Examples/nesting/nesting.yaml create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Pet.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Tag.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Petstore.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Security.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/petstore-3.0.yaml create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/PetController.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/StoreController.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Category.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Order.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Pet.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Tag.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/User.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiTags.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/PetstoreAuth.php create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.json create mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Controller.php create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Employee.php create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Fl.php create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Request.php create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/polymorphism-3.1.0.yaml create mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/polymorphism.yaml create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/SchemaQueryParameter.php create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/Product.php create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/ProductController.php create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/scan.php create mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml create mode 100644 vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePet.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePetsController.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple-3.1.0.yaml create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple.yaml create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Controllers/PetWithDocsController.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/ErrorModel.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/Pet.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/Pet.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/PetsController.php create mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/petstore.yaml create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ColorInterface.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/GreenProduct.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/Product.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ProductController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ProductInterface.php create mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/using-interfaces.yaml create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/MyAttribute.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/PullRequest.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/RepositoriesController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/State.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/User.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/using-links-php81.yaml create mode 100644 vendor/zircote/swagger-php/Examples/using-links/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/PullRequest.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/RepositoriesController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/Repository.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/User.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/UsersController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-links/using-links.yaml create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/Model.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/Product.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/ProductController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/PropertyRefController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/StockLevel.php create mode 100644 vendor/zircote/swagger-php/Examples/using-refs/using-refs.yaml create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/BellsAndWhistles.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Blink.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Colour.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/Bells.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/UndocumentedBell.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/Whistles.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/DeleteEntity.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/OpenApiSpec.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Product.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/ProductController.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/SimpleProduct.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/TrickyProduct.php create mode 100644 vendor/zircote/swagger-php/Examples/using-traits/using-traits.yaml create mode 100644 vendor/zircote/swagger-php/LICENSE create mode 100644 vendor/zircote/swagger-php/README.md create mode 100755 vendor/zircote/swagger-php/bin/openapi create mode 100644 vendor/zircote/swagger-php/composer.json create mode 100644 vendor/zircote/swagger-php/docs/.vitepress/config.js create mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue create mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css create mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/index.js create mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css create mode 100644 vendor/zircote/swagger-php/docs/guide/annotations.md create mode 100644 vendor/zircote/swagger-php/docs/guide/attributes.md create mode 100644 vendor/zircote/swagger-php/docs/guide/common-techniques.md create mode 100644 vendor/zircote/swagger-php/docs/guide/cookbook.md create mode 100644 vendor/zircote/swagger-php/docs/guide/faq.md create mode 100644 vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md create mode 100644 vendor/zircote/swagger-php/docs/guide/index.md create mode 100644 vendor/zircote/swagger-php/docs/guide/installation.md create mode 100644 vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md create mode 100644 vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md create mode 100644 vendor/zircote/swagger-php/docs/guide/required-elements.md create mode 100644 vendor/zircote/swagger-php/docs/guide/under-the-hood.md create mode 100644 vendor/zircote/swagger-php/docs/index.md create mode 100644 vendor/zircote/swagger-php/docs/package.json create mode 100644 vendor/zircote/swagger-php/docs/reference/annotations.md create mode 100644 vendor/zircote/swagger-php/docs/reference/attributes.md create mode 100644 vendor/zircote/swagger-php/docs/reference/generator.md create mode 100644 vendor/zircote/swagger-php/docs/reference/index.md create mode 100644 vendor/zircote/swagger-php/docs/reference/processors.md create mode 100644 vendor/zircote/swagger-php/docs/related-projects.md create mode 100644 vendor/zircote/swagger-php/docs/snippets/example_annotations.php create mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api.yaml create mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api_annotations.php create mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api_attributes.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/AnnotationFactoryInterface.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php create mode 100644 vendor/zircote/swagger-php/src/Analysers/TokenScanner.php create mode 100644 vendor/zircote/swagger-php/src/Analysis.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Attachable.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Components.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Contact.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Delete.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Discriminator.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Examples.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Flow.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Get.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Head.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Header.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Info.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Items.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/JsonContent.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/License.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Link.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/MediaType.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/OpenApi.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Operation.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Options.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Parameter.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Patch.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/PathItem.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/PathParameter.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Post.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Property.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Put.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/RequestBody.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Response.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Schema.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Server.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/ServerVariable.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Tag.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Trace.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/Xml.php create mode 100644 vendor/zircote/swagger-php/src/Annotations/XmlContent.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Attachable.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Components.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Contact.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Delete.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Discriminator.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Examples.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Flow.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Get.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Head.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Header.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Info.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Items.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/JsonContent.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/License.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Link.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/MediaType.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/OpenApi.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/OperationTrait.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Options.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Parameter.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/ParameterTrait.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Patch.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/PathItem.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/PathParameter.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Post.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Property.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Put.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/RequestBody.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Response.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Schema.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Server.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/ServerVariable.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Tag.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Trace.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/Xml.php create mode 100644 vendor/zircote/swagger-php/src/Attributes/XmlContent.php create mode 100644 vendor/zircote/swagger-php/src/Context.php create mode 100644 vendor/zircote/swagger-php/src/Generator.php create mode 100644 vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php create mode 100644 vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php create mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentParameters.php create mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentProperties.php create mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentRefs.php create mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php create mode 100644 vendor/zircote/swagger-php/src/Processors/BuildPaths.php create mode 100644 vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php create mode 100644 vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php create mode 100644 vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php create mode 100644 vendor/zircote/swagger-php/src/Processors/DocblockTrait.php create mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandClasses.php create mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandEnums.php create mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php create mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandTraits.php create mode 100644 vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php create mode 100644 vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php create mode 100644 vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php create mode 100644 vendor/zircote/swagger-php/src/Processors/MergeTrait.php create mode 100644 vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php create mode 100644 vendor/zircote/swagger-php/src/Processors/OperationId.php create mode 100644 vendor/zircote/swagger-php/src/Serializer.php create mode 100644 vendor/zircote/swagger-php/src/Util.php diff --git a/README.md b/README.md index f15f604..6e86740 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,107 @@ -# passkit-php-quickstart - +PassKit PHP Quickstart +======================= +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/PassKit/passkit-php-grpc-sdk/main/LICENSE) +### Overview + +This quickstart aims to help get PHP developers up and running with the PassKit SDK as quickly as possible. + +### Prerequisites + +You will need the following: +- PHP 7.0 or higher [Installation Guide](https://grpc.io/docs/languages/php/quickstart/) +- PECL +- Composer [Download Here](https://getcomposer.org/) ([Installation Guide](https://getcomposer.org/download/) ) +- A PassKit account (signup for free at [PassKit](https://app.passkit.com)) +- Your PassKit SDK Credentials (available from the [Developer Tools Page](https://app.passkit.com/app/account/developer-tools)) +- Apple wallet certificate id (for flights only, available from the [certificate page](https://app.passkit.com/app/account/certificates)) + ![ScreenShot](images/certificate.png) + + +### Configuration + +1. Install & Enable the gRPC PHP extension +![ScreenShot](images/pecl.png) + +After installing the gRPC extension, make sure the extension is enabled in your `php.ini` file by typing `php --ini` +![ScreenShot](images/ini.png) + +Make sure that the file has `extension="grpc.so"` and add the line if it doesn't so it matches the screenshot below: +![ScreenShot](images/grpc.png) + +For detailed steps visit the [gRPC PHP quickstart](https://grpc.io/docs/languages/php/quickstart/). + +2. In the certs folder of the repository add the following three PassKit credential files: + - certificate.pem + - ca-chain.pem + - key.pem + + You can disregard the key-java.pem credentials file as it is not compatible with PHP. + +3. Now we need to decrypt your `key.pem`. At your project root directory, run `cd ./certs` `openssl ec -in key.pem -out key.pem`. +![ScreenShot](images/decrypt-key.png) +For the password use the one-time password that you used for generating the SDK credentials. + +Your `key.pem` file should look like below. + ![ScreenShot](images/decrypted-key.png) + If you do not see `Proc-Type: 4,ENCEYPTED` on line 2, you have successfully decrypted `key.pem`. + +4. Modify the variables with the values for your programs or campaigns in each of the membership, coupons and flights methods. The variables to modify will be at the top of each method. +![ScreenShot](images/variables.png) + +5. To run each method go into the directory, for members `cd membership`, for coupons `cd coupons` and for flights `cd flights`. Then run php plus the name of the method e.g. `php enrol-member.php` to run that method. + +## Examples +### Membership Cards +Follow the steps of the [Quickstart](#quickstart) to get the quickstart up and running. +In the membership folder the methods there are: +- create-program.php - takes a new program name and creates a new program +- create-tier.php - takes the programId of the program just created in the above program, creates a new template (based of default template), creates a tier, and links this tier to the program +- enrol-member.php - takes programId and tierId created by the above methods, and memberDetails, creates a new member record, and sends a welcome email to deliver membership card url + - GetSingleMember() - takes memberId and returns the record of that member +- list-members.php - takes search conditions as pagination object and returns list of member records which match with the conditions +- update-member.php - takes memberId and memberDetails, and updates existing member record +- earn-points.php - takes a programId of an existing program and memberId of existing member to add points to chosen member +- burn-points.php - takes a programId of an existing program and memberId of existing member to use points from a chosen member +- set-points.php - takes a programId of an existing program and memberId of existing member to set the points of a chosen member +- delete-member.php - takes programId, tierId, memberId and memberDetails, deletes an existing member record + + +### Coupons +Follow the steps of the [Quickstart](#quickstart) to get the quickstart up and running. +In the coupons folder the methods are: +- create-campaign.php - takes a new campaign name and creates a new campaign +- create-offer.php - takes a campaignId of the campaign you just created and creates a new template (based of default template), creates an offer, and links this offer to the campaign +- create-coupon.php - takes campaignId and offerId created by the above methods, and couponDetails, creates a new coupon record, and sends a welcome email to deliver coupon card url +- get-single-coupon.php - takes couponId and returns the record of that coupon +- list-coupons.php - takes search conditions as pagination object and returns list of coupon records which match with the conditions +- count-coupons.php - takes search conditions as pagination object and returns the number of coupons who match with the condition +- update-coupon.php - takes a campaignId of an existing campaign and couponId of existing coupon to update that coupon +- redeem-coupon.php - takes a campaignId of an existing campaign and couponId of existing coupon to redeem that coupon +- void-coupon.php - takes the couponId, offerId and campaignId to void an existing coupon +- delete-campaign.php - takes the campaignId to delete an existing campaign + + +### Boarding Passes +#### Issue A Boarding Pass. +Follow the steps of the [Quickstart](#quickstart) to get the quickstart up and running. +In the flights folder the methods are: +- create-template.php - creates the pass template for flights and boarding passes +- create-carrier.php - takes a new carrier code and creates a new carrier +- create-airport.php - takes a new airport code and creates a new airport. +- create-flight.php - takes templateId , from previous method, to use as base template and uses a carrier code, created from previous method, and creates a new flight +- create-flight-designator.php - creates flight designator using flight code +- create-boarding-pass.php - takes templateId, from previous method, and customer details creates a new boarding pass, and sends a welcome email to deliver boarding pass url +- delete-flight.php - takes an existing flight number as well as other details and deletes the flight associated with it +- delete-flight-designator.php - takes an existing flight designation and deletes the flight designator associated with it +- delete-airports.php - takes an existing airport code and deletes the airport associated with it +- delete-carrier.php - takes an existing carrier code and deletes the carrier associated with it + +## Documentation +* [PassKit Membership Official Documentation](https://docs.passkit.io/protocols/member) +* [PassKit Coupons Official Documentation](https://docs.passkit.io/protocols/coupon) +* [PassKit Boarding Passes Official Documentation](https://docs.passkit.io/protocols/boarding) + + +## Getting Help +* [Online chat support](https://passkit.com/) + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..493474f --- /dev/null +++ b/composer.json @@ -0,0 +1,51 @@ +{ + "name": "passkit/passkit-php-quickstart", + "description": "PHP gRPC SDK for Apple Wallet and Google Pay Membership / Loyalty / Access Cards, Coupons, Flights & Event-Tickets.", + "keywords": [ + "passkit", + "php", + "sdk", + "api", + "grpc" + ], + "version": "1.0.0", + "homepage": "http://passkit.com", + "license": "MIT", + "authors": [ + { + "name": "PassKit Inc.", + "homepage": "https://passkit.com" + } + ], + "repositories": [ + { + "type": "git", + "url": "https://github.com/passkit/passkit-php-grpc-sdk.git" + }, + { + "type": "vcs", + "url": "https://github.com/stanley-cheung/Protobuf-PHP" + } + ], + "require": { + "grpc/grpc": "^v1.42.0", + "google/protobuf": "^v3.13.0", + "passkit/passkit-php-grpc-sdk": "1.0.0", + "zircote/swagger-php": "^4.4", + "protobuf-php/protobuf": "^0.1.3" + }, + "autoload": { + "psr-4": { + "Analytics\\": "lib/Analytics", + "Cabin_codes\\": "lib/Cabin_codes", + "Event_tickets\\": "lib/Event_tickets", + "Flights\\": "lib/Flights", + "Io\\": "lib/Io", + "Members\\": "lib/Members", + "Single_use_coupons\\": "lib/Single_use_coupons", + "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", + "Google\\Api\\": "lib/extra/google/api" + } + } +} \ No newline at end of file diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..18a526f --- /dev/null +++ b/composer.lock @@ -0,0 +1,767 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "bb9b6790afc6f40fdf27b2be8a3dba9a", + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "google/protobuf", + "version": "v3.21.1", + "source": { + "type": "git", + "url": "https://github.com/protocolbuffers/protobuf-php.git", + "reference": "68f71264d8816f001177d68ce99d25b28e212d4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/68f71264d8816f001177d68ce99d25b28e212d4c", + "reference": "68f71264d8816f001177d68ce99d25b28e212d4c", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proto library for PHP", + "homepage": "https://developers.google.com/protocol-buffers/", + "keywords": [ + "proto" + ], + "support": { + "issues": "https://github.com/protocolbuffers/protobuf-php/issues", + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.1" + }, + "time": "2022-05-27T22:57:31+00:00" + }, + { + "name": "grpc/grpc", + "version": "1.42.0", + "source": { + "type": "git", + "url": "https://github.com/grpc/grpc-php.git", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grpc/grpc-php/zipball/9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "google/auth": "^v1.3.0" + }, + "suggest": { + "ext-protobuf": "For better performance, install the protobuf C extension.", + "google/protobuf": "To get started using grpc quickly, install the native protobuf library." + }, + "type": "library", + "autoload": { + "psr-4": { + "Grpc\\": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "gRPC library for PHP", + "homepage": "https://grpc.io", + "keywords": [ + "rpc" + ], + "support": { + "source": "https://github.com/grpc/grpc-php/tree/v1.42.0" + }, + "time": "2021-11-19T08:13:51+00:00" + }, + { + "name": "passkit/passkit-php-grpc-sdk", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", + "reference": "b03c1020c50d27d5fd51ed20267ba10da73be94e" + }, + "require": { + "google/protobuf": "^v3.13.0", + "grpc/grpc": "^v1.30.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Analytics\\": "lib/Analytics", + "Cabin_codes\\": "lib/Cabin_codes", + "Event_tickets\\": "lib/Event_tickets", + "Flights\\": "lib/Flights", + "Io\\": "lib/Io", + "Members\\": "lib/Members", + "Single_use_coupons\\": "lib/Single_use_coupons", + "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", + "Google\\Api\\": "lib/extra/google/api" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PassKit Inc.", + "homepage": "https://passkit.com" + } + ], + "description": "PHP gRPC SDK for Apple Wallet and Google Pay Membership / Loyalty / Access Cards, Coupons, Flights & Event-Tickets.", + "homepage": "http://passkit.com", + "keywords": [ + "api", + "grpc", + "passkit", + "php", + "sdk" + ], + "time": "2020-10-15T09:16:03+00:00" + }, + { + "name": "protobuf-php/protobuf", + "version": "v0.1.3", + "source": { + "type": "git", + "url": "https://github.com/protobuf-php/protobuf.git", + "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protobuf-php/protobuf/zipball/c0da95f75ea418b39b02ff4528ca9926cc246a8c", + "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "instaclick/coding-standard": "^1.1", + "instaclick/object-calisthenics-sniffs": "dev-master", + "instaclick/symfony2-coding-standard": "dev-remaster", + "php-mock/php-mock-phpunit": "^0.2", + "phpunit/phpunit": "^4", + "protobuf-php/protobuf-plugin": ">=0.1", + "satooshi/php-coveralls": "^0.6", + "squizlabs/php_codesniffer": "^1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Protobuf\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabio B. Silva", + "email": "fabio.bat.silva@gmail.com", + "homepage": "https://github.com/FabioBatSilva" + }, + { + "name": "Iván -DrSlump- Montes", + "email": "drslump@pollinimini.net", + "homepage": "https://github.com/drslump" + } + ], + "description": "PHP implementation of Google's Protocol Buffers", + "homepage": "https://github.com/protobuf-php/protobuf", + "keywords": [ + "protobuf", + "protocol buffer", + "serializing" + ], + "support": { + "issues": "https://github.com/protobuf-php/protobuf/issues", + "source": "https://github.com/protobuf-php/protobuf/tree/master" + }, + "time": "2016-09-21T23:47:34+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-15T08:08:08+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-15T14:25:02+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "4.4.5", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.7", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || 3.0", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.4.5" + }, + "time": "2022-06-02T21:05:02+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/coupons/count-coupons.php b/coupons/count-coupons.php new file mode 100644 index 0000000..63d0419 --- /dev/null +++ b/coupons/count-coupons.php @@ -0,0 +1,46 @@ + $credentials + ]); + // Set the coupon list request body + $listRequest = new Single_use_coupons\ListRequest(); + $listRequest->setCouponCampaignId($campaignId); + $filter = new Io\Filter(); + $filter->setFilterField("offerId"); + $filter->setFilterValue($offerId); + $filter->setFilterOperator("eq"); + $listRequest->setFilters($filter); + + + list($id, $status) = $client->countCouponsByCouponCampaign($listRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/create-campaign.php b/coupons/create-campaign.php new file mode 100644 index 0000000..3259658 --- /dev/null +++ b/coupons/create-campaign.php @@ -0,0 +1,37 @@ + $credentials + ]); + // Set the campaign body + $campaign = new Single_use_coupons\CouponCampaign(); + $campaign->setName("Quickstart Campaign"); + $campaign->setStatus(1, 4); + + list($id, $status) = $client->createCouponCampaign($campaign)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + //You can use the campaignId displayed below for other coupon methods + echo "CampaignId" . $campaign->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/create-coupon.php b/coupons/create-coupon.php new file mode 100644 index 0000000..e62c1ca --- /dev/null +++ b/coupons/create-coupon.php @@ -0,0 +1,54 @@ + $credentials + ]); + // Generates coupon with mandatory fields, more fields can be added, refer to docs.passkit.io and select Coupons for the full list + $coupon = new Single_use_coupons\Coupon(); + $coupon->setCampaignId($campaignId); + $coupon->setOfferId($offerId); + $person = new Io\Person(); + $person->setDisplayName("Loyal Larry"); + $dateOfBirth = new Io\Date(); + $dateOfBirth->setDay(22); + $dateOfBirth->setMonth(6); + $dateOfBirth->setYear(2020); + $person->setDateOfBirth($dateOfBirth); + $person->setEmailAddress($email); + $coupon->setPerson($person); + + list($id, $status) = $client->createCoupon($coupon)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + //You can use the couponId displayed below for other coupon methods + echo "https://pub1.pskt.io/" . $id->getId() . "\n"; + echo "CouponId" . $coupon->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/create-offer.php b/coupons/create-offer.php new file mode 100644 index 0000000..acfa430 --- /dev/null +++ b/coupons/create-offer.php @@ -0,0 +1,75 @@ + $credentials + ]); + + //Create templates client + $templatesclient = new Io\TemplatesClient('grpc.pub1.passkit.io:443', [ + 'credentials' => $credentials + ]); + + // Create the template for the card + // In order to create a tier, we need a pass template id which holds pass design data. Let's use the default pass template for now. + $defaultTemplateRequest = new Io\DefaultTemplateRequest(); + $defaultTemplateRequest->setProtocol(101); + $defaultTemplateRequest->setRevision(1); + $defaultPassTemplate = new Io\PassTemplate(); + + $defaultPassTemplate->$templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + // If you use the default template, you need to set name, description and timezone because these fields are mandatory. + $defaultPassTemplate->setName("Quickstart"); + $defaultPassTemplate->setDescription("quick start sample template"); + $defaultPassTemplate->setTimezone("America/New_York"); + + + list($id, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + + // Set the offer body + $offer = new Single_use_coupons\CouponOffer(); + $offer->setId("base"); + $offer->setBeforeRedeemPassTemplateId($defaultPassTemplate->getId()); + $offer->setOfferTitle("BaseOffer"); + $offer->setOfferShortTitle("BaseOffer"); + $offer->setOfferDetails("Base offer"); + $startdate = new DateTime(); + $enddate = new DateTime(); + $enddate->setDate(2022, 6, 28); + $offer->setIssueStartDate($startdate->getTimestamp()); + $offer->setIssueEndDate($enddate->getTimestamp()); + + list($id, $status) = $client->createCouponOffer($offer)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + //You can use the offerId displayed below for other coupon methods + echo "OfferId" . $offer->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/delete-campaign.php b/coupons/delete-campaign.php new file mode 100644 index 0000000..b5ccbe1 --- /dev/null +++ b/coupons/delete-campaign.php @@ -0,0 +1,36 @@ + $credentials + ]); + // Set the delete campaign body + $id = new Io\Id(); + $id->setId($campaignId); + + list($id, $status) = $client->deleteCouponCampaign($id)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/get-single-coupon.php b/coupons/get-single-coupon.php new file mode 100644 index 0000000..4225f94 --- /dev/null +++ b/coupons/get-single-coupon.php @@ -0,0 +1,41 @@ + $credentials + ]); + // Set the coupon id + $id = new Io\Id(); + $id->setId($couponId); + + list($id, $status) = $client->getCouponById($id)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/list-coupons.php b/coupons/list-coupons.php new file mode 100644 index 0000000..9dd5e38 --- /dev/null +++ b/coupons/list-coupons.php @@ -0,0 +1,41 @@ + $credentials + ]); + // Set the coupon list request + $listRequest = new Single_use_coupons\ListRequest(); + $listRequest->setCouponCampaignId($campaignId); + + $call = $client->listCouponsByCouponCampaign($listRequest); + $coupons = $call->responses(); + foreach ($coupons as $coupon) { + echo $coupon->getId() . "\n"; + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/redeem-coupon.php b/coupons/redeem-coupon.php new file mode 100644 index 0000000..5b6b22b --- /dev/null +++ b/coupons/redeem-coupon.php @@ -0,0 +1,44 @@ + $credentials + ]); + // Set the coupon to redeem + $coupon = new Single_use_coupons\Coupon(); + $coupon->setCampaignId($campaignId); + $coupon->setId($couponId); + $coupon->setStatus(1); + + + list($id, $status) = $client->redeemCoupon($coupon)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/update-coupon.php b/coupons/update-coupon.php new file mode 100644 index 0000000..1b3ea9b --- /dev/null +++ b/coupons/update-coupon.php @@ -0,0 +1,46 @@ + $credentials + ]); + // Set the coupon to update as well as updated info + $coupon = new Single_use_coupons\Coupon(); + $coupon->setCampaignId($campaignId); + $coupon->setId($couponId); + $person = new Io\Person(); + $person->setDisplayName("Highroller Harry"); //Changes customers name + $coupon->setPerson($person); + + + list($id, $status) = $client->updateCoupon($coupon)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/coupons/void-coupon.php b/coupons/void-coupon.php new file mode 100644 index 0000000..5fe52e4 --- /dev/null +++ b/coupons/void-coupon.php @@ -0,0 +1,43 @@ + $credentials + ]); + // Set the void coupon body + $coupon = new Single_use_coupons\Coupon(); + $coupon->setCampaignId($campaignId); + $coupon->setOfferId($offerId); + $coupon->setId($couponId); + + list($id, $status) = $client->voidCoupon($coupon)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-airport.php b/flights/create-airport.php new file mode 100644 index 0000000..d668c5f --- /dev/null +++ b/flights/create-airport.php @@ -0,0 +1,60 @@ + $credentials + ]); + + // Set the departure airport body + $airport = new Flights\Port(); + $airport->setIataAirportCode("YY4"); + $airport->setIcaoAirportCode("YYYY"); + $airport->setCityName("London"); + $airport->setAirportName("London"); + $airport->setCountryCode("IE"); + $airport->setTimezone("Europe/London"); + + + list($id, $status) = $client->createPort($airport)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; + // Set the arrival airport body if does not currently exist + $airport = new Flights\Port(); + $airport->setIataAirportCode("ADP"); + $airport->setIcaoAirportCode("ADPY"); + $airport->setCityName("London"); + $airport->setAirportName("London"); + $airport->setCountryCode("IE"); + $airport->setTimezone("Europe/London"); + + + list($id, $status) = $client->createPort($airport)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-boarding-pass.php b/flights/create-boarding-pass.php new file mode 100644 index 0000000..436f097 --- /dev/null +++ b/flights/create-boarding-pass.php @@ -0,0 +1,58 @@ + $credentials + ]); + + // Set the boarding pass body + $boardingPass = new Flights\BoardingPassRecord(); + $boardingPass->setCarrierCode($carrierCode); + $boardingPass->setBoardingPoint("YYY"); + $boardingPass->setDeplaningPoint("LHR"); + $boardingPass->setOperatingCarrierPNR(""); + $boardingPass->setFlightNumber("12345"); + $boardingPass->setSequenceNumber(2); + $passenger = new Flights\Passenger(); + $passengerDetails = new Io\Person(); + $passengerDetails->setSurname("Smith"); + $passengerDetails->setForename("Bailey"); + $passengerDetails->setDisplayName("Bailey"); + $passengerDetails->setEmailAddress($emailAddress); + $passenger->setPassengerDetails($passengerDetails); + $boardingPass->setPassenger($passenger); + $departureDate = new Io\Date(); + $departureDate->setDay(28); + $departureDate->setMonth(7); + $departureDate->setYear(2022); + $boardingPass->setDepartureDate($departureDate); + + list($id, $status) = $client->createBoardingPass($boardingPass)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo "https://pub1.pskt.io/" . $id->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-carrier.php b/flights/create-carrier.php new file mode 100644 index 0000000..a851c5a --- /dev/null +++ b/flights/create-carrier.php @@ -0,0 +1,41 @@ + $credentials + ]); + + // Set the carrier body + $carrier = new Flights\Carrier(); + $carrier->setIataCarrierCode("YY"); + $carrier->setAirlineName("PassKit Air"); + $carrier->setPassTypeIdentifier($appleCertificate); + + list($id, $status) = $client->createCarrier($carrier)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-flight-designator.php b/flights/create-flight-designator.php new file mode 100644 index 0000000..dea1dcd --- /dev/null +++ b/flights/create-flight-designator.php @@ -0,0 +1,67 @@ + $credentials + ]); + + // Set the flight body + $flightDesignator = new Flights\FlightDesignator(); + $flightDesignator->setCarrierCode($carrierCode); + $flightDesignator->setFlightNumber("12345"); + $flightDesignator->setRevision(0); + $flightDesignator->setSchedule("ADP"); + $flightDesignator->setPassTemplateId($templateId); + $flightDesignator->setOrigin("YYY"); + $flightDesignator->setOrigin("ADP"); + $flightTimes = new Flights\FlightTimes(); + $boardingTime = new Io\Time(); + $boardingTime->setHour(13); + $scheduledDeparture = new Io\Time(); + $scheduledDeparture->setHour(13); + $scheduledArrival = new Io\Time(); + $scheduledArrival->setHour(14); + $gateTime = new Io\Time(); + $gateTime->setHour(13); + $gateTime->setMinute(30); + $flightTimes->setBoardingTime($time); + $flightTimes->setScheduledDepartureTime($scheduledDeparture); + $flightTimes->setScheduledArrivalTime($scheduledArrival); + $flightTimes->setGateClosingTime($gateTime); + $schedule = new Flights\FlightSchedule(); + $schedule->setMonday($flightTimes); + $schedule->setTuesday($flightTimes); + $schedule->setWednesday($flightTimes); + $schedule->setThursday($flightTimes); + $schedule->setFriday($flightTimes); + $schedule->setSaturday($flightTimes); + $schedule->setSunday($flightTimes); + $flightDesignator->setSchedule($schedule); + + list($id, $status) = $client->createFlightDesignator($flightDesignator)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-flight.php b/flights/create-flight.php new file mode 100644 index 0000000..4cf9f1c --- /dev/null +++ b/flights/create-flight.php @@ -0,0 +1,51 @@ + $credentials + ]); + + // Set the flight body + $flight = new Flights\Flight(); + $flight->setCarrierCode($carrierCode); + $flight->setFlightNumber("12345"); + $flight->setBoardingPoint("YY4"); + $flight->setDeplaningPoint("ADP"); + $departureDate = new DateTime(); + $departureDate->setDate(2022, 6, 28); + $flight->setDepartureDate($departureDate->getTimestamp()); + $departureTime = new Io\Time(); + $departureTime->setHour(13); + $departureTime->setMinute(00); + $departureTime->setSecond(00); + $flight->setScheduledDepartureTime($departureTime); + $flight->setPassTemplateId($templateId); + + list($id, $status) = $client->createFlight($flight)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/create-template.php b/flights/create-template.php new file mode 100644 index 0000000..6c08814 --- /dev/null +++ b/flights/create-template.php @@ -0,0 +1,52 @@ + $credentials + ]); + + // Create the template for the card + // In order to create a tier, we need a pass template id which holds pass design data. Let's use the default pass template for now. + $defaultTemplateRequest = new Io\DefaultTemplateRequest(); + $defaultTemplateRequest->setProtocol(3); + $defaultTemplateRequest->setRevision(1); + $defaultPassTemplate = new Io\PassTemplate(); + + $defaultPassTemplate->$templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + // If you use the default template, you need to set name, description and timezone because these fields are mandatory. + $defaultPassTemplate->setName("Quickstart"); + $defaultPassTemplate->setDescription("quick start sample template"); + $defaultPassTemplate->setTimezone("America/New_York"); + + + list($id, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + //You can use the templateId displayed below for other flight methods + echo "TemplateId" . $defaultPassTemplate->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/delete-airport.php b/flights/delete-airport.php new file mode 100644 index 0000000..9ce7214 --- /dev/null +++ b/flights/delete-airport.php @@ -0,0 +1,37 @@ + $credentials + ]); + + // Set the airport code body + $airport = new Flights\AirportCode(); + $airport->setAirportCode("YYY"); + + list($id, $status) = $client->deletePort($airport)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/delete-carrier.php b/flights/delete-carrier.php new file mode 100644 index 0000000..bbf6715 --- /dev/null +++ b/flights/delete-carrier.php @@ -0,0 +1,39 @@ + $credentials + ]); + + // Set the carrier code body + $carrier = new Flights\CarrierCode(); + $carrier->setCarrierCode($carrier); + + list($id, $status) = $client->deleteCarrier($carrier)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/delete-flight-designator.php b/flights/delete-flight-designator.php new file mode 100644 index 0000000..601a9ce --- /dev/null +++ b/flights/delete-flight-designator.php @@ -0,0 +1,41 @@ + $credentials + ]); + + // Set the flight designator request body + $flightDesignator = new Flights\FlightDesignatorRequest(); + $flightDesignator->setCarrierCode($carrierCode); + $flightDesignator->setFlightNumber("12345"); + $flightDesignator->setRevision(0); + + list($id, $status) = $client->deleteFlightDesignator($flightDesignator)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/flights/delete-flight.php b/flights/delete-flight.php new file mode 100644 index 0000000..d2ad9e0 --- /dev/null +++ b/flights/delete-flight.php @@ -0,0 +1,49 @@ + $credentials + ]); + + // Set the flight request body + $flight = new Flights\FlightRequest(); + $flight->setCarrierCode($carrierCode); + $flight->setFlightNumber("12345"); + $flight->setBoardingPoint("YY4"); + $flight->setDeplaningPoint("ADP"); + $departureDate = new DateTime(); + $departureDate->setDate(2022, 6, 28); + $flight->setDepartureDate($departureDate->getTimestamp()); + $departureTime = new Io\Time(); + $departureTime->setHour(13); + $departureTime->setMinute(00); + $departureTime->setSecond(00); + + list($id, $status) = $client->deleteFlight($flight)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/images/certificate.png b/images/certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ecb68e353283e2a66983d871dc54d7a474ca35 GIT binary patch literal 60520 zcmb4r2VB$5vM3-Zh@xUa>3oPNz4s<4z4rhC6e*#%(1V~L7J6?|q_=>OP(oFd9(o8J zkxmFGkRXY`i{Clt-t+Fe9(nkSS$21J=RY$$b^pB5*HycCp7A^x8QDb*^#_JzWHe4> zWaPEfXGuLi&)cWS$S#0DDk}OKDk|*y-X0DhS9>xt^;aoo=gf_IZ{%1e#>Wp+T#2U- zy80j}fnJ#wSZ>RCJ3NBkPFeqb!JG5Y>sLO%hCaKCxS{0wvX$?3tKbdeWUv9lLxaGp z^uu7A!}(rG|Kn`wyUg$^`rO23fhF3uE z&ZEztACljFezdT1q!V_R;1YWt`ZV^$Y-Ex4i5yw{_sfpo>|5ksW|4QG_im4dki9(L z`guI$6~$1bx!L(M5slj6b;*qu;iAbudct%b%Q1cBB`Y;(vI5;8V?4;u0d({~lVi-~ z@Vl}1@G+T~n$p(LRqw;gypP!u(j)=lyzKRnc>0%*HyQF#UCr^lc^4jh9#y>qGDPmuT-5Na>Zfm+WamGyU8V_hb+R7rC?&h5 zbd<(XwYy0za!!@@tiy7cobphKD2u7e2{CKx|(xknmUd~ zk{TN!oAlt}DBHW}v)Fh=W0N=0J1*gtD!Tr1)CbSE;%_;AdC_sj|9Pl+0NMT)9o*Gq z_I0_?(=W%CXBXx!rm#$9L?=cioawDs92~Dfd$K(?7$*=3ckPfj%O!)Imeo$ScFKpM zAj@&7lYhA?`rVKXf7=~vdok=4OE=?ttw{qaRtuosIa73A!;kO)Z}zx#w&SxqmG2To z)-2X^*M|DuhkSsAeD1Q-OVv($T^n(zeIrDcI-OZ~2t+yddFnG2+2>}}!yiH2Hv^*B zqiGj>_arI4_~*5^pL~-9KDkOp)LO*1<8&NFX%+71l6gWCxzldk1vh?G4%4I2X&k!{ zMpHvpFT}?1g*@awJ2m+g_8YgK84F!e6^y`GoiBctVas~=Y>}%zD9g^X3`RPG(`j=$OxsLFRYv ze0H$oGM6@uL_N~^reM=K{a#>;Q}@$`)K&ioUMXh1kAXj~g-Enf+C-Tx;eOov$#_h? z)74JzM9KN=%!jBBj%cnYSBmLh)2u{bBc4Z$c?yCr&tHA@;OxkYb((|6Ji=L0&l@8e z!yBU}wOu(CIPmf6x6dS=>5aRl^)+!<<8vXr5LmcWSW!r4Se=Q;EX#ajQEHKyX*o)ma zb;W0$0;X$R8n-s6qj}HovrQ^&0k&3c`K0(7 zZ#RlR;J$tD39zSAe{Z;QczSqS=%D7-BjjSlx1Mj;7aOFym|06+jIk`<66XDCd|O-NMu-$mQ?7;=OE!&x}lqVR0l4uBGwYMH@S$LiO#`MOKxT1aN7{wBm4};v{y{(ez z$1#sV->V|qXeIeSGQ7G07w`kN_HnyHb~4?^!c2A4J~$nq0;)bPBDwF;LeFDPmKy=`<{0)d@Gg;j7v zscd9@-ufJUjY(&6lT31-ZxcT@CAuAB8T`F>TAD098+PVri4jDuOEA`CMX?}rT=U#c z@U;ANoWl7~-wm&iOTl^pde-tO@<+4pzudwC4t>Vf#09OanKv$ATXwx?`(w=#%^<+f zPn}NQAH%VjGf&SR2bKl9`gb#JWF0qX&EIO7`JOgo!!Pe8e`#T@b%&@w>N0G3G=f>0 z(z}D*J{PunuTQj8`Q^8Pnkk!b_w~KCXKW7w6^;bD z*@E+4c3k{9c|uD=7GJY@0mMs+JyPw>H5_zw$aqL?YBDNvda^U57CGr3895^v)!%J0 zGEH)(|7shO-~Hzt3No@N5E(#q*?HUByZbnK_*z~zL6SOXJk>uAf^dAJEYdgAfeULe5D^Vd3Lase`=rklO*BlZ9{S9c$o0QtZEo*_eO|LPX} zi~a8@zAo~And|7Yt9W?Zvr7mF2?+hAaGsr=UC#T7gN)$=)qjGMev|*p$=BCYMo`e- z-(SFARKUaAQBYV~T3S#@L{LP8pEQHtC(zyZQ2@WY59dD?`PVuR?0xLKL7u)K4|n!o z>ppty0rr*u>#tuM{nyVw@U#yA{r67pKL30y(gOE?{PhenhW0)luHauZG;s&{Du~Dl{%_s?6AJL( zU<$%wq`m$I`uE=d31R-fLi~I0|Af%<29fCS=oe}V!vEai-~0YKUrz8B@Bd8}{vl|8 z_mU({;k=ySe@U&v`RS=h(s5KG(|B;-IDmX>juz%-@`&vxSdd|Ph4buXb*AA@!(qZS z?{vgFY2BvJri5&i7T;%rv#7kh1EG8gnpPFm7?Zn3Fg{aHQ)o~+`W<3&+s#@zT7uKM zS4$(I@bTD7iuXJ_-K_^RC*W;4$G6~#>0m4buW%q2>J!}=gcL_xwZjj-&bFR7LVZ=m2VosTIx4dSzWLrRUArTWaJc-)R)=+Q^QvD{MIzwr4s?4x5H)>m%KTz z&0jtT8q@*)5%lln>t86@%saI{Du>n$y`LD{&I>bLpaFxOMiGJa;v44mSO4Sg|H81w zhZ0e%fuS+G-ZZ++=N5C(Ddk0fxI@NZK@1?)h3#~xP{a1L>LMy%KL)vEO30kCD9RuG z1{=d|FDT5n%(ygoWSoK=VPxS*K_MNX@*USqKp|j;*X_d8Qxm0%tx0r~7bb4JZHe%N z>CaUC^;|P*wuY)8b=&f?5m%3C$e8Zb)7iFu@+!losc??Hx-H3m1r@?Oy3;KtYnJy` zi;*GQnKuPeGF1XgfDrLBMvMX}QMx5l9+`-wSjD0GJ1qTvrz2HtrIO7zkb3nrpn$_I z1@dCt4WIAPzH$YYnZk`s>*_)=8J2jQ;I?Ma#kfC7&_8(SDj)6zcn451Hb{qg#LAWp zUPhKtSS;z*GrOw41#G55v}yjcApT1fE{C^Oj>g-XO!-^Qae$}I{vwLaFf$MHoO6*h zPvv&gYvllI2G@;yY`f%~j-S|j!xxmmZy(8)h(SZkNSHNZu?mGq!>5mxDtz4-46HIvEWx+9AT#rnMvWMi~8(K+3^ z66UsO?QTpz2RO1g6Ff81Uymn@mU+!|yYUj!HlW*$@s%ury^-yrpcR+*v$>0^3W+xJ4Ggcj&9(K>7 zUL0*7I*prh45X}T6Ea2KmKAC|JvzoR*A1*xA(nm}ISOxUh4M9&jMa;lh58U{4pE)yRTn%Y zTs`1_(BS_hSbA=Up?>+){3s_)mJ4E4OQ6ifQj`w`HLK@ec|l+UO}aO1rQtwzO|uQ| zvjkwABL36nZ6oJ6&E`%lcxoOhiuH!%<=CaT734(6*3~|VJ>BVgdvBQaVnx+3oly!F zi&II>0%z_)-0)R4p`RX=#e-y>P}ct6zI<@NiQ{I7muy&XbU8OPl#AXt-9t^@pupN1 z`-oL~KU-3^v_DCd%yf_@Zq2tgD`>Cwx2-e+Nz7UGMN(T7i6S+T;H6GL#Tirkc08;a z%Yn%P6IRt)&0EXhjX?!mr#v%G zdS?v521=}b6lf|&RuRcKdj!l6SHFr#IV?J>Da(sNUOAohouf=uZRi73u{4!uV|@_LH*d^!P1W=P&we!o!iTk)ZtHZ=~$)A<-dQrin5E7 zw`LQGld<01kb-%S)f{A|JL*4_m2RovE)+taix z4bjc)6P-}kr7@%WZ}7i&lRAp8_NZI*Dv0kHxvY(0Q`k*KEm4)0XlJVW)H48xm2hv`*yJm{W^_<7qH5d*MUp^EOn*FeSJf{^ZOU=9| zxrvcH(q$sZS5MmbxUI!4%7>~enfz;;vt%WCS!I}8`Vgb~WmzD@$66ZiRZ!t)&Sf@d za-YgthjpaVoA)VIEx*eIlx3^;>ZA5zTur2V4cnWt4^23oQdIlIu20aR;p4AHzl5LB z8nV^~o*Hul_Q2A_$i5J7BQDMqkY=x;eOo2(SS5xBM{R+;cq_ERrKA?>67+3&)aQB@ zHvP01n_f{rTh7ara-4=k`t%}pOFL`Zto@}1OeU%r?^jqiUBj0LWLOv1hT_^CO{QqW;On-yhZgOCd?bDeYZ}(mE_F(l+kZ z77w;qt7R;35U(>UvZirHkyi!fbK05ktgwR$nHwwh?4~AAue{k$>!Q2*h5ON!XQXKQ zl|L!WoGM%K=~J?Z>6q9hj0_kmVZKRORxq+)^;0n{7BS0VQ}f&AbzXa?H4Wz}xXzh~ z7!(Zw6qu_m28~jzOfrhym92pGhgYJ2O#O(}!6HsA@~W=7Yg+cF##lI9=B4=NUcQQ! z-ZehyGH*uY1rq>T5(vT!k5XI6FIJ@-sVzd8Ym&Wdo}W|mDWFR^+wXVk)w#lpMr!B> zEf{Gko)mi1f&I#Z!zxpZwx-&eZ$WwXkf30N{-{k`Q-n~^r^Q7z4k&Xk^C=lwpQ_|- z0KUOfR_dTyo)A}#j!QKXS;($m!^9MvZ0Ytm4ccA6aH3tt)<@R?E8k!6p0k2y zQJr>m8q(^ip{n<*WSrp1Nfw(S^;ImN%6VN-3RB{wNIm}+LQ_Rcv0$WjvzsZ_nZ?=+ zt!MN9fqLhyQW;;c6cao-MN`VBPy>fB~?GyG}O zC$7NoC;22j#3&D{5q3hwYnv_l;R;# zrNnzl+(O&5{8(D9cET{#d4tk)HElC_%mUC3E2eXTo2B+eWtAH}!d{rrRB}ze!Nk@5 z|3T!U3*&}#&Rk63AFi7CnrDTht zxg8IuA7{ip<*I=1-~L#cncU}`?dPFXVNfDIBlmb}+}zAGgZ@-byOM1`b@E6>CX4k` z0cR5>7xmf-;F>JY}uu+cDjI^T}U632X+^5Zc>uw z3m$t{DHohOZgeti!tlAv0Z&;C+_Li2?ixe7SRU%zUd0)Ut46@8M-9`+>gYn${NvMQ z7fHUojqT&J&W~S|H-G$e1x9eX<5%jThB+l+YF<&TX2fJl=fPh=d}IDEbNc&$I!oEM zE6nu3(<!~{HHM2zpb*;%5S1EkiTtUrDyIK4(dGqGlIuRP2&^<0e zI%pDE9Z+Digk@U2`BPI7{fasR)Lm(KZB?M*;mOeL1Co+;I0LfyBk|RgmDV@aOJ(nn zQ&<9QGl{E(`Xi=(<{=A7WsIyZvMvvAZo3b$Th66a{n0x+Lsd+}aKY73{FmsgUv`@J zh=j|8saC9}BxK&pL(Ory{D~JGt`x{TrMk#A98%`*6qBt?xF37Ptji3h#Ki=w5WYyx zuP3`D3j0%n(&5_O{IJz+6}0$)@ZWA(5|t)dMPM#Jrq&;@U?tgvVllL1nJQCNa&hC` zV=Q)wvN~I$@rR(uh&q{FX{xAcHhTz<_nzwhI|_7QP`_L;Ym=2(u?L{N;GGZi?jOe+q8{Jq!-|N07uPV*i=wWb5zXg&0uQP zCQ^dkrsl1!=W2^Ul$5aI5yL;_K2~}3DacexROqay84b-?NL+CRhtrpC%EaN1YAD|m z@ENdH%*_d%8|m_SaQv&6NpZzz|A6V1Q@De9-hkt@BwOWbJx4&%aXey^lzq0XpxuwG znqEU)uvt-6(fAL?Djav-m#Vf_K=Irq)=Fsm_J_?*wou>JsP~G$XaS?7 z_dEK?KsT<~G-U1h;XMjt{q!+B_+VQm40YiVT*acQm`|63Jx`n}wfqlGu27Z|jeSb1 z7CUc0S9;2Zi6U`j^O7R&L7BtftfsxDu8uhlzGR%%ez-x(x=_OVLEh0yXllP6jU$9G*j;Yv0dei(ocvouPH@H(J+?cWB-4oAO?r|u zNE!Pe63sV|TlfEPltigv?URBw$81ubd4zSf$T|mhI4z0Zt9Rmwp4;6k^RupvkP~-z zQAL35&@zwnp9&n|ht$b}$NgfQ@a46*RZmA!3+GHna zv#i9lBsY}6hn$T1t<|gHr|e@mra43HvGhdP=KHnpCzwXbw zO4`yiJfhsa8C$>UlS{P1J!5Fe3;N7!Z6J>;(_@*Pv-D_%BMw)yDzs;~u-Q+K4^j4M z!1{9JrOdf zC)G#$+Zt2bBGaal0fkbASusOT@cw2+we`F(M@2-*F6-NCqkZ6}udjK_tqR%_Wk7=gRzMB$N?i{bfaBI~O4KyuT8sDS3S32unF;!w=gQmoD!zEC0uc9kjJE7ym2{EtFK&q?1xRz zMiJQ49oaSUx;6MfAgXnDe#i-kO~l=5;w=E(`>nPM$KDmX-2-PCnvo`HE89AnMmE9K z*VIn@UEs$Rw_b6R$3qj{C@g>?vi?8{MH*VJQcrQ9MGWRU^eSNb?qC2CR7icpWLJXd91J^S7icnZEQO+r7E1N^O zIM;8R*BU8{LFgs~X|zQd$8OiPY|{tzauWPL+FcTzHc_p0PRl+C`l!1!pVedyEU<+W z^;5IRt9~WSzP{r2tD2v{AfUi!UP~XnW*9&9{z-SIUYl&?3U2)@D}TE~7^ALXnXP(Y zNkMb7byd9jmK>vz%faC1z_V>KmuhrO?{uIT9tYzpZ03SfX*xbP0!K}sJ-P+qRosE> z1f!!JQoC>ZQN6DnEDdrq=>ILN{;6qfU8t#@Si&*M2GIx#W+ZerWDkjaxF@U6UY)=T zZG3lNkj|mu>9{lBihHS?2J{24{ODa*rXgheO@msUxeCQMz>_l_bW`8(4ehNm2eUqD zLlW}x$n-)InQz`(!*}4h7fYN)$#-bnjm;2F=GUDFb!3$NQ;+ zR;EiXo&Oy+|E1w;z*NzB@DFH#{5NtGZtCCDJ2^CG>U6C+C1*WV)_S>aCwDKc2nR2H z1WXC2y5XQ>pXzCV*JuvZforM0M671IOjn!}l(bP{ z@{-T$=6x$ik1k^l=GD$}cmva%^gu&_;u_l^CKl(c6$>%98%G3wg_4}0@^5o|4E+lK zS-vLUQIJkm$fA48_bzcYzPO5J!e)h;o0k6FaA@>1F&&LBcNCF{`l^65HEsvrV%S?x z<>uvp!wn{I8BnpGhSiFshg>AE3+?UJX-h4{xgBU6fOT%7GMl}dr1gy1d`3(4kw>e- zxyOYb(oxVh`)dVqegbjVW?yz_K()*i=>sw(vQhiJZNl#7$om5?u~gkd*S3W2S~#a! zwFj)2( z%I>s?XCY#zP}XLx;xXc;7g|-v+J=~-N*()Kmr0|QY`xR-IV&xW-rEbr)&*JN`}uQvd+pkvp~tVRy!GvG)pVu25Rw>k<`Z2;A{(N;&Ms))a`z-`($!Z9r*1{t{hvdD4&AGhtz)`B)N?#2&I7qP zO;)rHp(8Iu2z`x0+GfEJ41MC}`L%tNUI6=tbjl@FqP1HWhV7PrHnXav8@yb-GLB)o&c7xOEwuUGhhq-nAG5YrA>Hyp1MAoV z$DiQ!Wcvcban=R-J54QT=~uI^DQs@KZHG7IjJ3Q#OlSDb1-TUm9(8fANmc1hc@(%6 z!;N!)=Kz(KquaM{6)1)&79IEgvzT{>=H`8u#9`)!11gWcf))A>5V|)FM{~vAHwBm6 zyp3=fwwpx6CVc7o<=Dj4j=>?b2&ln_E|lO5y=jl#7_@0MvnlRwQvFyp;Q8e#!Th=i z9s2A{#|_$O992cJyq~oTsDdScQPNrO*&Pha2Ojb?xp!WpcY)YF&_P}6+-_or9MoW* z;odEsit56_VRkbcCYm#=IM2hCv;&h23?Xpx0_14*sF^i)UwjezaQ0yJb-D0wLWG)5 zs=*MvFiJA#DB0o>8d??Zg)eQd4nmEk$r9h7PZl;s{T1K0%u4P}KuU~J`E6BNn4KTv z1*o}#dWE)=gzwkYEU!ArE)CdqO*9j?yDNrR-FNb%=whp6v0YbnC*>KXRw6bd1?8YJ z#Oxv$^XbMVqd1d>If6cf71Aw#^7HEE5$UE^aW2c-Au#$WsA==^b7NL?8VB0`FpNbM zi8;A+{K3p@C~$BDT(v-)Q>(x{^(v~~lUjI+tJVc>f6&=E(Zr3!$+xu3<^XnZpa!#4 zo8#IN)3q3A;5{?zK#vTd_}dc9FlKhE!>vJHtS?G#+{!+biH7964u2kCH~@y{IefcA zUL|(}^Whwu6{;f3qb+cbyb5ZU_WZWgn1aKUX)%pMVfC0oIdrE{B{rkxBgqvLLU*&= z`6hZh8$1mvF(H{tJ?W!C(6ehhfkVNogvQRcun9TUAs+4owJ{wd!>5M&&M(bouU^ht zYtr^%ooU*RcM)5bm)wTr*rMXU8PM>r9?h8Twhdxzr->Ri!AldD-e;gOk_S6pToO%m z_h?%EQb>G6#M=Gd*49zd!$4;f=?w`3bG-Mn6=Eox@1%@wLk<)GbKd>W3v$l|`Agef zbI%%g0PVmFJWZ7~CFk~2$_0f`!FjP4g#)m6*;6m;oAr9_?e&cW{``7ZA1BLZ!z3kp zSSVk?+&m4agI@p2^f+E(G)*$L7;SS8gSkTg0HJk z2_~^<)DPkL@fB~k8yK`tdT*y%uNhhUvo$|27kp-~Ihv}Lfc%T4MNCzNHJv!ZD;+e1{vyv188!8psobNn1bX*!RZMHA^L%&} zeF1fSQd5dEywIzFKL#_@w3cHTM>j@i|LG3rxG&YaT7^4Y`@+y8jv4xi_46@YVhJu@ z-#;@{i@XXZ47c5pHl6ORhe=nDq8hS^a@9v-5ac0_%59hNHDE7DH|Qc)VG2fCOXFoR zv*4XTmetmTgb7Uz8~o0K%?%8eW|U-l?>gg~TOpY%H^sG5Nm-uOscMHK++bX@DsZPs z1ATXA?^4K@GcJhhb#0?yMU6SD+=x_!wMyVZL-qZc^_IOsOP`+EhF#IZ=(>yp63>y) zVDoMMTl|%Q)p`s4;Ps%YWrghEk;;Q<4vAlRn*ZIt$f~i27p|_~m)=W@{V0Sqc)ObK zwR42=5-o7XoX9Mz^Ng0HR1)CUn~cB;3VcX~6L56jIIT7y;&~(d=q)Mm^+%nWT$0BT&SD>+||0FmOiPh zHU)+(fOR{tU?HZtA=$1-_t_g{;)&xjM5H=6w9f6frO=MSt369Urwdf=n>?=NE96Hz zphA95-z#7@lK(imr^=}(t~xy({DB7by#Rl;oY8FeW+w(pZ0|SGWybn+-Rd^x&h<8C z$-Boy(#azQJB7N?&}FqYp)qv}=^;NUmlG%7%Iu-%QEd6?J{nFXfvg@OW1?zt79k;9 z1?<(c=%dn>(F1L^z{V5d7`Nx+dN!kR3~lR;n?E`^fkh|81I3ovw6>**xZBKc)$T!X z)13Axgrs5!R{Vg;zYQ5=ADV#X?tZD!e7h$7KuPw&q<<&|j71D$73>e&h;+VH_3l}u zAj7RAa*Oa)A=LO06fF-N8O1*R^L#aFWizrhOAIZ7mjR~?(G7UoL zp|{NFP1WN$yItdyMXRrTq8D&U^CExkFh{9F??;M4u!(-n&xEi+DycK!#ap7)-_Y?( zk{I7W`(T^Kq9zZTdN9?|=yoC6wyvs$wfQ3eDI*JR+hN2-)@AB?>HK)_67jxeE%Trx z+S-rgH=!0sR$Y91jtVIg5X$PH3f`MjTWghj5Q#TINA){X8~)o&NrQq1E&K4<14Bh3 zIEGcCBJ${0ZsC7BS>bQ_=# z(mVT{i*=M<^aDIA@M>cDi2tV}j!M6i{!oUD7pQv0yY@q2Pnq^D9V#%Gy;`O;0;@4R!W{9#}u$(fau?*bLH}#@p8oL)!#K zVJ*<;9ZKyxRChIlX|97&I_dTaE9z7*#DHibYS`1H60x}o&c5>O#f`WiOxh+wH86J# zEMK@!^>Vs;qvhdRXeqg-WlH0A`|}b zezHp{d-oWAEKZ~bpjmEBa~jG?hBJA`DLu8V={x&;aAE%`Ho`-9( zOoYM+kVe+uqN!~1%W$u(ifo#wPFUy#t~tRf96&jGK9GeF)m_rmY!PKM09w3tCC%)T zgqNR-aXA!1dKs`FH6>9^-o2rA9WxdJN$a+_(HWr2^n;g}NuU0Z6wus&-@|A4?N^Gu z)i*+?9R;?03F;HOUp5*Ctr;g}e9rmXP1_YOLLv0N=6W0Fo$M*|K+pK3Ll@MQXd)^b zT#G$b)651vtUOCFKZ&a3nNeow?|!70B!C4i3z>_RBJHgG(ab3aTW$?=rstXvtQQeE zcy6q$U>3-_9dhs@J6QF~z)|q}ON*qzq2FKf@6ZoVYYnmYjE?R~zKr@y?MffDG135r z-^PZvd>uYs@Lx!(AP`6IO>0S2%6SWSH@l5DaB!*aFv@ERae`L3A^NL=HS3t9Zzg-+ zU$7}M54*G}ketnwgYKV0`fn&rX|*Mf7d9dM7cZ+TO^-{mZ63aLbNW@5h(tm!KOKsVPp47ie-Sq2)aai+Cmu+$Wkxjozxa)7D z*5VrhN0=Ogw_dBuN+al;_q(M{1MRq~5^cE&$DPoS&gbmNk&11$7zz^#1sWc%8t&J@EG3zTgtK zdg#e+nmk;FxTUIuNs2>`56byx`nHX=3^G6WWEa9oSKM;Na<=Gk*IX=8{`T51b8cYU8;UJtDmdH_@bUXo!9GPz|9iw{Xj5ZLdusFy>QD z@~WNu-n548d%5G?pCe8lZ|IyZBJ>8F%mzn%_h>6y3M8M}G+13?z@@i^WK_HAg+o0p zl!etEU#r62+p2W9-h&Y$FVs#64ZmscTREmHTh(sZof^^hE7Q37nisl0>3sdS8AVcQ zTW-E8IzB~S)LFkyjBPQ^AcEcr@Sy3W?Tn8He*V_9+;JoFR?OWGZz*##6|tTZ&GX+s zJLkmZXA>U+9G{aO0Xecn@9v^FzdLb>kL} zlbtVOYDceM$dm{W!XEmuh`R9+8prTHS8#i!bx>OyykcSo zb|k5v$2-taIx^uc*t|cgbuJe;Uvb#WY1mKn%QPrD%jT41I#6(D?<6c@N(4zf$O+!Q zH9j+rq<#}<_3pPlbYz(f{wZ?x{cwb`1H+apA&D(neJ=W-Msns2Ll)zYOLVO*cY@Y( z_2eH<4&zIzBsW6XGQI{0?h?e*;+hX=&y}0C?t&_Gamz_@7S_5q1qz(RRo?V7t%)UJ z0_MOc{;n=#lQC{RT{^t%dGI`~B*7^LlfIXlzY1K&QR+SKc*ljI34Zb1V688YXG860 z_&DHg?47VROG5m{uYhrmly*g$pm?pnzb1IORhY6aMpDA)^PJOuWdj7rtE}RnY98Bj z&HgBkp+dHW=M-wnb0Rspod*bG31sAb3$`vJFzgr+8lY!y5=K-NuDY z;{rnpZlpnY?a#iQz@UPz=_!XJxMhju-bV%&$vL{K&W>U=fIi1?J-^l>@-ep+sC=DQ1jSUSP3BG*|u@ck*$>#WjJv zit_pz2<;aRo&Fho`=q4P=dJ5aml&`T*`{+sA`DT2o(_h`;8Yn^~JWyi&k zZDq3k!UsDGir7aEhsu(Ds&i4WEHsXfqaC-8ZX2Ur zhKpb!4x-+dYzDBpjIG*!}pySD}$N=;;fV|$&dzKc+{21NiD4cr$wo0z@ z``sm!a3oiJO)t#ex`4XqZM2YSpIZYo6!sXPh}_@ui3LIxbb@n_wyyRQ?eBbedueXB zqZ|yO^#~dht)N60;-CIZ_&~(L(G3c5E+Hp6HrDXNWuw^gK58eN-KC+>zWNIXe4B&; zdWivrH`L#%5H&aaTEfC6D6ANK%L~U-rYfm*q2Jy+_ykwK<^j=)TY@zwg06q)(xq)1z(UY%Q{$w z9pvGKZ@_2$kC_e$Z?8EFK)Ab_Vu2?%>iY1&i#P0xe*5C8Es>_hb-(eW;qJ|*=5D!X z-v_#u7}tbf>k|#U+1MhpCXDFIozJ$>r!rcI5R5m|ItC*JW#1!k^-<*-aq8OoC6tBU zl{2bD*C&A|#CAjbYqh&KkrAImzn$Be>Jf15d4IzTLVuZ5IEvO!y=-M89egd6*FKZX zhI9v~LyS~i7<0Nd+?iOw) zWa}H4%`};gMX)~({e0bQJpXmHOv(tf7~=ZG>?9NOH5g@LR&~pSJC)=KfN`YkI2-`^ z7D8bSDgcs_WalhKqoRLIuugGXkCDu55D~gVfCepBe}zv`c)7(@)n>b-cGK3grKF() zRqGiEhyj->`AnImm9OJBVp(g&nzS-DcKLgD&;JBSiPs^!3~ z&k}!oBal>&TYTq`w?V+P8OH?s&h)E2f}-1wZ^4b9Y11@npBKWt&v|-GgNhWip^4&R z7I(3f?y6H;e80mMnWU*Px#eF>?PT9h`AJg=vuuPnt`5eEmixD1-W2r?Ze)ep;)Kym zA{e=z^pt}b<%bQkKfml2(2ea(#x}>=WzLLetwJEv1>M*g|AonJi{o#Xa$!FS0UPsI zZ%7zU7q?N%G(4hcmfTX8T~<0wY-923DO;oc0eF575}poHxkS_N8`C%j25I)>wep9@ z`=yrvOIowZdg2q0!I7o49uy3idt3vf?wqVZbOo@Q&&CHS4({Q{6YDXmQ2^ z1!uPRJE7wH329h7BK7L|EygR*ifuVGc#3ZmmnCF5uND}y2G4OBW*EoHbo=!PfPdA` z{7m4#e@jou^vg%bghP|JE0fvX1}k_et-gR)%c-1M&MXzh1BE#;=9t(&eLWY&mjYO`G2a z@-6K4UoxgCOxf*AP&3Qz$5+X`J-~rtSr4X0dc0_wV|bAV-5Em)2s*0R3J<1m95tz` zARoj+#7Ei^lucQ5Dgh~Z_t8$ObrG!e=^ExBtEcqS>eQtb(KFQ*p%X=|lo4GqKa-U@ zi_)y8Z^>EcHC9cP?6>mfr7qnG5Wg3Y3TbA=rM8hOWu;TOUVBZex87D@7`e&l$0C$P zG=~}!l{5)+3@=~1nZGt(=}Btn?Ix1y6# z*PRE%hs68vZHZ_%o69wBW8xpj;;$TfS2@yL!{ekeKG-`k+bKaLwSx>Ug?PN&DI{7G zGENkKniT)*Zvi;^Qo&XsdcE&|dwFUV$VPe+#{zd3<2fMsm)H5@6_1j~&(kX6?6V zq;_=Z?RZqx;%$vCkq?@6EAX5zObnY~VoJfsQoPP>B5K8m?`2?vs{G+Ur<&QSq0OPk z-8(X=U?#yDyl&HX$fT*-)_K@6B~e*OMNfg)Fr!PxZnLd-z7H0cFs$^E@>jvol$6lH z)8p?Ju)+_tN*%1e6aYyt1clzIOt5_@`!iurGw=3Hv!;!CWyN+QSlaI+3yq|>)}U;` z!YAQ1G@Y}3Zu)*?wu3kbpYNiun6Y1Wl>T8n#-zTRzdDBUM<3^!w}StCpyOJTL|hVN zRMn;z+}8xA3fpDu1HZ9+_5?}4ur-`R6%1HJ!sidYr4<)^0NBR>oYk@lA{Q$?es9Q>!jl$L8e)>Y#)B`YD zIMXdIYv=rn6kVdKd-|)o`G44Z&!{G|?tOSfEDdP!8Wa`jO78)sSEWjgDC&$LAiW1fK)O<;C8(oxf*`#_gn$r2NeChRf8yx# zo0(^v@yq++UF-Scasjz>?sN9pXP>>V>)L@`vnuq(08|4xv=_M9 z>WwhGqIuY$vrrjHc|z(~)#}{C_frdLstW#?6`pRbXRf`12We|diZL#O!cl(AO)XMn z%4<-daIi1c3{6`*t5MHvEYlBOtzG+k!+MslgR^ce`slG#LhpOuJsS#h%1N%Krc$M& zk{n_Ivv}`I8q3Pu({tMdg<>lv-d`a&gn~oeu?@fkCx+c=I7n!+{D|xVdtULLfh$2CJPlAgP#C$ zBWqZ~Sj0N_lXaONYpn6lW4y1Mu+%q2+fQO+=359(LBRyMKxR6)(rSr`#2e` zE3VGZT#n{$9fxi^H%`deQf%p!juza|$5OUgRr3z08*5x>p#H7ZfWN`8w<} zkc_avGZv9Yy@a7Wv0^9HfAJ!7i&svgtYH2*6if|EkqufFD0A8{Q_ z-Fse(5wVMUNzk=c-ahd1ZNZ$#z!<$mIpVXoQ9sF+ZJ&ejg`a#Cc`Ab9C`2t`H)NT4g zmxyC9>UoQ|?l$G#4}ZyAfZt~k}u&Ga~Hwfed8-_ zE%j-|gQ4@$c^W$>Zfd|YCo)CdTLVSLd>Nnjc=LIjh%r>A1!~8*H!e+x;xvwnl*mb@ z7?YPmd3K($^XbcW8LzfH?~kqb_3$cB&x50wZo7<8Cny!6Hi9`qPy0zP>moR)m+rY{*XEkY|b`Q&ZT*}f#raz2%B~duj*p+of`wzSq_(nWOPUarbt<*m+9au6J z6pgSQYnOA^plJ?CWQz%w zLb>LKSBFJ6yeix6;x6}zWLfqq7P&up%~xTU?Qal$`gu z+ngjqb3Fj0h$tS~k~(`@q&iWcr=njs-nD!p>*G++o9lfCb$oU>&SAX5rgQp5ht1OR zn%*sv7FaZv#J$aSS ziP!;?H5WY|wc_AAWPI&$tfsiroKKm?erssa$~behE74an`P9V)X=!s9rov}lxJ4xr%bFT}fR_Md>gJ=4V3DW?+{QiQ{Q@u;!+VFa6)<=`5kz?8B z)H5BbT}%XkZFap4Lb{EoY31(29>j)%ec^)-LOEc@w7t72eAKLtFc+nqV$G%0Dt@9B zt5L7M4Bs=A|0qK{jG)?;Yn?9KlD4WS#x7bVF{f=Fs}0A}v~0vy&^T$@_i>xQPwaD* zP5vsYAKyIKd9+jJ%r0YqiZ9xE#DdyZPq$a-+qh+?I2uZsjwg8!I5FEq5zn$%U1&_! zdCTPz?y)xgh6MoAYAV{fC*dcJ*Bq7iW2A$+K#*CV&j5vsoq9sHCU;aIy6!c$=kM%$ zDihW=JyMqub7$h+Rt8K7qL?kGdNMaF|6c{P4!0)%P039a5HsmTRZkM3(SJ z`(Dn^Tlc?cIcj;tr}K3Gdkuc;BYq#Q_Jc%Cv2}yL1S{dF!??c~e3=Hnf**I3=UBC@5ggA@z89xd6c~V2G+bJn7{CDbx-%Pyu8mGwetWs7k>y~Fj-Wy<{$Amin1hyQ-~^v5LA^Xr>9tNa)80zUoNaKtS@ap(Q( zk?$sZ|M+k<+m>xxo$*83OTT?DLG$N#HLC*YlPCA8zh?%2did?;=zT+#*U=$|5bInv z%XjAEv?YgoWR&q$eTp%uq<_JEj&J}ufFeRJd%2otcy7dGEy?cbNh_btcLwnT-Q8Y+ zvD&A!(c;kXmX?1e1AHw~J|E^({&b_#dJp4Y`B`74+IEy(J5Sf1yYT0?`fJVexh!W| zjGTM7*P{uXFqp2IS~VhaECVy))HGDd(_>LmKJYJ-YkTMRPtBYH>AzD(7F#02_xD&t z6`TC?$DU7Z3VDy3f^qx=Q2zNGi%WghW`GCM_-}ed;hVNDtl>!wYfSy8W>G7n0DS<6jszT{Q1hsc~niWKw=S*pniM3jdXGvn`5t9y%&*p`FTvVi@)$ zKlGm7w8tZ!z`jy61<2!L@O1JNAhx9LthyV(-81rv7gPAplV_W|iI4{;iiY3LjaGD} z%*tZOH%I_&T=jn3TN%9K!sYNWFCUD@!~^Xs#ewA$kI(uj&#CyhYa9NX`^YvGfUWT> z`Z@;&v+?vQ!D~hoN;emO2>?wXOcB%%FZyRu%OB=*9z-9(*SZBlW!O(V#U?~PDB{t( zRi#KW-(@tLL3H*TkUy$azm#Q$3D&+`%vqJD(aNw$wFZ94Un%%s*uc#{g(GcE{DB5} z&TY=hokx|;jsUij;^NDxqS+7zProT51Wsxdgj=XE*QflN+`lB`ZRNtb8x?0#uFumJ z`Vh?3pfqf5jB1d=)5IWb!I4f^DfB>mW^MBAf$oNx?v%go-#?>BG<33$3}|i52E~Md zlY;IJX&#WB%52S?czsoKa-F*uLJdRpS7F2Zhq^gJHxyN<+6_g#&^tRBK@|-j0t!7R z+&C23R&oN&jswTQ}SD05vgJMnRK z+C_olLOVA1a-0Ky!n6$FBRpyY%_$ zPE8IG;{AlP6R9U0>aS<-_kF?vYF+)}|NK^4OZK<&GK6i7XLvRr&vnl8A4pzSyA;?~ z07F6=D$qe zK@LhBit|}}$oUNryTr#;TF%*go$d4cU=a}9_ zDP8atqDf}^36YNc%lar;3Bc&0SB%eZxR)ETr6L25?=cRpTlk$UD#l)vB%qNIS`)ZS za@5q~bgd1b5nq6}ObneH_M2jy3kFf{d9{60`Y*7b7S^^Yb59LilaB;9Lsxz+&zTv|@};UaUdoeu^$!5aBLRjWhG>4$x; zpHZDD;Mv`i)~)UFZ%@lrgKR#t(agbmr{RG7VAslW8aQN|qxXJpC|E1SJiZLvio`yk z)K7*t1knSaaxHy>z-Yc$o2}2b!^BdlvS`MP*Jws&pV;4im$+JX1c#PD@!=;WQXOBY zL#N;y$Rm_=Im}gJK?|k37Gv2rCqm-SHBOd`=f6U_W%^=Y6;2Q_`e52{?%ZC zG%ko|-xWX6|GO{$?-_RI0>kmR$(PCYA%8pHe;f@^g18D!cp000p+6LjtJzwz!|TY7 z&q6=&Z1DX zYKwMUNKoyPya8}DCUAl%ymz=cOC`7{UQe-55nOoZ5#3s&zF05%J1?UcRqAIQCvq2t z-qk-C(lyvwwPZ3ncb%VRM#_^4EmS0ZFf8^#s|4gPLYJF2_G_pT9tUBPk*j(Azlvs^ zHB|Edy21RDn&0e#T8#(cN@WnMn|Q6R904+hGD|3He{mEVOJ?#meZF{C4+k+ji*}KTh$pZuwzC$;KdS6XM6D%`~c~E@e`NVp4x~^6OTZH3E>3^db~J znML@mel+Lx=)_tLRXxqT+W~_NRT9be!&eUu@DEI@C!24yK(Oeu#kGxC30V>#qpNNx zHMj9y`#mS1bmb$Hwgh7yxt7$&`nUypJX`jT7z&LC3awNMf<>7JY@vw@-SlJX6b8Np zPH)*%CGxQFs~>ci3y(-*j-zM+{Xit92mq1lcAncY2PSug-xNyCg<6<03RtTM6Wk8x zP^=itoY`~|l`Ol_0=24*GTM^Iouu^(&Wllsl6@LkJWpTqV)>KUhgFXSQ)Sr$K8s2}P&8zlCh1jUT#4Up?Ig|SF5%r@xNc-7uU>su3t^W`iOO4S)*E|$k&(8#8glAF0KXF0eXhTPzP-t`0|UUs7cR#{(_ zGA-@)<+A?OoA2R%iA}PczhSZyA^P()Mg>Du!Bj3!&k6SDV(~N|gcm z%VgUal{GWc1Q{8?+|v6;K^+aNkL=B65W1Snukwk}^UXUpKiLETd8Qv8tb?6v&0w#d z$kD}J%#XW@fSf=<8JUob3c1DzG-~~9e&|Sdng*)+565%!W1d!&HFH&;Rkhd*rHHbg zW;tHTYFI+jTK$Ur>{$aY;j7|6%5sZiLwVRhWtMR$IRGAT8Cth7sPAraDb;0UD`U8X}JCO9o^#i;gbd&YN|N)$Z)T z_EPvbpQsl3kT>!rf#TSgQ}$=7p!7G;66odj9a1sQo#;!Ut?}1qM?_?4k1*?x`hnoa zn4q`EJHFwsg0Ktj;ZXvKQlA003rQuvq?fJovOd8MM@i$CURk4vD%8)pUoH$^5Y$@c@3pmncAo)09VuGvH(eL zIW+SkjBSjk}C1UDOxCUe~ zbr)+A`eFD{2`ij`J^WQcAAR9W>YYloYD2fEFIJVHAw{ub)WT`C$)jkxVHP1Fhyu7O zMbc-lwD-VqPd!y(-A-$;_1C;?uUTG{#aM6}WF@uMAmh+4i3-8$DP?*olENvE4dx>dYKT?6T6EKIpcZ+Rgp>j7@H~n+$f|c_$#kF1r9S4T zJf_}#VgR4$8~f~S?Ninjx2uxyxpOL7sjO~kgW zHv&i-lu{Ut=1#pK%9U^wa+H)4P1a zK0gS1c64h2rSS4jg{SGTIA21Wx_}>PqTb`!mEK1Rsmk-u&7~E4F|=T~mqJG3 zuA>Cgb&6)(X|HU4+6(?-&nD8qjAsWCvK#v-?uN<42Z#~&{^LD)6^m>`gN^%-dUTLF zbeOLtuqPNFI`wc$48&_2Onr_XFq&h1sR` z=%vpKqviDW@(=!XsWX=zOF;~w!t&)2gK-D(VysUvdZc1w5`!2uOz*cre(rdn1c10s zxLt^_x#X}yFS1`Li|x*+Zwk1(gQ$H78`eF$OFwn++Cd7cQMOit8}Q$R6;ccYa%-5m z@YR^2n9zmmerLr{1=9iV=@W@@Jp&ku61-sk&_(|y)RyE$5gk?}YCV#4xe%y*Ssy(i zixRWG`F0=p2<+ete-dA&9I7u-YBTY{1_<8i%m^ugzTpx@!zV1J0f-ejxq6DF0Ol_L zv#=SbuzY6b85FNm#9)+F`W|=wTOY%NEXVeJwf$hO1oSeY7!U17G z7K2f=7!)gHbL*@Z<%k5zl>P{{BA)~uZDdk$IOr(}TIcmNsF?%`{j`a`=~kFV=PVr3 z0Rz-#H|B2tqb-^Fk3t+%rPK+-wyKuV+UIWuN~?thFxZhkHDD#=-CwK_LoLM=5xf%U z=PodH;|%Utw7F03Ixdnp<5WJpYHxbXVE8BtEFjJmGY@T6WzmVr z(14hWl*Xp(1kmH^Qv0lk65z%;#`%XJ74*Q5C#loVjNY1Z9 z=16bAnPz;HmW+Ch=0ceh){{6(45Zr!$YD$50k0Bq(YNb9P_mElr5vrE&*{jy^!bm* zHF+V^g8YU2Z{kq5v`4{}0aHUyc82&ntd=z1luTu_wOeY)Na3HeOUF>j)_rkbQ+BDRq*d8MWaM3Lsi*5;Sk$ZAlg_~7T0 z!M&)Zb~0CJT7=OZfUHCoCTWQK`}?;i@}-@^&py5nSOq~UMe2bc98_<&<=T6PN-N&| z2HZKz%|T(vqGG1Gaycsq!R}!gag>as*$iD>O3)NbP9uX8v;$R;kHP_mnBfyPOJi$Q z)l2bJ7b-{3+Of?yl`bNKpUYDpi#R`w|$J$)CO0Cns}dBs6n4f_dR(R9n{edV_0i zS|KN)lqkjF*aYR%KZh5&XjN>Yycvd4;-Q5|aPZYL)syXowKSif6ucfvh)0yLjwC#e zGAu6^;*V=NIpeeDh{UoZz4^x>@yV@f=kTJM?)lpv?y0ITTi9uq48J_9{xAVpOQ0L` zMTV3t!8tK1B2nI#<6PeK#$S~m3Jdf53%%?U=i?JQR}yj{PU>=+S8s?yqTQOb>#IW( z%lBtIN%Yd%2@8FhGuD@qPQn}=960pZ=xE9M&rhf;LVWi z(ck>%C%C@(IVbOVQ&DG+o?XCGK(U2*YZZZpUTH85{T4cMH_|J;Pf$uK;e4>$}9d{gs-`vbNYn%BXtk3Lq@wplNut4^Mu?O^obpx zU9Je>FfY8FrgarW2mwG#C#)CV?JvYlnc#?N0A3Nr&l#%E{ zI*+qIH-E1`b)p!%R6Q*`G6`y2*OV0a5d%1{Dk>RstrY~Gi3Ki!3{m)H(Y%xk4#-nl z9}CC1FSYX?5Y4)E4RceK_@o@>AIhR(yvir0BN0`cwbDX%uD=8zK5YVQP4A4RIhS%w`xSE!j8%y3u%JT|pizYzie}ME*rX`I=n% z^KWgwY@0TDS6{KS_x+w? z2;Z~&*=(0LX|)!`z-wwGL~8R4bvkygab^cqtM62J%K0*=>(E-2RezS<%RcD{|0Zu#a06w#m00sYW(RnK;_mE+*(hZu@eC!nBdQ){sk2Qjd||!KY~kJFZ~u zH5!D~5@6HYPshh^3<7z59l;APVl@t-RUt4?q+2(fF1I3G$;s$F{5~AS*$Dwk+ zg7Xc@#ghe#QrmHmJkVyosGmf148bOv>Q#SkCbDU6da!C%m>33UL!OuK@cnu*YwqDB zP$(~Q=CG}#q%KZXYQ)CBhbFt8fHmAu1Jgbw4!bOVK?zq2J+JG?!$8))iO7sWFEZA9Cm#IL>Zb;h> ziP{XpwU`Wf-R8M-yMlTW6do)x3xYGA8#QeWEV4V$r_WIOnJ<1RWL8O~p=_2E+*Oim zU~f|)g0D%DK8|}=>b8_a6FhdMMG)_Is_q)p)Vklmt0}3CSCTLO4C-awLot}W{pB}w z1D$?v4xy>XVIWcB5e5Q*B!j>@f|vu5@JWB}rDB;&0CX4;bvadQv#$Q8+Jnmj%8qV|ek=Ka8ta4WSykUvf)M)AE9?3eqZoh2>gzc{F6S%)bW zwoP!ggfdrR(%ET0t6#058fz9|HGT7ewYu`-RX#VJQAlpp4&!Cw_`Fk@uH3Nwh|eR^ znB&@M+&H*pXD*Fbv+Ma^?{eBU0vO_~S6bC#JBswtAVrkda9VV>rNL(dDT4yYc;x!_ z#)$!xV8wey*9)j4FNv8;R^5HGA)&!dYXnMqA*^GQM77_n`F_LA7uAYYwFPfAu$VOc zvqg=^y3nlPG3+fOQ6oenX`m@CgrLC)W(}|%u*G+ zQSx(Rj`Hp$lb@BVc)>C>rcZ3u(JSGbe@to=7b2<`n6$E zsy7JVVx`~lYdU9@LFO^_BLl?)2EyVJ{dv^H{tkLXqui)_d`GOUIz{lafk>#JK9|$CEWs;I>1)mG zbh`J-)F5)LdS*||tqa4+?Brx#FI<(^Z`U4!06Ew-d!yTnlUzKn(H9F8Sjke_^Uovv znuaF^h@O3!KH99i;xeO*6xXJMzDoh`J%Y!rGGUfS^zu~wwf~d9zTIrgfxjcc7g%B{ z_awSGmN-_pH>7#P7M;(HVbNajONi&qvHTzKPBMLXb??1xeA9=$f}84w-o8yZ2XKLr zPQH8A9zQgGaKwM8WKCSNGioJO?TVhsLKAsH_x`V%MW<0`WkXYb>Nmnq?t3k?L>B_Ah|T<3~cC8izR~C=U@lHgy#HWUyXOQZKXk zwu#D8k`IV%FO z^)5a;_-@bZgnnQiS5((803g2O!6O-3QP>6KH;@UXsz;c)8}TjV#-2;+M_aSay`nqTm6U=+h#n*sW?URfYdDm$F~ z^ej(yk!W!KJan=G6jdO3dBQIT^j^ zr(NS*>+AxI{)tz(WPr!f{n~g-#LM{?B+G$sM>IQ57vahXT^r8Zs`oom9)wghU7OD{ zC!8{FUgFyz&KJQCoHzDUT>Xtwi$uFo-Y5OQBjT+-N*k+*UA#8m6XAz?P>tqFJvRqe z=zbn;f{L`sPFm`Q{6f8_LDoY6KANsU6k~*ah1B{b0ImP=xaopZ%5PORrfCjlNULA_ z$K#%N_PdZyR@mVD%VnZkAZZT#-qN4Oe9#{A%lFwQS^5`GuFE9DSpgUa?kF0lYFW=L z)r@-bBn3BbJbL9Qd?^@%n=|Cqhe&Jx&s0*wWFb{??VH8UZg*La?v7M@Qtxv z|MnL$iP3>ymcw?H)8NDzUbUISj`!s{6&f>qIs?nXU^k{SoGg;&c)PXW3Q&1d3Eu31 zhen2(0Uev3K&kIzW?U;}=0#^u;GS*c!`c?D0j-Vd&hAZFcQeE?i=>F(P9@H*;u_(K zjdtCEECz-ZS_u>?NQ}U4pDe>|OTQJCnRd^bnmC!-40n_aDp~0I238Ex0G05~M;UM=o~k?RL#2W^5q$kTy=8OJUiCB!~R z@NnSw39B%rO^ZT@KSUbxgL@0f;fzb5^{Z3^$l#2Iw%jsVvjFQqLRE1JZP(Iu{O@sym4 z-W-B&a)eqFFF0D{=cT;@xyttLDN>JhUj?>j=r3KK5qZ~8UJ!Lk7{JOOVv%<3(Cwid%$kI~h8IlV(d zqBbxDv{00_^r-H4m$&;Cr8NgZlqqfcl6I_+MdeSw2&SRK)+#e^;`&zDMnMQ9Y=N$y z^C9({$^(rKVg#OjbA)6{gm0lOq2N9k+C)IR3UH{kFW*YEJN3}tXC3>MKtAv3R*h-g zPe^6RmIvxmf`$6uz*A&&Sz@RInlOvic{h>1ok|POd!6pUqypQt)B5zGO)`q-?hCf@iYV|m z#LkX;tIEtC@|igOYTd#`7BIoB>MWqJ`KKzA5PfH$tX=MnVRsn#hKV|0C4it2o8T7P zMz{CQd$;*jNxjp(C3X+yy}0TGrI}MK1#<)YeG1qz_-&pa_89&kb}*g$|&lT$|d(+B%|= z*+ERTsYkRjp;g3To!csiNkqW3h8&!mI8)}O0=43uE+;Ln&O}7trwdFLT8__~=-zM9 z>_~4Hpv8M*L2pZ)!jaf)3l5_|!`2(WRttYzn>R((t7hCt-*#PrFX5Ewc?*iB8J;b8 z%r_t`s@_YuI0|mcXY9sFp|SE40OJiRvLd2|?0APD67)c6EXQ4mAsVuFU%oL%;p6R% z0|7n*->{pVW&((68&Z*JV$PyBHcU17>G(=?fVjHatdEgJlJ?mXu;%JfYS>Osa`oQD zS)$t=ZT+C$ctwO;13CCa3W#yY#}T?Rhl7~++w|{P22MzUyKnb0hB6kkKKUSk|4GZ& z(|Rk{!po^>;f&C^yyT?ZP6#U_7&j<4?%U_BhkqKc=c>x0ppy~X175oJ7ZK`y#$jK# zM<7RGA*(pAo;iwgyp*u_#PVw{DR*`;Jc0N`VaZe~w$q=Vn9`EK1>J%VkWB8Nv{+@N z9y6(kDbz{R${%jA+Im&vdTUQC0bGgO^^s)sEC@sCvkr9`QgBeoe=oH0{WziaO3_q)PiHNX zRO$#oJ`#~a<)_BqqN>ZS79RT$6`T;nN)7%{-%3#aN}_8@ti}7(wIz-bl4?tK_82&Q z(*h{&8pdC1&o0TR%#L@4l4+*yPH=*nwEmiN_`2TaQk$lF@Einfp;Et&TS_#HS{*TEL+wrWFQcQ0-hi8) zDArGSmmaSGq6nH|e=C(FlRgJFvpVtBuCV7s`gHYU`NfdBbe3>4?3^Ca|f7r(vbBd-9Y zU;+T0yyobokI_pCPFdHaN4-#?#CP(@7kfWzUMV)!eku0WZys~md}Hp4p`SPUWX{U41*#Pj%g` z<7xE?Ss8kMzpmXKS6V9xmEn_<66NMT+MeDvlkR1M+|B39XuLW7kW9ap|Ih@fJWtL) z6`-MfOTTbu(l!$i&#P$5z9<}EGs?95o-e@T3af>!{D7WM0?z@3ca6t(jJTdXY5EMS zD=+*GmmGU{?S*QG1IBRM>7@;I?Oq}@r0Qt3B-mz`t~NVmTn#Zf(sylltJC|Ctj=WD zx}T35Tl1Vf_>_GnovV5AA<6ut2)JZ;wL|V_IJf#_MIQJTA2hpjdQV8qE*i+Hnm+fc zdVi^M&hZ`Y=}1_2p~$LlZNqq}(Q?{NQFWVR`_?LB6f{ykn%sY^m!k8>8`R1+q1wkj zGi|)nO3ZWU!e&aXQnM{RTcn;B)+$_52fZ6)nl9AF^J?p^A6?q4+~= zhxYY^#Bq9`#!;<$>XGmQq1{Q5R|u86J#u7@b6N5P9{bHBzWMN0`;@mvYwf@O0$NhN z_vy)%{PxlRJmYWvbLpzurqVA9d4<#9wAl3;$7cy%AybDO4uLKX%Z*86huXvEex#AK ztusIytLOHwJcDF}5ZbyZvj~hr3CJZh1OnX6P~gJ14EVQO`?qudKLG&yKjEGLLhZRH z2C}-_tij*I2Spn%A9gJ+ZAZiCZ((QH+Ve5O!TKZDA|=`hVkRY@n{F5W&0GD~n+u)* zZKUG#i|?kng>x3OPf+uK^c$xCS%Pnnz`q+@I2LFj1|BKP{l*UXznJAuWB;~T&2*p+ z*@dW<_(9NnCjh-C4f8DC_zyVnzlQ(ES4@F|DWX)?{9r%(q*MUemkxe?guQM5@xi~p z3{e!!6nvoO2MGt#fE{DusQ>cKk4=s(6TIvUdL-!wMgm4_<_L_cV*wKI@<)aa4u1rA zS-SZs_m916hYmozr>acu{I?!;zmGPY!lnX2-7J3)ub;|R39S?zoBS6F-?!o+9K0;i z$wT|c-c?)%*nz`Zgp$<{tt;n@K6qJXiN_CeB^*HGwd&5S8xQ`FZ~TW{@;{^h{^b16 z=>N{G{=P*|{mytw?E;mYWzpO>L0%L zln{s?j=h>s`u1J_vPQtHH-2vh{_=?bne|^R=YMAXXUqAYS^s6T{eSAMpSxaW{OdNq zWc3l0V;qP81`?2+I|jPfrU3-fwQL6oa1#vAJH8wVqd%zwJrUE{`pw!m$-E3z7=Tzf z@Utt(Qq)lV#JS(E?tkzxf8(2N1;W`Cmq1Y0J=;^k7QMPXpk}cDpmF#i&zCuMfKrnN z1#HGH6HAZ&F_5c1+^=q()RK5(fZa*A`vsSa-|?Agz1QZlyF);=qt@K@7!Ws72;}=5 z@fRobhb<_;0otTF_zajkk$y9KaqXhd=;%ZZr4P#Ja~$=k^)M;38un4(f$TO@OYcTD%FaajWtPe)LcIy(Pe zc-i+IpVJw3vsxmcx|P)d@XQ!MvXNczVytn_NfCrgxVs$GpML8(DP^nT6}w;fLX7zAf^lEr0hH8*Fe zT}QrVO#i&Cz8F;!qB#ampPB*XsBi%|9E73EcQ>iC$s72Mkx3Ml|nccTEkd5WA z^6NK_uO9`-jC6qVdBS;Dv@4?p!Y0(E8|tf6yPvkhcFB#Fa0YN+OLwu{)}qvR-D18Y z;6bIgGQ??oa%X_q{DT_jHRwCpjKs`#M&ABj?jDOXQld)V0Oo&Kxv$#jfsK~VbV$)Dc{%|sB+5j1%?@n-!CxZqVG(B$;PHo=#g$XW3o1A3~oVYD1uySDv} z(M|1(nGIuDNr#j=c5zxF{KdkkrfBAwVl87oC7e$%z=O#H6bs9|{uY3$O*DSoBn3Jl z_z&6lFq2=e>ojqy=|HV_=jj&T*XD)U zFG0oD&z}egmoDs@${F_X$L;Gf119RW-yAi!RapdCMAg1UFn#i%!hGHbXNjrryMAA} zvj*oa+uCn#o3)tX)2*P(#B0+UP_za;<2)m?G|l3c$A0^XE8Wv6Nz{th=0w_d;10;* zhpdW@No)*8FX7$}d_T9-VewI)Ijx_@M$dG)!Du6npzp2teimSB8JsK@cRR2}-xjh> z$d{0gq318uZL`o`hGg8eMt*)0so0;hQ(-z5GFjq_n#)g5+TG74&C0qBl$=N`nX#?R zi!^$xh2WDWuTRAwc6YaPu*)We3yHKs+r&`oU;M}Y2L0sH;Vj3|r1q8Wwe_Ttpx5SH z#3{AAfkLrI4JcG*bM$d*~3mF644J%G~fD4$qzwRO6cU|;D39#&DR3%qtm za=09HX?(uDFR|@~CX1bx?pU@eOsl}xjOz7wMFg@L$wW|AD&G#NY72_V0}r~|bQ^OGnxBBqO7-!%XXJ2DDhZY-*+-JkL$+0BM&$wQo;T8B}v zc?jj0fcn17_M47o73VCd4=>(ti=yqfbiX=)#tTTatbyaBwgg^mIbKu;kn`jA2fDYH z4|gD8h@0$=-Dx3vGIBmhFZAL)0~*32V^&wUd%Xl|%-&Iy*UDrW301JUZ?0&nX&kZ+ z-(Hs-YZMkk#=u!wThhqy8ZrF9cM2aTRU|i+aMlJ%Du4W~@xceXjcn|JEW3#XTDEeW zjh?|`q8D&fBe%{|O@Z)En%UwkCc9C8W<997(R4cW6R2RDI01lV4qRrheL&CCO54HA zduJ!gte2k)3uN@aHoM(GB7QO`ekz<@{gc%G^zSy**}D4x|C1B@s<|^1Kzq#K&FM(s z^Utt}^;$OyJ(6w@vWrQF1E(Lyzdp^UxWXnWLN*EiG*Il&6p_ituF_N zt}IJx9iV4*RI$NIo3FDT<*%Ph8tuTc;(sP-wxt{jR=hJ?!>FoMv;M5>^ z(IBV*tp7H{mOF_5Xc|C!!_Vxozl?5l^e(x(S-PHP9u>p$u1F%h@xY8ixx~3WOkvoj&=gD0gH2P$`N`X^Cbey;(%^tJS~ zU8r(DK7@bCh*mK+3vrT&Hf=W8?gDX^h#rh?`tRfD+fT%m!Z|Csg|u+{+%=6$L&7s} zYoCmM`sr%XwY)n9Gog4lm|GSoE`RZ_g{wvzc!o69Z~*sa%sz?qiq0m^fg{il2})#g zY@Q!(9xIo4TUw=5>2j=tX_}81aq=h9GwLdfj zGIq=<_tP5bnQAsPQqw8`Mtw}kv_J6rV5_b`1ufLCJu$emlV)cTh9DkQHZHasUT|BZ z0GtKMC{jNyIoplVr2C7^o4xtHcGQj~wXh|gYq~dT#$EkN*#)u8w!)zU52{ilWM_%D zl$3DYLK`MaG=;bn?F#Qzfd(?G*lSaN6ODbX9AL#_bGEtxuzi8QwnG*G4_8H0E`r*- z92-Xff%F56pXS>*PIp4yIvZf4M~VZ&6sp2P@pjAI%EV614W(;04Cl&C)x;PBuDSqz ze|O%o1An3*!{D_!WK$!+K1scq?%%|HCJ3CyruWTt1hBE{I}0l}BX#!`8zI_xV;~a! zyG=NLQpf@_h((-n(o%^{+(E9jY@aWjkvM1W50ndzzlm{3<&0pH3gut``lH<}W>*uI z_|kwOoK&cnIJwnn)Zka~V-0LvY}fUp#1y>)Qi)02(%QF0H~eC>O2q-S6G%GcH&NC1 z5GOofpbMuAl=-i*MJ^m#D4S}FbazruUvB@V`x83+P5MHjnSEQ9D1p*W-rT`r> zBZFNBDCdGi2O`2KTDxQE+{vx^*rxo=RqYWQSTe8{rH_l^9d9El_s{kr6V6-kxGhNN z=?7o@%WdxuH>6Y7I3PtI9x8#FH(n$n!}}SePUt}VDUE=$VnoAKp;zfu5&y5fFOP?E z@54Sxr=~1D92JF}6NuEiT0EwMyO+-F*BAKvWpI78)3#e zCJ8ZyN@EUVdGEXD>734apE};p=l%2X*L)23{k!kq_WfPo>$<+T2MxF9dC{F#$DL9_ zsap}De)Cb&6d)`ZMM2{Z6vMw^ zDvgW1wN&``T|QqM+FxmR)rq| za+@cAbmVyH7Vb!f8cb=c7#_%rK~~dUX=wFi`sqT{+g9)ZI3AP=^(Z`;^v>8`z1Ks) zA2N}f8-v8RcAT=B#>4_Rrvf4lk{ErP6xwL`d^QD1ygDa;xy3}5w zow$QU^GnMWP2$7$1%s4vlT3CF4Q3=X$`O$K*Y&s+#I8^ zH86R}z#N@88C7!^cm`fZr@L4Z-X*&#z;UNy#zo7>{&}s@<{BOy!QZuS7emB{!mC`M z&uO^~*RUp8g|TXZLj+U-Q>ZeXSG-)^gB4{{m%Z~kTHbfM*B2Q&mu%UWliZpQLG`83 zG76s{4f#P!Cz)F>s3g^Jz7AlYwto~}P%+!op>{#?xY7y2rB4#7R5MF98gYvrpzQax83Nw{Z1DZO~GhANtI*C-4CaF87R+#Rn@vJ@IO)Q zVoVEf!J8BcwX|5a}}^v zGHRQ%s+KP}#;jtxyc|4JuI*q~8y4hoZ$U3uVWBdSwMJPEKSzk-A`kOZc)fy@>2N>t zIKyKwV$a;t46A@_XNZ+teNv8md>{+ruI}ybz~T&VeN*WfU)CLtWw9qSDw%^bVRpPb z$Evx+Z>)|6&Ip0Is5O3goWIyEsL5~Hj!z#iG!GgwP_ zp0$nJZ=aQNwg*O(2?m5=g~=IsCSV+9gO@O)pUDUYYC&=@If64iLL^ENvh9S;`A?&0eXTnd4*tT<~{<@ zCG&OL$E4l#Q~2s9kvHcgieZhm_W%#`2(oPW*C{l+Akjj0 z$yt{`zVX1ru<1h7E*!YbcR&;$c4a!u_W5-KRc-V*JDCt}FGKp7F}>(W?Ub3>(x+2e z%yGzh)RS7Iq%yop{V)?09yi*HhW9tM`o&Ly3{F2zST|`!Y}D(OTY%l**=fO34v_ zn^&@djusUV?R73Ld;>Lh?%gET)el%mwYexz-h)AGqDZ9(I#qQgpU`@Lbhi7$)sSjD zEDzORBcz+U(BX?Mi_I4kGwRBh-a}}T&Z}a8IIMcRBi@Ds*!rQEg{z5Y4VJK zcW}yij)Nqz|bncGM)_dD7bTH@1 z->{#J-XJKV^RA(@I1sd2OjPY3QZd}dP<@Fu$Oi;JYXqkiuh3N05i4OrHC@TZBQw-J zUmYRrMn|#z;vpC4qrw1a)Y7TP7$2-yiQ6;`*#D&00~mTY=W%G9jlyKZtW zD^|MuJl#h$q+w%g(;NWH-zPaD(P>u!fOEL>c795sq<6=0ECP4dyI%ckv%ZO;tblrl(6ZGkoiq~KshsC>AbpP>ot5ZJ{ zNmerLqfrxMA(MW=4^9E{f^EFRs=xUmz*Fn2rYmU7{u$8t>xXF60Y4DQD>Piowd@5C zRuBf+Xse> z$4g)Zcw(eJof1YBRP|E(HGH*sx37I%So=rtg6J^ebE&Nkl6mSIvVlPLCeoM#%-z5q z-zUvZE7R7X_YmtaICZt*^@A(pL79E83aBt&lP$_mpT)vJ*~P?T(Z~ylqo=X}05};R z5E?1}E>+DvGjZ_(0Ej=@Y z*K>y0{5y!sZ?u*^jB9n8&IA%ZOW6cts>|+^OhyYxzK7zowqF<7p#=#M9 zDDM-T%I1#)u;CCS`h&mrUV zOdFI>P*R^gK`1M46B^Z*ELA^I1!^44>TJyT0G`?(vDoJ119-$eNE&MkOn3yVmfr)9 zziIm2k1j=C84U~&MwkFoKP*4^(kEy{AgD45NRcGTiMf8bZV~ZoY>!w$EBnW%*wyc&60C(bX#jRaf5J^p+v08%W7F;q>Q!~_91x%d`OMGd&ukt0K>T<+o83ovb zNp+epGLAM3%9RBLCY2v*Zp|~9+BFzGBqSdW5Nj?{83M~Ww1%H^ z|Up!{f%YrW)m zx?*55_WJAjR_nS_!2+?97er-Kwj0D4)*|uGo*i}}#Zo?qSES}aZG?|80skltOr1@q z*_)XJm4RwZd7XRTohlLwFfll&(vrRxzK~z73l_QhBo?~t=(z1z92lC~OdkCZ@g{^X z>|$dm4ylyaxj$L3q9Y%2Z&JOSyEr!z4;wM&=6ma7A&+vPwvLMab$|-3O$ju%ZL0&( zb@8eK_=x(?h8Tr6nqDeTALv+khWfbfi5J`{7Vz@4-Kzr@q0m53J)?%e3r#3W2(srw z?qGY&j;L(-ZCQi{H*tbIoM7Dn1Km(2+tE7a(IPJwq26Au{)^Xwzm|&JOITbuAQxlh zh}j6>LPcA(K4ATT^l^&MkW1Hqw?{${uu5+p5N$Kv@jToCDJ(aMjfq*T@Hpf&KNVbA z9=mTS>&ok5P(n4}Qn-uoh-&Xtd*@Ge%il9r#SH>?0UHf%iTj{G@PnxKHfe~rd~Y#T}ZEh#5? zYo_KCs?PzQyK(|egR_@mxy@tziM4$&N0u>RmgC8|Q=3+#;%gJy(@I(HQE9 z(2|zLKf=7|S~g~`-O2EO#l`ZTR%jiGcv~x;vX;0})YE64(xhNI{~2j4P7;i0wuRDC zBLALb-T~bU4;52`cI|gbi#S)Yt5FuRTV5wwjwz-!P0BnhP6qVX#ACqjV{)pntn)ab z%xLI4s`_2Q5Y_v)UjM?72~%87uQ zM6pij?+SCSJu9m;ckL@h8nP|g&#^Y{zZwX`wt1LcOuKm|==bi32`Ih8WhFgq_Soc| zNJf8g#K`lx;JBDhkGsPbZ*}gnSB4qJOTs|15CEHTH>rP-H=ZZ7qU1kYV6L8eX{oQxE_uTAgD$r0nqD2BNbZ;hotFL4Vj(`Te#EAsVv>R;X?`YKTS0%;UEr10f$|7h&rKRD+A zWmZlvO$GU_uQdmAfYzLx9@6^zh5mbY{RGrU)aD z&DGwDe=5iHpA+r>hWu9t=>LZNpQG?^`{n80OQzN<5y}1$*oc&9Ib;7FPyFjj z4jAgcgir*KiR=Jks*dMN>C4jV)74&Xh=6?TgmFcYQ~_kq%=tCFJlmJv>kB%z9CV51 zJ~tPZ=|VQ@UHYdwiJv=Q8(24N`*iuY!nZ#clZMjmHk#aXd0Ksgg*$CuRUV1tu{-8= zgvfe>H7UXIUaTjusFVH8K&BWb=&m&~nsb?PLqZuxMJvXaA`ZLu*trmO9EC6)yiT;w zF8<5U4gBgP`uF|Rb_y^D3T9h^cE3QH^$GbO%}7}MhkyCJZKUP`p~%6}qW@Ih_}118 zb~;dt5h&m(uKw9Q^YdlCHXzD=u+ePeDv-2R&fXAzkTssIUrBT73@{^nemN;Amub2t z?8VY=>9&5_tCl0wTO@!~j-zPw=$h^3Q0x-_aA5eSHZ=W^O1Ra#N7(;~!F8g`R`xmr zQq(@Rhe9wG&_M{nqR1%wh@;wNw=&J*zbLBnw{7Lim(cL*j?~n9ULFO5ynOB0x(!6E za(RFq>fUV23PWSPG6&J9LC>hJXkGK!R=QCozws-RwG~dg4zBaI<;29tS=U8_w#yNZ(`tV zseqTbhfBzndS{~mj2pIdck|}qYrp-`#BYBn{$W#Io2l7@N~I0NTS5Kx+{`}5T%OoU z_~H0(HU5ib=%(?bjA$>9Y=v3Z@IunDNCfWe2|{J)^TxuBcGNL|X~1Jgd~4u+If-nP z1UN!4K6Y-!=|KtZ$xPMM7&~YaB`i3lkRzcOTdT0Zs^1v+?I-$Us1~PgLfRHwI*rfB zz)j6sNOn!L-dE|S`P}*~Z8l+ieS!Pl;_U+BWoOyymYm3`tU@nUDrqkxX#=qeT7TFk zJj{WyUQuBR-auQNF5*hfr@iS{03WGWTUaY)UW$dNAJ7;OZ~Hor<}Z)y{8;d~WI<;J zNjFWWHkje{+AHHSql(fOa)vEKwtK9LXV7tqIdA7uT)M&-yN>=w8vZZWj+Wo6mJ*Fi_-*>$_35-+FKHxs zF=H!|I36~FA?u_}E4AHXee6%n)JC;28sZFl;wY@c2<1C8P?$Em(y)Oz`2N{# z=AK@>#(MR$fFhzu*@|9e-GkK7$-LC;b<%*)`L>Qjk8;RsPanVYak}rblg!^<&|jVp z9QN(i2Fe>X<#yAlKLt7RFn#AU;sKI-zjT)T$_CRHm1JzC7WE2?G8}*r%mKP z6V$n68>P&mw)7m6uMaQBhYtYMv!KU>eZ@W^F7%-iYIsl`0M$(Z_1^H+zIWF^yKW#7usr~JzGiJ5 zxK5RJ^eMo)%&OF)&>bFsplG1La#Sf$0ac(NgQ%Z@r%VHd&`Ij67shYAA3$v!c;0cK zWVR)@n_*-9z&^q_uu1sH!gT9;`}3euv|GmgP^p{l^n-{OM)U~SC9Sl=g)v;A)Ek4+ z5u1LrgC{Ahe#E@bSP6Z54Pe-PQct~#k=2ZPGAr6c^!n_7{7>ut4%5Ao`QW{v?9P*B z6|S1Da9w!V`_wbhZ_?FsMw0;|{XE-gt;&|_ z)l`xNmuDqKz)H``E5b|9joB97$4RAUGDKYI%vnuhXB!4`0rhy+86j*>-6`Yb6QQWC zdsn;{Ss8#SbLUK(A0sC#AGtt!^4hwC7PWd4EK}lzAlDVfR`^tT232-MlWeQ=Jey0M z(JelG`+m3-c&KQ$Wl%jZf<2B6Kcm2Os#wjjUFXOy{(TeldoP_WbYBng6eY||-pHI_ zPIKPv%|*@e%I#-kUl@#g(DA~pobPuRDMc57;-CS*{jFu*LbB1%JNe)dM~YX(?y(gG z*`RqXJMCmtwH+^j`#yFn()NJH;AlZ71%Vy_mZD7j*dngQSRHfU8~OCr_4<|2Of-#(DyO-xou`2tZK3a1y@|(?sppc z$n96grfddtw|1-B1Fy3LnUDPf5Rc@3#O#A&dcUP>#qL`Y>C>^4=2Ej4N92cK>K369 zfeVG!3iwM|L+x2z%`)aVEtlx`n*sjU4icSkU&iDrVS(~7t0ibKWV{I0(E2WZ%y4gB z0Hd{}Me`xm>tGn%67EW;HaB{7+@O!K$+neww$<+5A9U?q2sS zdS6R4`Iy#cd*P9GVD}3HyVC7n!~kC%bfIJ)&)lJ)9`@;${PA;3B$YNgqOb67IKYQ$ zAHG9=sAi>AQ`L^o=pCAYK`!2gH@BWBlHTTsDb^Y-iluh9^wVsPqC0G^5`{dUgmL>h z-yexDYmPz6r@}v2rXjTa=cAf8+R2Y=YSn5G0`qHUp7Db^u3PD@@8snC^Oldoj@01U ziD9eC%0>OLM4!x`%V$Egl&)r%zV64w9o!S1u!d3F(JrO>OETVe%%#XJ!wXIvPCP~nuGrf8(DCnmOrn&1swx8*IQI_R`>bSF2@2!Zrn1&GsDUz?F39MwHRo~o15LA9 zb+4+%t0%)vzq%&trJe1k|_=7ehl^&Huz!@NTijUw?H0fTX;(7T9de&CYS_a`eEA!?9u9hQL zkhMmtln<~MrbM(TreoD(s6AbX(K`nmIgj!rI+0{m(+kShGH=IJ$ci0S!>vg?F=C%+v$PwFYsf9R9l&%M&t`LaRw&A5N*dv&O0i)kGt>%iFXC5 zN^g?uW6M53pP9~7!jCg-t`?dbc;9YoJ+!{FH8w2T?gvj)^6Y)%l^*K^We8!p&uO;e zGQ0(sIeodXSG*G+mo#te%-(MuSEzATHwyEF;ZRi;?B$e9jzmw4OT_may=m_hl)4%E ze7aKR?NCL95;@0U3MpKyOvO+-X^6yb&4QT7&R zuHi*DLf>=)BZpEo$9K};?^?Vve>ZgNy58@W7pP26Ryeh!Zy{EwmFT%CzK* z*6U*nS(%4>q$?46ZSw>v__^HK!g@D*R95Niaerk+kMY1eb5!;T9zUs`w;UOR_@22r zr_*!b=uNY=q`;XztE(ijN7D_6T^OGLIWKY5|;?1~MjG76*+qPu= zhXJ#-#&bQ@TrJPJy6nhHYZ3Ya$TYR5cu6htVbjRg`K1O){dAO%>?XvV_d~1Fs<~`N zBn>S(fBD!60-~Swlz2lOmh5Y+SQQUta~kjP4tp_7O>zriX0vQg- z_qnT{9{$Qf{&Yol($fP`OK-UGizW*ARbCIJJ4Fb_WA4q5a`J7h^jNmn@SW|!2FEZC zyPrLIHqe4ESd#Z}bqpRC`YtTlg(PAjUk|6xk`3UFk*N!dAD@^bb14%r-*_^jZM8PO zeBlymooknT^c(!~)Qc-G=~zLskD=wg^_XJew{?bQo)n1(+G3 zn}c27mdn-;u09V|sd1QmVQ-iHWr5&tyuhfN4U7(y98@)f3kwbM9qqq&bE*a_NFD{BHc5{3u*rRm8tr*Mb05^ucC|e zPo1xNDHa#JX2rW(lWH+!ry*WlQXhPjr00d6*1wdci}g-<`Hc?x;;UtG!OnL*qIzbV z$}+VxxIx$0QcrNTGE{x9Ht`HjVMe%FIC2ulwOae33)V#g*Yl`l1O>~yV*hF1? zaULrI$s>3~ES(OB>89gN` zTxD+g*+={@J^p{846l6ub=2bVQb0Av=oG1LPs$yLxx*DZ55D9euDm_{9i8GZ*Hb_D z^SEUCl6_x!K5La<-+DSyL?ajDTc5&P6|rEZr231$X>IP&8m|tEvCgW-V^08HoKv&U|E&~_j4^B>I?V|_%S|Z{tM}(bIkt%cm%9Z literal 0 HcmV?d00001 diff --git a/images/decrypt-key.png b/images/decrypt-key.png new file mode 100644 index 0000000000000000000000000000000000000000..4abe6a815418200bc6d9e824b55c05f6d62bb735 GIT binary patch literal 38452 zcmeFYbyQSuzcvnt3W|bsNH+*5-Q7r+v`Tk(jHrNggVHI@NH=33-QA-MDcu9Z%)A@F z&-XdcbB^b{=da&dzqQ_3YnaWR9kcKIlh<|Kky;u`_wG>M!N9<{r=l#cgMooV2yD0F z+yeem$X+F4VBk5}%gJe}$jQ-ZdAQoxJ6U63C`YCm-hQUrN19`jl#norm9LE3!PudS zo3B8Sa9>cCP?_xs3pPohk)GQwLllV_iMAKlt674(jS4mA-(N@7a{nq|<8YP5YTe_6 zia~{ZQGx4&p#JQZ^ZOVX9j1{?v{P7l(xzOo`ZX#( z9#iWU0y2Qe#LzyO$s#dDKSYBIzLE9%VbEF953daP-6RmgdGm!&!8gBGuG79*A|TiZ<;sSKXZR;xFsAlhqCTdJ z#WJ+5J*tU#b>MdJ>}N$1)j~qzi*J<6!Gvpf9s2Hrcfi^WfN?_%lW2sV1UOHYjE3UKasxi#eJ%7!F}l9sOyqj*7>Yk`T+S&j7*RwMu=AMI~+2D?*OrXrbSdZ-g{eu zSKu~RA41G=m-N7BfaemwLmg=p~*KFK^mT}sG zhd1ZxL2t`Rji57FO`%!lerz;2bM$<}pJQL~?cpLn9X#KhyX!Dl-b|wZ0`(c$gx48J z$stzDNx{6GEZ6HJH9YAydO-P7d-4)-$!0l3SuPZ4x2lBR*)Jc72tJ8Vo0Z+cn0}qz zHEgL=6Y#l9+O46`mjp7vvc{$txkFz*jJ&Y_E-#Tnw|Z9 zsUvl=C7jQpyv<10;EB26SK!EGjI4^)zG4Mc>gr~KA11Oyd;D_G?>q{n9_*p^dxJrM z_4SJ~!R;hzQF8o3vajCUHSgSK zh{d=08txrNjjkoF+E( zPFsOI9)8fwQ8iaxR&-&qVDU{ru+0;jsM0Y#F z?vdS#yJcaSrdX_)-K`%xlVPRqsGhd&H}rDIW9UXkx0(<;@fZ^lja z0rgw+F7xj5H|L`peC=~*Lh|LtYsPSAer^xW%$0kpZs1ZEnvBnR(FD^3Qz7v>(B@6E+-Sk68cjtT14=?>{u?`91q3Qp^k1|^16 zq4bgXx4z-Y;$hz^z7=@Sg*=GYiZYyPoq}7aQYh&8TPhLqSiuaZ`mxOz?U~0*FEGFP zeN&CtrS+L17w~zk@i@n(eF~oB9v@kzQWV)`Rn^Cy%&i-4|IWU8i(>-zG26zgj*c&J zj-!sqhUY`TQ&PTMqc7q^JAy)j@x1Aou1{PA_Uk@1C^x=$teIH}W&S=s!@J;-YF%gD zl=@+ctzyeSz`(bvZ@P0@c3WVYYns-{$yvvlbarx~{gc3_wOP`I>DlF`!nvCZ>a`WM zZ7!Pi=M5uu(C47z*gY|(`=e#-xRGqhF=Yk|Yy;+5mR#1^H{REv<;;DWdn(x!v?C-kDt4^ z=^wxd1_(lW&k{Bs1sZTW3T=CrI+pUEXl>qZlnT7n#*TM48jtgyaFQc>5nvBG{&A%Wa?xe(F;8CR&WTMKd7g$C!2^JSJ=8oQ52IBvr8di`L(B#X5z`T zqf_5(Cd{cvox(SyeGGne*u!F{@k2v6L8bTU&|>Pv2dbW`l`|{%+G$(wf6?+ut&6mZsG~2oe<=k)&%^DiWDW{(KrLf6 zydHf0?IpE)4*W!ZB2t&7QRN{sbJCd#D%n8uSDK<)(*VJou#sFo_f;8$sVN!F1kxkc z(=(bB6R|!DWuMpW(&bk7e&1^M>v-keip9sD6MhpJC7GJJe8@4p=@>4)#1BS%nYKp5 z8B!INKC3&~o@|~+>sNv^-g{9kpdq#F8DXduYUe^TBjr;V%38qbbJf3{Mk=BEbEP=PJ# zQQvN%!Yioc1gBki=kyx4CTzym7fcwMCiUm^QeBx{xaKdNO!^zsEP_B~%P#dDPKb2s z73y6vBA=Yvl)`d&Z35twjl+^Hhl!fs_u}j!iq(J6sF5&-%_gt^|%}G7*L6 zLbL}GT7jdNKQ84?$eQ(Nuw!w zmJmb9dqZn=W4We5^Ny5t53gt5zzC-z$V&2;O6bT)5wprdgJobFPkhdTDz29i;}F z*#w^>?p`98P1${a7-GD+H#B_f$L@U$yDf~-pDnSxivFYz3FQ4lsHJ~My;$>imu|-_ z4a;5;%2~qxEII2WODD8L0y$8j$2dJ8ci>304s7OZDLr74-`w2?*-9@&ns9wDSIvNbVlmz`S>#iLPeRcb|PvXjmWq z6bdvSQP$5?Y}C~;IDl;&3~WqFjGMp~Ch(TTr26N!A|@NgjooOb5XAXYBQ!c|B8qDr)KK%>Ba3^`$kppR?Qbbuh&J zM1f6bYp)k{e$GxVo}zvd48M;M1-7qu^Dxl;KE%sWg5jCE7M+}{hc%rb_hatI43c-~ z=;*{ftZYPe+aZ%WLWZpMaJ9ewhJ(*?{-;C-63Exj>cvz`&5kP?49>^TXW9 z#$7b~cG1(L6RGOJo;a%fjzIl;r#wSVS0`&J7mjgYq@7yWXcRVxxu&s^nBK<$I`fvG zi?HAkVue6VG|<2)ELvXQ)4H*}W0mgSpcoAUu|JCbvZhlPnF zje$k*3Im%C7WYTu z4<*uvGXKj{j3t1dV;oF`@xOS~-@oXG5*9h(Rqt!Ye|zA(n}nNF73m+ue5?Jpiqnms zZ?O^nH)D6i`ifo#^)&Lqzm0DxBUYhOyrAd$;FChd*z!WthULnW&9QHfK7GbokLKxo z42GZrwr|Sx{b}5!sfj)(>t%*xZvHirySpU72jX^WtC4HbI4#mLkWRyndQveoX zg!?$eidjh*=Pglb1S*1F#!q6MMr@Eo18^hVV4Mue~A52_38a6v;qulj6 zua4A?$CPM|EMtIci3PN|Nk0FKQMc$ZKr+1arQQE{a3dGwVl$j&|MBUEm+?yyA;*kA z;OKo2n$OVO-`cIKsto=1vjZ2*6^HR_qa@alM98WHs-ct8ageYn?XXF^69hV|%l#l3 zeEHsGsr3Vi!Lu(YWWl~-)$8;lW9aKxw$vkV2`_j3sH{!by9YLj3ZzdiCB?Ujl6TH- zou()q{n=3uBtmQPa05<%S%)CEEf#Qdh28c$5!DnzE?F1AZ!>A`_!&->A@k-I$#CIq z+uYzr|J{a}f^@3ApoS>}KDltbnv2e}dB>ryNFueg7n`H`)8yYIyyopoK7h~&=w7`7 z6174Gd8|Ym?3MrYC8J`e-I3dv0$D@4m6hAHk?loOEEvw-diX684=V?R^7ow5H~g+4 zi`w&r)DiW#zgQAbXBc=T6Hcexi5+sB34Na<5tyMVg`C8rl@u2~NWLGs+jP!00jtp?_tAAr_<-LGCjo zQ6ZzgHmVdwq&G_olT|Nfw5O|H^l-QBysYE*{-uWyvXWTi*>C3`ho}0^MdJUP zEB~G=s_@t0qnssmJ?n3hYtAz4>&+vKy#WP&tNBcoE>qm&)sQHn2iT|p+oBQKSIU^!;KQ{!&w z$|emNc)~RL?dZPy>6Bq+UotD%R}TUWI#&f_Wwf@5ZYE+iS#$8PhnCj7Su`%cAqL`Y zdef@vKJMEXTBE4sb9g#4KKIkYcu;H#dYTtyP~PjZhho*l2Eo74R+0(K;ID+B0nZ|* zIPIS>W>hJ@+Aed7p!Ruhc6gb5C z@^sr4++Yxo&CwpiyE;5^{zD79JSVOop9`Z z2)dI(Dx{sc&@b)TOI$`xii+yi@>s)gj3b-JmfbN70mBJDfRIpMF}$eW0M*DA{m>bV z$S6)T?l+(2n|CM}V@Wpq@awRNGOE53St6jm+6cHA&4Rdpxhs}YPyD0e@@`<*XzxsH z!YmlqAi$U!5zh_Hp&RENIP1QXn#^)Dj@Zwb`DTk8e7>>U=yW8@47M-ljKou+4cvJW zxX6aK{%L`4Jt1`dr01a}>9gmU2;T(P=cf1<6^b;J_E+VK7m-ANGA9VWF{VYqq8^)^y=PFQ1&J=4x1)#R5*fD|9(cCd!lju!4CwK^l=eoFlRD zsBVyV9SB|x$t|kK&9JyS)u3J71t2i$_9sYlb}PnGPBB#slgkLXw5*YOLW9pqBw%>B z1z&qw+rJXYm>)RMp9cl55C?tVZ7yBcCZ|{pBhl# z*I_&ZD&D=VFdwhaW=VO9N%3_sOJrj2?iFn5C~next-uJDGyj}fhX>}`=CkVrLcn41 zoV*|V-&ioW7mTc@cJjT{x%!0;h}UDFhef2=9P#q|?wJmBPVbMX_M73481(b(AA-jZ zXKd3V7&uRmg;!S2X#Z8{M&erY_~rRTY5L*Jh%R$aEF2m58S^$d#pCV$^a)L=rMM;_ zsWw7gE^|yRV+95!5j&Po#8GgV&DXcMsdQ!Vxr8%a{3}jwH`!OajSIt0ty>?@_HN*d zKfgCgM8nnk@T=y7zE>vD%gZ(;kgiptahwG`43t(&ciwb3o%W` ztLP{LGJA--`eV%xyx&a$j~i3Evq4W(X53Oe1?!InmslJ;v!EKJ2ulaxhJT|}Di4K0GFc7U98Hs3H~ z?#QB%Wf#8$GJXOh KHu{`)ns!_=+(heYN?5zJ z?FynjxO;{Zo-eoiD=M;3IoE5yIMtr1HXBM*qOtEpT{;d_g3zcBc(?}7Ufg7~#O&)h zUv{kTA57<$!;%mK(%^tnk9#*xE4PtHAM>t*VAaQ@+t^c}`L4PYT8@g#_!y@~Xh`7p zuztT)WQ+(6|U5HvbcUWb}!I#^OoyA=$N#bzk?`FfN2`7d|)+Bs> z2hTHOmSaUNe3!hV=R=px$`Qha+_@IL@cgqvkWN8!jglpJIoB5&+yvz401-A`3C55B zP&pE@Kf;kP>AdmL<#d{!?`?(2c zxwa@|>!3$g0}5I1@B|fpM!N<{gn;m+uG|V;gMz`^t`w23%6SmxIEk}o2q3U|mtSm1 zq3v_~5Rim3qOVf>9;+m|d<@f2w|N}~^)lM8n*P%UjC+W_4)n>rkB~1XLUQBhx)L!K zMm^~EUr~Ro?q1;(Q4-oEsrN@TPp#a4F_I%u^;%k0TOyswh*igT!C9ydb-B%|;CSy& zb<27Niz?1d;mgg!-8&xY#P(k~IQ}jpcdXSJmO*HwLcCppcE6p)#hMh|TH%>ldKU#D zoHOUjO*8}+D>V52iDf~0W>!RsMIyD=sLV&DcpCMUQy%3q|2gaQi}cs=+4P|dt(yhW zm0!YH4)tui=e49^l!o`6|orW%^hDWqN^fXto=6xzb4EvmF`&cfVT^AKX{Bq058 z_~0%0Z)8^y3Ujwt_tkxGc83i@P^aJ`rJYmb7)Uj8;JHe$#WHb0!5L^mUC79?a8n{X z;wU=0F3FL8YXJToE{a6Clz!m#2g{o${DW{O^w6C~rlS25Gu+!b|1NRrIQ`R;8n zWSNQT^l?aw;3AXfa+t#va$RBMPr09p%nxj{#fr!fTHMAV{*<*7$vyY;&H@8)gwRcZZSjyl+`eOu$wcu=6ir*3t@0LCz; zFpHy?vAYPC!&U#tf#!uL^s1MpAp0SE*`C89J}*Z`9D8eAmEC}7F|R*otj%S4k6qI` zD__6=h_`0i*iqj}nT~A9xM8!gHK7NW{bP`ORC7_)y^~5QZU1lggt`KXM?H;6IQDO9 zbUh6hG~P`E48qsqj!YGn0n%}Rpv6Dkj`tWSs$6P0TBc8F=R;K4$3=bjoQkX_IfDKD zngMqn;u{f%Y0W_sP<1orfh6M8Y`j%Fo-~+6vvE-d;T5Q3VyLphp~KazkTOiS&G)D6P=>XJ$QrRiG8+(t3U|>!DCemM#bTBd^_AoTAnw(Ml#u%| zZ9mTg#ScQV6Xzrk9AG;0j;D|q8!Npc)Y>vFC0QZo%fc%TYN>)KuZF+|DgTCNK#q>; zrY(8SNu+KRU)8i6pg`kauq(BTq_{-gr;yV7tQC?E1L9U@51fn|qz6h30)^G1#g8lu z7`YC$?2riUnU`1hcBNubNKQrt3Qkr2vn?vv=NtHsoSc8mXbQy1Eoic#9a7l&hk-c1 zPzkudAf^9`|7xNVVIkfcYdrrY)t3&-wNPmgWJ^p71mUXbA{5+Zl3O#5zfOt_dMmOPNcL`|TVJ_3n{SoHtGL79+a1M+O1oMNV77T07R|D^7K;eJ6C|}^nre5v zR!B9vU&{u5@H1>DMGO@d2MNQ5h`CvpSzX-?M!#)Dk6s~u);$!nxdTL;zf#vZviL}7 z7oE@wZx>jQ!HDS<@X>BMkqnIWSGKUF@cr4`{uQeM@b=4o0 z!|O|2>IYS}9I*mddlS`Js)0D-T$q}kv?wE0trD^?*Q+B#T$HbyoziT zYQS%yNms^wWbKw@rEL|~C^dslarIwxTh=nAv3|xR$Iy2Tm{jIe7Y$w+hEi zuU3|G^Y{1djJ(YI;1BwFysqw2gOEqI6lhrl$PR%&1fi82a0jA{{q*lBvxl50g+f+% zEV=w|P6*}lP~JTqV!dGvZ5{xzoCwz=_1=K&KFEIE&eVj4B$ea@^iz_iMe*>2sLDWFducCjGxtr?YB>C=IW+d3ovO};Y-4wSLR1XFN_#2)|hsq zftJ3`MH9AX+p#{bnei_D#cP&m<}s4(wIZY4>#*P+RS#er#=dnKv*|C9ukUh~+A&Bu zqWcPzb*X_C=Fav!V!;*SJS+^uGvoMcb`uUi7esSAASw;C6cs8ivwd&2;7msyGxZhp zszwc%X*z=JcR{K81~ulm#1@Ni>VD0`=~`5fg1qTPij;q9f^70 zrO${CxpMExKi%&!iar#oM>ih{{W=H3pcRHZV#6Z)ntQDwr}qkc!Dk;vOddiiVc@&D ztmyWEXDUH^!5<%A?o9|v6?dgdrQ|kNT^D*8OvP2+8e+Tr2vjrzRecIi-GD=j4ov?Y zf&2$9NkU+UBZsBFZYNu8*%RmEs@4Prv`~F!4Ea1q=bn}2dj*LPlLlb8KKC51W zKoN}xgu&(;z=WR!DPLG)ANEM0YCe&*tR&kV>A9Ez9j@7R@=wbe9Vk~mx`(^yVA=93 zg~4b6$29nKN-?l)Kuso{+e|fpX>|D)%3ZmCMCs7g{qGH^Zd8i@u^kv(;rKFm_fDw5^Ez`d{K zD5z}&6>k&&bXVkU-H)er565<4kg&gEFF~?Vs~9L4C?nJy(I}eF?l50AsnoW#Q&u03 z+(#<&_{RH!Er!!~<_=*!3${xj`>XL^QdP)iFIA)<8Kn8#b`v31ZJHWGn-5fsK<6>T z1DZbMDMCjy0tLW+kM`EJXKn$h1jzsPYv)i4cjOEYM69|9&Hhvw;c4Fr1zJv{ZvyNI zNC@NVJ;ep%tw4TF6z^H1Zm0fud38(>I`|jzrKao3{r^1@nC9`s4RbtjAwUD(r%Ql z4#1DTuO#cBYkFw-W=uWRcY<5cll?!LwBb}P&G~)K&;+__7gG#FCHH=VrUseuF4!$9 zr|0M7hNi|#Mfw_@!U|d9_u>9}IcqXMvwfHCS6r6yX#;k~M;w&3@K0&SL&k~iGum^X zSSl*K=hT;P?ych(zn&DTavWcxpAEcBIL?53K}7Iy9gIM0Yz(G|7=$`(=3zMY(03k< z2V2Ycj?(f{3$;}orN%bAfmoP0ja~ur;Mx;ZSPUe@yfy}uf9*LD>rnjMHQ{;`lE03e z@a+-)^}vr5^a4X3mImF}j{{mE=ca%$1H1X7&(6CfCCWZ8YEd5#)uM&Cf=E&J_6FN1 zz)h?!&-Yym;};a^xR>gWdcqFDEeEKEBA9Tz22j1P37}Y0Gq?Z5(&RnF@^)6H``&aG z;{qT?T+wGwrtSo^yz;5-Wr%)%I&CtN)6HH%<|Hl3x;>i;rWW;j>=DWB z(-}i0H2gGMbP7W31r%2R+|9M#iP(#d9huT5mBUilOldeW&I_ImR?+Rc7%_keb0Kx2 zJ_nSeD|dU?$0uzqf=~6MpH*Krh^iABZk#DbqB*qX;bT_XMHfIJ(bmZRCKZid$gN;@n@G!S)LylbyiVmj^IOfsoQt``r>*Kzq0cXFfgVS9l*N z#NSFUvk3=M)+uM@_#sa`igq3)ceEcd6p&?$E}KlC!$;*KS*xz>kwS5SEkFz2Pn+J! z$3!mRkb2YYSRnbyt2wNigz1TQHzszS`aRss3iJ<_Az43tnG z@3(OAqhQd?6s%f>@ybt=5_V1wz*BqR`{~h^f8sN=*h6dY;U=BI4PNVz4oab~dZkxrFoY0UaUm(463kZTdm5@ zrH9_Qoe_e(oKq`q6jY`J)qn4K_khs}ZihIW7<1?9wwOUBi+dDN0LCB9TY4hSkJM6l z3j=CWEu)ELi-3>5`^(cqO~hi_3Q>CzKv9!0^T3}rQgt3NaX4~`iu+h{{JS!pB1fBk z=%)ZJ)m>J3T@ApHM1N29Lt}JEE6`!dAvBFICN9AiA-<+A=)2A!AkUe;xOsJray5O@ zp$U@1%5HnYu|-{MTdPVb_1(nbO8stb7-+io?c0g+%WI%bG4X_phzw+WLGtlo$cPlW zy#)yFup~DBs+=CMY7aW;<{HbN0-7>Cfa(5VVUR-X@KqdSiTS!{r(_H!Fc=;I_+}<9 z5exCsx#m@*UQ6E0odliQwKNk-WU?Khab}x+~?nGazQLw!Wf3EXqkEYh8t`6iFVHy1HTaF}YEDBOU zM^ZqCimEMbn+YgIkDd{gC=+2=sN_kC`0P9@)bCkSZi#wlXR497P9-1@Ku|%w3G|BI zkNl7NSa;!@XTNsG3L}6PC3x`bT^^_X9ty%pqpMI>v^<7>L?Br(r(H?jjjMlv)d zFS^#5DUASoNR`?~h-Ksqb5cmjUWCPg@?l^Llxhz|d|4`gSBeQ8GFy3Fpp=*ZcXUMC zukKrPSm29p(wW?xZ`}qco5r3_`Y%{_A3eW!SWni`o}C?XxfPOnlQyC;*Wm!4J*AOw zd#OK>@oh}GD-MNM8+zlwKjx+=4yNJ5F$?+2!DTc0a{aSdK`Qs5E_ z>P`CHlCod{W_*d0gqFi@s@)odX0mj|Lyvd*dYi^s^j~NKcV0}J`I=ENWq?}d^!$*j ztJ8YPDxDAAyB^qFtfe=l7p$2$lobzNV`fD$>8sAl2}&2&_@apvFOx99`BriIXU@^0 zj?F66#zaD{{Lnt5?hW^F(~N8=`0PgWWD$Ws!^j2|$jtOoY)js$>R6FVWO)>v@IR?i zvF)oHk#yt+D&nMk)5`$6{uK80D9&m&ah{vCDPq;Z3arnz^Z)8>)Cm?Ps2vyH0Dz8C zL>bV2jm8hE+kk+uVgn$8>X)r(C-WZ1>Xwglf%_eI$ASS2&ZjmYKa7;u_zAm0H^460 zUK>DKGC@C2q(aM#+;y%H4(WF- zhDChsHHmLOQ!WT+@kkE>r~u+UC;;6lqK}A6+6}VC-~;}k@J{H{CRge%00I+}=SNUjT4H*^#=(F=uKBILU>?{YWiT>wTE)3_IK z_?;|ToN#mhZi6S_m-SJ6*L@A-C{tK+5%bjn3~y22LqI^U}d#vD}C zi&Vx~)^b@c%|kA%3svaZ>FX&C5mjQ5d`z1_wM!024_ zoz$kHsjIBGT}^EqIENWhwQ zsPL+D`{cSzUbm=N(ZB5x&CN(KRV=@tBM$%Z=1e#qeZ)aw`) zgL{qUF)4gRJI&WX0t`mV)oDBjpZFw+vRA5Ej6_`kotP!btV6ucfe0gMs%G-C@zz=q z%`c$b61FzVVoU2PWUG%KNd;g#Ti> z!Vo-bCy*ne;F?7r>bhBoQ(x;cU1>Cp@gj`GfbG*nBh58!D<>+IMGRL>jatZ){R00aVM z&k{lx)*L9*(;+1Xh33PQ*nm16XroWJYp*Mqb4{R$?t{<@ZvQUT|7xNEsBSxc=?MD- zP%F$=wev6csYS=gWi$Cpc%Ii?g*WDEp^T2Qh!q#|oB`e{Y~j*pJPL%Q)>XYm(d)k5 z7n@b$I1M1`9}&Wy6!V&|w?Cs&-Ou7SYb6f`Z9a2`Rn`qVtXNl0!whp^pfb@Fnm-wu zG9!@V@^I?CUo{da6RM9cx_!H+-gxs}V91EXIsbNLoyHemQxN&-E>HVtJ0K`f-y8TL-Hiuu8x9_tWXpcA*soDX!V2#eV0?mZ zgWpR_!bgwP=Bls6-o(FW+GS=35(Qww5?v-C*j|1o&3WBr%6>MQsjBXb* zJ8vd7n>&41g7lW-O*b70dBe;$r^(+K3%f!_|18)-s<2O|?^>nN@%mkA@+b<;M0RZiqD2W zou=xqYt(Qv=PNku{UqJ5p|Xh3osnCH`p3{-L;Qdt7+z&r0Zy* z)IpE&X9iyBU(zE>#vq`z1|{>JtS@@?l8Y@d>1z+lDG9HU{tY7<3cZ0(Um{cXd5hE$ znKCd)OcK+PDDysNsxppLaq{%WNsRbbAIwzGK_X;L1f?|4E%K+CE`2L)6pkI`21sv& z=4tuLai)IBveV@N*|K(G3849_UOsj2YiQ!pK2OR}PDZFyJsRUsWHr`)G;?J9lbz=_ zp>uGa{&)9+)Lvuit-!|#SjLoLu~PgozeNop5mV&4R=h4R z8_iV~y^(2@Qdb+Yan{OtByNB>t7fcMnr9I%;nMM^J0P&*Y(00MONx)+Wyjv9XK_ajbiQ;Hr&O`@I!+vv!jv=tG zTW$JK7yyMeH8sR0;gPFF?uQjFRuQbM-2GVsKN%{4SePxFQC=cspiq^4NC5eD8Zv9S z2>X*jE|rjNA>p$^Wh!&V`((^lrdI<~KA!JbFd9;2GXYGOOEUpcJh1aN$Z&jCQxw4 zKG*oj*Lsq?h<6iVxNJ3UHJT@515i=*@%96P6cXWp3r;~gb5C}wd=p}Ra9$vIn4tb| ztJdJTN~p*i|5Zj1+RdU>LoZ`VmcA&L=a1XPj+H5NyT||^+p4|($LqVKwG3cvo$`L& zcPx#}04gSMEerffaX*Af%Q2)u6;d2en@UM|HOnCU8kjFFkUNI*YRh>bG)C|C^*V+S01gEd_FIRyo^YOJ7U?-THQups?Bqtng zqsItcXUeP6tLK^*m@%Em>PsU1Q&0Sd8c z93z%^eLA;m(a5gn?f}4YT3@UASkyDD0D?OhP1^I|pU;^u0d87w5i?o1RvuofJQ)N= z*#Dbb{sY2nU;wm~RlUjF|MOx0gmCii<33l`ib$1B`?EIlzwZ5iclZmC5R*bHO#T@y~dig`5MJb1XZQ`Gr%1gd#7mmoU|9Q^-mSpW1~46HRGAQ%1s zBs(ozPzYpeyf_+&VcCGZ*tIfn3n*nWBWOcr_l$N~+y4KdWTyWNCxPB_5C}o;*h=vQ zU!FW!YW3#hto-yk7!8nnNBx}Z0Mbx^?lv_1X70>|1dnl)8X%=OS7 z(=n7M^XAUR*c$+cSh(&b#s=>B{xgLKSp@Dj*sOF#G7miV+SGE4`AH+XTR$-fK_gv# z=L}t5L%&nWe&lBizlAcQMwgdS6Iv_9<09_1NB+)uy`jSIdIBQ5@ z>GN63QhEoYat*NzINPy@ z8hwkv=i$V|m&v2Som@dgqjclBLdE|`d#?XyRdNgBzfmPG8xvy!rGQ-+QgFe^@(fv(b^=q2NU0S3s8OxgZ^2|(4RBNedQxpS8UIgSs%3I5q6Ab#$xGwX zb14jPzTH}zH0ADLn2lReqF?jz_FY}ue0HWPNFF>PS>IDH*$4?=Ey*5n$ zN|X*u*A8zNgVQ{Wl5R*KvQ^G=#vwJfqi_2jYO!x@z1ZgKdJG_#Ml{8ExYwzk4*D6rtV|N9}AnA19qd!EvfgkdZig!_?_k4VLgIw}t!N`ABw!$y1tD3a=So3s3m-uJo;pOG1UBtXSjxXW|48EnD5e+z!| zwve8eTO|u;q5&s%3+Mbal{MXzHo3uPH6Q$dwYWn-3&=5`6{hLfK1zD`R} z{Pif#A&@{0cnV&)Pjh%2D`7oYw*LTaEYP22nB^aXHabq~IX47W&VVuq3(@@6UrGL8 z>&B9y08nfhC(_L^Qhbnr#mZrv{Si4{OqaoH9o4cD#aR$fJS<0y`CBlov&zX8nWC2Q zD&^>zIpNCcr*HS`?l|q{2BR)Eg#3$4np|uEp;^<+e*3Y;@xeEIA%Df>T;mIlurz~d zwW5b0fDRh00Czf^Ex1Yr?g9!+0U}n7`kpo2SNo{^=^yoPqK2AB>gCyOd?UI!d!(T6i3oyOpJ|bo%J|g#Jh0(u9qyQ}qV{jAobXR6QHqw%7U*Na1H0D_YPNK)#wuo?2=K zZeEEBvzt0=$d3HQH;l0YQ28;t=mrN+SPaOQpx?s%NyvqKtaIQL4dni{0{4kAtZG?- z5D0YA<#Un-&d^@CU$u7|np!&<1o7HquSy>ID73yAlK_v&q*K(z|4{e$i9G22BZ^LPi&Xvre7WCp>mMy!__z$*r`d{st>Mp!z7r1wmj1a07H@s8gAYE&Dx{RfTcn8W-{Cg z@n@rPQ7i%YBC7;}MyjR2iYv(G1NQQwn6p$K)D4{+2dJM4fWbmuPUDxr{;{HlC7`9x zU-^P$PUbeXRRFLEj>#PT6-c&btCvtn`spkMA=?!|Qdr#+ERxp!(7+YS(hsaS6R5D- zo+#0Dq7pk9m8)uc%@mK_sq{{4uld`e_l%js99K_*bkwQD+3dIQ=;&_>n{7rj0u;5% zE$sVP#a8KNK2JC-lGtckoHRWKIsx7Nf(pFoK*!F(Byq+9)X~St8#hh7j}Nx0M~nLAVbh$SaG&-^q?R5{TqBuIS9S*5SH#J#%r!k zHRHEUMM%6+Dr#$w)Xcfr9ZO{kXox`qeXpoMMRd9pRx!jRX6a9~CNrY~xdA>M2`%P% z^CY(8=pzA1F^@t?Ovg&sl+2=pZ`CA%k-uGy(Gl(Wvkn!0V3^?_D`j*{OUQkKV2(c{ zOG5K2Y_eoJy^M8C2^aUu@?ZaOCN{0f=ZM@!*Z|9aK56%99RO0KgTjWMOBcz*E}~r@ zL*BGYV5N`~f6gj%9EhtscSs1j=o0+#P$fKi7(>l^;ymjZYptK-&GY~dWHEbs$kiB` zPKlO7p?bFwoY+jr4d3bBcYyUo;rz*Z)aVkT>1A5zYT2+1u64w%^Ho1mu64xy)a3>N zqJOK1^GK#U-#%Ssr>RPT+LvVC(RNr%NvS^S%A1<+j~Flk>?8({|G`#tJC>cbuSit$ z=n*2EP=}oTw~lzI_MbXpgPQ#ffz?@|-=xyWkLA58-Zb}cgTDTOE@Q_k{TljE z(=~^ww1r=?G^_;`7mM-%1J|z|y#v9XgvL{@w}aSgbEu~K4f5-1$( zZ+4^v6E=vjXWSP*`22PH7IdRD0Ik$x;cT1N$#OHVn;NNV^Ow#zg@wW$7T-o6_O?C2 z?rJ7YCIl^Yv6`IecN2FPJ$BMSIa>^V@+{c+2v{~@%xrUlq?iZEeG_xJ92!So9T>&Q zU2KS;tolH9???C3N6*MI&^l40!`Wg~Rpc{b>ideZTqEMgPqmZiPkA&SvSzuxKE+|) zm!qUD*dMwlIQw}AXqg1noy+v9Bhm|=rU^$Lxegx!>>XPmFUEv#M5C-{w;r$L__O-0 zkD2rPa1qb-_YW8qQ`ppxp?9c%+Yb!EnL>`-2$aL>NkqYv5B_97j*MF8;n+YbX)^L0 z5^(OYYiKcu5lbXgtnkTVFmicONc4rC$X~Um>fMaH-WZ46t*SGh{yae55Ek8^i#lPQ z0FYx~L8R;eSY`ftosW$Sr}rU1@xeS_M?t-c}bm}@4Lk<>VL?HS;mv`aEms_ripZL`XB!Q zgOC+tg5>T6C-toch*i~ktP22jiVm!IQ?Cxo?zz)~KSPQ&{3dihc0PV3)lR>*(e^;$ z+!~Lr1?U#5wyk|FtY?BZ(u`t?V-CIphVx_Wt(!ZI1_jzJEOM z5OB@C)_ui!o#(mA?P6KwzK|&O$Cg={7?>BiKxI?e$d0z_-HtjJYjw)%d#;mu!5Klh zO-DN>Oi^%M-t~{PmXCi1DF*D z)BJA6O2WYU%O#Nf8d#(YNk$wC!{vUFeOxsqUn+iJmf(w{qfg^?+lXa}c`CTfAMq)e zDFrVkT-EgL2*F|!?Yqufo3gdUfG!xt&|T-=@FlZHr);?6^#cWw4o99-LtF0Q;o`uk zir4OP1ELBkE4lUo=4@P#eKAvU^Vz2zwpxW)ek{R=rPjx2s#4kXg!vg}Ie#c<4exW& z8r0=!2381u>nd9Y67I#cvhs&+vzLzn2Nfo2zJ3E&wd&VmfrgsTgTiNQV6l8D1aljg z2OwAecg_6wm&q5&I;&ayN`zY*&Z!AD;GK0w1x=&QE5f+3vu$X z{XZs_p!hDe&=FVD35pcR!LxfXgoXQaJYyG>4Lj#A0Ne*E4aw`!j4KmLq+(L_d{ix* zH(SL#CMpjaa1<#kU{~xhQnvh(^p7k1EVNv^)&}Zz;i~Nk(}| zDIMdsD2eK$T;a2~89wB_RVFtLgTKbe);Af6hL21GA85U5e59F3zU&iLTDA>?+FCAI zAL6~)zpzj{21~xQmW-%tjI5HXx4S>&?xCW%>AsTWwsph@y~$hPjYeo_9q5`h#n!k@ zjhH)fC;wERGx}ACu_?+8y}W#+@~uisJzr(ixta&+qc+a^nb=6Zq|GPEwkIjqEgnm# z^PsUcJ_n6>6dw!U{vp5Az?1t7BpN*Y72oW%gq6PQD5sqbXZgJuP>WdoRshi4>!)99 zmY5gDjdN5M(ovpi+Rx;Dw!8Jy=h<gi0$dGv=|$z88Z&d0_SFsUolXLPJ+K| z*k4|bO&@KrnY8#uceU9r<`7LnTV%qfIiw90W_Cg0D+b4PxwG~@T*to6Z z$3s_>5wVbzgL%go3qJS=lV(jIG^^3T-Hq zJOfEu;*M@A6GzKP(Q0H&%)zA97jsZl@Pi2MMcImK_v4w?Regu;ABiqo5!8EcUysPy zAZI~a*t9QIF!rHMuwkX-9*K{X<5>B#w}Q|5Dl|$08d0hHsHC7RX1{}7jJSfY@U8T5 z;BQkaIc$;X%11@cmu)A-_!@3%R{YMSJYF%|;~y;XZYyT$>*Cw|-i#v}=RF>IaR3L7 zpWnm|2Bcg8-nW-F8X<SfUg-hikGEaR9kqALqm+6)6J!2^k2!350GRWl%g8#MQ0GD=qeS(%OXt&= zrf;nh&)psat5cPWRgm~E@t1#Yj=eqdSe<>PK5YeO|TS8j`cRh(4hYI2uWOZ6`nZd&VchMLa%EPjjHL8}?Ar!Z;TnN|(a z$~4bCmd$#^=-R@VLl}_=`qivqQIAJrL^m+Nm25^d4DTW{b9nNg zB>nNbB<491y^0DTi@x&LL$@|qB*#7qB*9sF!#mAKWUt%)Mw`=%VXf)Ai}MP+B;{qR z0B#lHrZW4rJ#Iu?X6Nc-Ukr2wPo2JzDuT*1p^E`M1+UD5H<`dzi~l09jGrB^jtL}L zP9nsGpT3Oix*pmwg)L6v9l5MBfl|A7d+#5n!GY{oN?6|itr2f~p zLF&z?{CaN>T!q%V3H02SBk__R&f#`mv2~DtZXE`xikD$S*f4-+LR!)a3YpQuGMtYO z&U5&uB})NLl=?pSFKV%AiNX6zbKZuVee#}dA9cln0rdXr1MA@4a;yLN%Z;%70Q$loA1Z&B7rvD7&J<*+8{Hn(glu8&bi4q6OSI|1 zvH1_<=eBj?)@-HB90>Zju3PA_sFv*4F>5K`KR)bdo^nC_JP`K7IEd#f%Rw%G^QFu0 z{Z#Z?p16J(h@)OO;5i$fR<|Et?$S4V9;tD$*BdJBxi(|;DT3is6raqosoy~@m;lJ; zG?vNt=IeBpz5gmY*Joq@#0{s5M;LqY2R6a#BJ0D=xq)&8_839wC&u*vs5@||KD*+I zMJ>?mJz?zR*G4||FS@Ye&&I&7ZaGx50EkSTIK^5|%dPiEdqTwqc0=7s_Y4x~6fb zZ}(rP)Aj_O@h|#sR8>-&Fm%jEM@h{iyUr92=&}s6XoQ`GnZEwL(UemS#Z8eA}hW zh~f*qv8~(l?HY81c8Fn{j@EaR6w;xDj9>YygzOd^J(V-Co$D&sZ)QCNHWt(wj-zRg zAM$V3(pBGlNeN_e@5P+1{F|3IDJpegy#SYQ$=m@37zgfmsd=GEJ+TDF~`gv~*2=SVZTB*sHXl0J-`J_#J}F za%m!%Ss_f2`c#04<~5W5&;Z1pvv_Mz2%CLh;R!do#dXu?{EtVczb-ZkI0`5b<@ z+q<9PN*Q`Q!JQ7j^jVFuC0?w>b2Kd9PXMsDm%Sj#ok{O^sB9X53G23fWCqLoFc!I| z)Ja(1&1~TNs7BUkMg2O$S$qrKAbSRlQGIHL?KqH7|dpR|qAD_rml%2+geih4d?h#?MHa>G1nGqGj=P;O8@H7of0Ue`leR2qf z(ROYjgB@f)A%qk(dObS+ud3(UO1SvQK6j0UcJ$NwP5dAwP9sM2@}D}7sYoPLCcs_*a<_>1W)Fs8Zv zFCoY}VwM$;&VHhMs*W%7skBZkrM=3+@ckowBa+*V9bwWQ`u#4f>@OGR7jr7Yd&p_2 z)_(wSLT$5MXj5CWMkd7*P@zYwT>qR+@J5??0adY3F>1jK7`ZdHR)di#5BsoL289DJ zSKXULdV~=yNJ`Js@crxPNZS_YU|t1y@EbqrUBG@yWFcaB4U3o@NG{f$R#?z?F2Jw$ z$E%6}`#Er{-lEoYMd>g7KRhJ*87%dSQjZyZSW0I3HlIxiuaUQcTeWnj*upZ1-GA z4*BX^G>q$W|BhHGBj^dpNG6v5ZjR=|??Gd<^5@1#9=x5T1G>8R_Q^6U3D-LVb4|GS zIP=^FkkC7TAbjC==}hs&+goPg)F%|ZVwGuG|BKywwLI1b;!4~=?0dhbv=`i_I!6=v zt3bi9FLWOwaSZMH_U_z?mx*+;jRF>xi}Qyr-iRoQO=E~;m3VtV#k1zcvfVviO?diUHGuYZSz=exs4xEfW`NVbLp0Y-89`*S8 zNI4NoQszv)^J6x`*=5`MjR3%(0090awy5IT7WdE)hwE1RTeL@Tc+i#>>xfYHfvmto zps1qDX8)XhPJ8G;A`EUgLP4@48O9d;QPXk1FStdjw{Wb$5Qp}HJbP2vZ`dOAr&zE; z5kUc3P7M|9+Z+o$)snSLpL*@%E#W8S(tO(Jn*(v5RJ3~aVfme6@hzD0-(3=OH_Hg-!^16n$}e@mC(82-(32=E z_!_7t6U^-u9^C%}ip75POko=b;;k`|%`v~fMS{ZAR4j}4T zbAH?!{mt7oVs~{V8btFq-YyR$K|sIEr@H$Mb?1XhLR#PEyna15+9b=fRcsN^C;MWZ zY7%tPWoMOoidgk>-X=UG>msnn8b>VOZFA$=dOcTu2}O1iY`eC%ssa|*Ms92^+E6p;-`r}~V}%ry9d74n zzkj%Krnk_3Q=m9K1Zc50s|iK96^H0wSRaabNKd=BKABH_YrzWaq3+l*%|_12U%EAg z@tlv2$iibaP!3z#=x(71+ZAlpCYl|eOWmP7XE8S4UgxrP`?hGUz{ z=F@&b`hm*LCq*v!mRmvM_&ieMW-ciX@+!MWQ*-Hf+kw`#uualdQEtI&-0T+#KN-<5 z;P@g=E2)UgNM6pio0oYuaAkb6BPKnRH&R)n5PA`3?Ug;W-FRWU()qy_{`-$s$C!Bm zly`dVauO2-*#s)Ogfa2qpH9j#gr-YlIJcVqE&MNuYC^0W&&?Y@m_8HO!ga+?RgGkstW-3H3& z(t7%8u06%5gUOTkz!WR0*JEUH(^0>=g0g!0N~)n)O_ghb#zQ?kckLN2kNQ@hks)SG zF&m5qAc&eBerbC#azDW^7}Yh}ZusMHHkuY|!?VxcE_Ka!K+n*Ix9eeN;4(hNzN9^k zJs4$UVIQ&?9YSc645-4qye-mq9yA&lEPZx$xY-{-zeRS0eOpscMgJFSoa~L*a+Yic zg#sgOOIpNJP(57#WmXt3uwCVdkP;4gdNh`8YQEAIVd|JSnu8xBz66i#-&i5z_L z9UP1rDfa<_<44Mw_nwsg8Ca3^$NT_g%sFIeR2cPWA;aKoq+&E#EBfuBXA^&-14@&F z|EkuW+w}k4{QfrpfjqM~+WC$}m=pLn`fcv#z^+=BN*h#ki0ei^=U)M1+6Orm2KT549Efc%X&BEYY zq0^odI-Q?i9!`F}|NVoA$RBiytTNJi?EIR?X#L3*4-37U*3Rw1^beMDF3$!!Y;>P* zUF*(%YqX|4xTGOf%AEoZ4JRHv*h6%H`QDCyY;lK4Gw;O`lN^=avv;RI@`y+%uaaFn zwu^6-zDGm0es~uPV7~W`K$ge)o?zg#nq1$w~R=Kmqc^_O6qN_KJe|d4|M<@OCpz*37$%T5v-b6@M$nt9#4Ue9@Yh8uw zBVN#EJ*)1TC_?X zOh9H^c8Ff|tBQ7~!p?i~h@CA4IL_^!>v=FdWb?*wULYB6zLMt?+aJAX1p_ zXF2tRcCW#p1a%blspUBQT4NI$MZZwQF#p`qHyuQ}#b_3t}M!UwY z_Y@lkhq9Jd1lKF7)xPKS|?La4Y&!Mz|r--k}LyDP6sK+ ztD*LE6$|K(WbE(OKXPUE>seS^w_+st}~gL^S=)C7}v@Gb+b`a2HLqkNnvTFq9hOMC|0}vA{o#gi7j=LH><^ z?Bn4rpvzRWwSD`5UhyorQZ9X^%Ub}XkaR_fFVaff$(knL3+gygnLRl)=%!BHeXa)E zju?D*u_7pT(v>2??n+pjnEaJS56bUt9R`c@cWj&B1b*l>Q7x8(q@h)0#|d(v}Q!HRsPX`p*_C zn%*ORf%^IybfUM;AllS#xC(Z^nuOeb9weSUq2aNdVvxA=wdy%jS(9wgalSN|K-S#p z=;&y|uc-M}V@huJhxAAjVLvK-XU>%NSB~bc2co*|7cC4ufb<~-_*=871kS&e6Cs6Ga@}>9q4UmmOlEAKaM-$(f z8#`OO?1+{#>K!pfuy_sniT?*3fp$pnft(r zTm)<34gM2+hC1N$%t^zobJn9G%V$`A6{w)BAfzfTXFNHP?03KuZGTx?n3${x4?%hI zp&jn~Lnia@9|B~0oC{cGuB0EZd_d0D8qEmq7t9cDh24#cZKJ__Mr5MdwAQS&OHoPb z+$?Db#uDhr`nEke_Bj{;7Yyj)Ww##gmprAP*^}apJY$77MkOpon z5);!1gM&#dp6R@E8rS%iMr?Br`?83FMA$nI?7N$T-7=+t2UPRv6kB0lWHVG%KA97e z?O>BU!t^W)T{e;{!%TN5RY|{K9h42Tl>wypCZ6o8sP@azN$#f$+eN~z`n_|de66K8 z;z$Q6r$M)#=VRmhDdo8qE^(s!_pJgvbi8IY#vp8?)#1oI zMtKqJ!P8=WVdQ?C?Lb++>-^B*D3#*TPp2JtC_A%_dT!~bWKvq+s|Dil zRH<@6A#TEhHymh^Vli(#kZ<=jb90A)B4`b=U+pCc`cX9Fv0%35>!Dhd{z@pKA z27)0+SEha}lEs1PI_*BF&X$Bi4;imjuJ=ENh)OO(n`Lx*LMkF6BJJ9He~yXa(zida zE(u%EDEB)hMw4 z4smlq_(_7OeV-x(9o52S-E&~7ac-%)(&@W@6_{G5_RH;V3*_0tm^1mmJs!l*?mu*LxNkm7@TL^}?H3HoPAwj*3c-jPrzswz z1>YS=cMSl-Hyx*8SB^Sb+@^bMdAsij<<6DLJ$JvLXAqH?=umPc&%!lg15&zh22^^{bv}LB6oNuR7LdVST~GKVU{+Ig zeyG?kHZ46ppels|E{xbp2)+pJ=k0mdIXH^L<+(E!&ghcHS_ z?e@cH9%0Ke(x^om>Fy&Y32~+Na(~pgq{YoYeEs8@;3qHbnu1|?0V;7FxQqj*)R92>} zHmmX8_==)Pe0KJ_>^05iT@>^ms2_PU%YX?@8o0ZqI*v|1A+qbvT9~$dc=%MBMPm%d zJPgF5puAYmDTRXj!kroGX7I=31|9r@Ne3~7?A`V657T7>$T_flVaaI1wpO;Gh>H&x ziWivIQ@UgkqPes$F?x(1YZIFhfrRhpqC|iQ|LkI1^ES>5QotB^Uq#W0*gng8H(oea zTMaIbJ*GZ+hwp32d8) z3>h6sazAC%8O;yJPn1gg1AM3k$n#N>8L01Qehn@eiTf}XL*jl{+ zSgajtSkdMjAui=;y?7DEc{PihYx824aF=RG6~8e*f@&2p(&4!r!mtn>{K=2vxRZnZ zwSJ_f*#bJ?8m%oBF_ZG@_4cGiV*-7p+VUAMxW1;9sD9Og16nCh-pTP@bbyQ`sf>!r zJ`hhgM{(1+Ed}uvTK8%+nVtcd$_Jgxk*})>j{PM~B&V$djhJO_+(;$6bOz!;ZphLw z{LoVN)uXf0MB_e#AtF~~OPvm=R=C}F_RLMmyaM&MEGRU7mNl^K95wFg`vp-dCMR_2?u`?* z=l=YJW@*~R)3buts6DEKh1_66tP9+xi3f>T z&Q8Y9fI=dajgwO)QPSh<*w?SB1{mLJa266veNP_eIvoHRCw@c`-;=I#LP<@nNz(-< z=~%T8XxCd}-%p3CB=X}+G0D7|?`SwX4E~O!x33l}&Gcl0uXo%*qz%5U% zM$8KhEUbzA>VJQ4FY#C9;}sR3zUALkAeK?w#V&F=yS9xS!bi6a2e1EeOyp6C9V|d&j2^ zGoiQgCs4b{MbhT`4zNAS;>=diyaoX*)ktEZgc=M7B7pOIdBH(Ac*i2mI1w-ih6kJ!;~muzjBnotVQdwirGm4l^`f zgnJh|p?Q=!jG6qk@Z%kq%6w0{iX0m6+|!payNIwyANlX`Bhi#jSK39$BKe^Ujr!eF z=W#nfGFS&S2|RWpZZ+1O0U_q2x$uNPP1m(K?q(gS%+ky<)K_dMcYN;9N!+D@XJ>jj z#P{@W*0B%vDfOOmLI`CP|jGGo|6Q6n&wM)v?ZVv<#ee-6+-w3{mVVpa`gMQL}4Erf3v~URQ zam@$gV#0N8eyG~lBV4ll1u@xSri;9Q?v#WI0obKgFr zu~!wnUsA5--*^>5>M*f(Mog*H@0S)zY>ix3RLs`_i*Z6@N>HZ0s94Xfs%?Dh_VoNz zteG$1)gf0YcLLoXarwQ5y%|M!z13}cFc13kGk}N1a_hcbKYEx^^31{GykWYTdK-%~ zGO%Uo07|WPR?#F0m|biuogU=4C+0ZB3tFGmXm`c|D1LspSly?DWkq};J$dnpWv-;gf5MpV>c;0&Oe4J&B{h3J%!K@Ml)#uA4?!|h)WQO{<; z2VMF&pW!GEelp2J~MejNhD7nRzxI_;0$SF-hU6R8DE z2Xdd0UPX)`Xz&gXl})D~+KO>*nBrexF~B4KIklFF59*vB*9u9xc)1LXD#}pU1sjXJ*3O7}nHn(7JAk7YrhM?U!UYh~*3 zS?R^p(u>{-gI0|+dUBw=@VWfqieE;7r0lBC&dSsP$tal>y#BK#q44KGLs`nQS@<_- zYIjfW%FFV)JYR!Z&0IeUG_E5_HIvC_IUM2(XN`nBYnU{>7eIYTM*Lu6PU!+C+0{+Y1ZeVG?~shb6%my8D7PrPs|L?rnd6r}~8 zE4CPKul7<$GbD;hx#73K$6>1^(djr`DcGy$5L%7v#eLuMEzS*J#~V*AEG@2mJZ}o3 zr-uW;CavMc4^c2mUKJD+^!8xb;q5$n5b5#XU7P_#{?-stPxL<9&etpzI%TiGm#Yzk zN8d};q+v_b0jw^0%Vnoe)cUyTU7BMw+&t7TV1#AuiKdvLpQ#}7Q^(m!;4C+Re|)`R zT690mkDr>ENZnR{FlF@V!bYh@TU^O4Z*FGrs7%DK<6_Xt%E~&h*~B)| zemShk*d%EF9`hIGD&3b!^qhK=tjqE*EZ6br>fE56UTy2xO6GQjR^XuJFqHR;z@5bT z5QcnC;oSo*Sbl~_>~pIAPl?oKeZjj(=xMJd)M zS34tQB5nTH_m6TkON~8UB(8$m9pFf6ULV0;GY!8*G?U`nwSA?V5}dMbA2js&zm>aW ze}BR=Z?KV-ul>M5ub4buehM|% z=mW|B6<4t)=irbu=OV%*TKWn+r6REHc+b0;OZC;p#%8tq*hW!HZZKr`dT;d1r%Y16 ziFI2u;mNl|ent$?#cKmlV4gFrOi^*;z8c+wpF=d* z0W>m9KiOa5_CToEzF%(+91$XE%IF?gdS=g8>5JDwV`$wkxB7HIX^@6*|k9};epq@ZlQwpR@jNDLroaW}`&cXSW>@DKn2 zXjVy_-V{0h<*`1>2-P`X3S-!Im?U-x!GZ3Rm>H8IAoVZ9fxk|X&vx3GMg4BCUchXZ3gV3|7V2`8Z4X? zN;RK}+Q-2iIH9ST)W}@!Ef3`b-1fvObw#y5N9jU`_bItkFVoW4xUS|UlhL(#tC5kB zacG1N)}ZMgEP^G5HVnN}6}*-7#jngSFS~BQlLfSpug0#K_}{_qJI+EMRf%lU*Nq~;H_LQ^{=6sI@)oEa38scM@oW?lMj=Te0?Z{8(ib1I>lx_X~P`0Bgo&Vt9L zc$p?|PG|5O{t8*7rz+$je>%phg|YA!W?uH4-){u_g&&Cn+>xsX=qe>2eG?7YhlB$? z?;hTn?b|3p=lR^(Jhbu@VCYCdyNn=ePwF+1=z>ee2|*v6YtOXlbfswAN7YR{S&u*^ zF8lyn-ION(3Q{m;;jDAZ@%X%+^&R?5=0p+lj#k_YhQ~S>|xBE z@_A-fChDv(!hn2V2h(EXIc7_VhgShbd`tlNM+G3c$u%gTo5+bO_64X_w7)~HQdXCP z!McJ;@ecs?#CSA-BcZ1p%YUj!`F*@&jm>Ixsl5cMy4$@ZI(}q^Xm5d08%re)j`gE} zg+f1)@7wsgrmLFA|GAm=yLznb77>}~t#8cW5c9QI0ubt_z3GS9#9`bxk>+r%z5XXC z_@B+Z%ch7Ewqb?xL!?J9*OX8Dl`2^l|9>L-{@mMfnuV5Xtxwytw&(r`f^+>(N+<1!)A3w>z6l!p$#8OEB{{ zFt2kNtEi!_F1mq56RIa3yb(I4c$6N#{mDJ`DYz`C^SosH-=m^>qcW$IuSqDZJ5+9t zC-50c_Z3|Q#m`RKk|0iJy$*gPNF_O8v`I@#Ti}STc{gQQNlafiEZRF$?AuD=^87mS z-VX~MM!mRL)-dMdUs^yO@a}v2d<1D2!$t3_Aij9`uJOgr5#TmNBdRYKZhLQUd4MG1 z>BJ}Woi`du7qv3fPZfq%*M!$tHql|Y;dYKNK(*qkz|;N8ao(%L?g`TV-wv>~${1AM z$yQC2>=nBRQ)0?fSSV6^GkBc{(!P6#*@bY~lJBA{yZSI!-p@pGqtS1}84RZ_vs zddMk>-!oT>Ds}k_^mf>q>LS~&2J-}nYsdhFiuqdOgn7RD&kNd+$X zVEp_heNVG}nOr~n!-;?9g3pD=*AD75ZN2H~Cwq};0Ql)xG{BJM3DVZ<55celTEBKc zzO^sS=lg8lDdhHFO@~OzQO69a=x2rR8iL}Rd3g>O*O=YB{^A?fOx)K~!ib;+DBOp2 z5B%nLh60F1O5i-`ZE%6({{AB|a6<=fQG5r&0`qYaXBx#YlZS&bch)W(o2;_xEwE_% zlvkrP7c;=&UpxR_PMnBgjS-F6Pz1Y*Im}{eT)cjHk+bEsP)`XtZQbC4QDni=c#C5R zrPDNexP-Js6=@z}47Vyg;Q}El^*vkMKn;qHH~IYmc9obzZ>PVm!vt%rd^}Nz=Y;qY z5@2YW^Ox36gd`Pizt()|Uy*#L;_ZD7F;p%lNkz&RXKcFdYwZ(%fGv;G`=8OtPZiSg z#AE|8Q_T*n(6>ze%(e<>Pak*F^~;Kg!GMK!npV1U#It7;`oftw!wm4H(8{`c4s&60 za2c zT(x;T2`*NhSOU0x!{Ih=*+$5>f-k_Reg2VyS&C!Ki8EK;>C5Y%XdUm$X95OR{gD+s z7Ys%wY)@8{R;z!J(6+REb*s1FGf9ed-hCtJr?Q(~{Pb9H>2^QJRyVgcy|PAia3rG} zVy#n1q(e#@_>XfL7QL=Fh4}*rkm?N{>@*|4A&UT0&n7G$TnL9!PlznL@%ywMDU6X~ z;h0={?H2bq@Ls?C9f-7FV@T=bllyHZtnL6LA)C4a!vgCPRO=qfanS?4T|Gz{f1H9m zkLSh66vnElNzpjq(iwd4oYdj0ZlL@ z0d03WAL7X%B}Daoi1Z-J(YJF4Xm!|`nmKIPnPElT^CzTG6&P2I)rFs4gdkt5*>dw` z=KAL^;;jdFK*E10Az(ZmAMVL+h5}Itpe%T{X@`&V`_UfNK*0D8>o)xzmhhVmlFADY zEy~Y^@t^bd?|=2XO9^0n;-#RPe}3)$D#DIhAYl9<)ukPB6_DG~wWg$`(on-KFpIvY-rI{NL zFrN0=&s~A>oCp|iQ#8S|n{{X&hiz$iCmgz)qa;ZN&rai|g4wRtQGm>sNMCvE<|zH& cInuzS?&G$Lb$xe45Gd7qloSB4kiF*rKQbp?g#Z8m literal 0 HcmV?d00001 diff --git a/images/decrypted-key.png b/images/decrypted-key.png new file mode 100644 index 0000000000000000000000000000000000000000..354e51976b60776963046a8172ebe9f68c167287 GIT binary patch literal 56875 zcmaHT1y~%-vNjf676|SR!6DdUSs=It2<{q!1z6lIKyW9)gCJ%f%4{C$P_ zM+X4``>n0Cw7P<{G_AUeleMkA6#{~MWQq=&u4W%`wn1Wi{0LH>JVq-+t0G3;OHe$n zpcH{TD=#w&k&m9%yFL03L`Fofpqzm-AgsEVRTn>lKYZtce`bB=B!$$p&%PwOB;;}L zvpE>hpVfGQi}0z{Fp`mG5-InEA*)IRwpCG~4UfVw0wO7*N-o|T!))cw4{>pb>ZmvE z12-86uTG~ki3}eoA1Xh0k@R{Z&|1(9tqyoT0SO@nR&FU2gdu>4ya)Qi2%co)R8>4h zML&A>Wa!mu7G`E)w;Y;%BEbyE1o1^o|AwL~!bk(&*&w|!?)vB@c2#LQHvw|)Hi|Py zt#?DZEMnnHuIXnaofr0KdrY7%&p@Xsk4%w(wPEtrEf?4K-}ovKUttmUF<$-o@?c|o zU;lJ{0L^cvLzYM}pWx|L7y05)25EVRRz!2RUX}9)ed#~!tL!_t2#Waq`H3m#CA@0C z-k%|3M;KlG`SvCvhAtMg)$^<5RB!e(I&Sy7+FVVUuuR4X99m=6_%N2Q_JT?*%q6~g zZnGMKN`;a=DY%!fFTGiZm8`#9E@3{QB$6z8#i6VimX1{QI)Rmm*c>Oq$kHov^jQY} zPbv4^+!(Fw+=wO2Rg@rMKCQkuA}b{Z07&khW&Sq>YC?bjQwODIn=LpJ%VJ3ZFoX+eTaqz8t*dmg- zn%=9=Z@IEH&`F9DX@*mu{$gQU>yC15WLQf%S{`_TZ5qPUf#Ndry+bA*OQziD%;->6 zgaEPO1*S_Nf^g~c5Pl6b+3v$n=pTO2fG`5>-x$L>N)Vnx?$YSWkKx$g(PX1gt=EHW zKqP^0;_(hPkgL0;7d1LGOYrZyL`ejxqlIV$e_pmv%W7ja*6ht#PfbVab$wX%}M{-66Cmlp@rVql9jOi9tZ2-aR;wJXRrDK<^0R zYq)dr8=oBttc*-T$Shs&D}1R)RnY)iHjpCRe=co`$q_^~*hA$Rf&fD5{2>oQOMC$) z#mgt@bmMxG^aIL+mK@0U4Z93=r-S($(JqQlhrc>rY;e*tM+16AAjLAZp*Ynt5e)SJ zLK95O82Ww$U%DH+N|qAeqniXnsxyI<5m7;oFM(1fx;J6FSF8YAFQ`nqj&`!Qve#^# z(S_PpdY?8fUUi-G7~`k+Ih{R;8R9# z{MMkl{K^q(Y*RQXGJj7duSs;wPct%ILFS*<=7qW<+F_ICF^3{1U2|1jy9}z`+roq% z@7aYh)qZ(hGWs&Nk(z`bbnhIFUkcpfFUABgjiCQRkqed#l9p#!2Qd>WqHl!mg-VC= zzvFfTEfPk`ppK@(kT1-^ylKKQ4e1R*4QVqn_6!nq=kfB4(uoXg@lWMe6EPK-3Tg`$ z3J42I3ve|mKQ(>&_^DYxRR8@aU55(&#yPIqwYNHx*`;R*wY^i80WOpu)v^_h6&Gb4 z8BLfy;%`{zo*F39GDRjTeU$!^JE1Y8zOT9XrL@$b`UgloC4 zxRXKsMX`nbUzAEjOH?LACp?~$|9(#_HIPd*mOAp)w)hR6Z7VqxhXf}U)x;uIwoo?f z*Xx++PnIfnDyf^Ezs-NU{6_wiCeU2dt1qZ;&sj00T&`H&rC(p;U9&ysIOja~WG<@K z!!~EyKTmqBY7}F7WoK}D_N%Mn76w(m!PqR6+K<|g;tso2I<3U6bYS%NBnXNBjQL_~rjgdMKn){=-GBJOS z-Vd?gyMjW3aeQeRPP|S62i4zdRrn}1D z+hChWv{+s0=x|T_PCHaw{DJ_?qWHa~N^u*Nh-Rr|O&;ZE4_dI@! z!$+ITPH4xi#IEG|sX7d;PSOXpnGG8&3Y#6r4rdxe4cCO^o~M(Zp5-(1XVEcs7kx|3 zr*zN2Z@nfsV==;ezHCC{PRT?p*0!FqUcdB@U!y@Hh_~e^RbKQuLIso?AM9pR#c~nQ0Md(YXcPKl3l9RsSY+C??9| z^YT0@vm-M_B&*ZZtnr&tH*q;(YhO(NLh=nAH~P%}IyS6&6jnLN%paBh&`~qSYIZ*dZ(aYSs1llUWL|3Vv)e5{pTC{w z-d|txa;=9sF15~HU|cBCyb)&&cys#=?s2npQRh=n ziL7n@C~eE+xA>7b-V#a6!HxQy-AwaI{y|Tw+LxT{3zd82Yr~_T_eyKiu*!=Ytm_*l zLpG0P9fS~^-$SU&d$=v*WvvQjFQ9Zt z%-BoO3hffLA1crxoE?(BeU@P5)4<+Xa>ytH+dBxbK|;W|ANEZ+zqoLK9Xx!;LG?ik zEK=y_FOiBk9Q-CCALK}SXcIys<0Wy&)kEWx8__{{JM)00`!l|FbLd+T;Cy_r(p9il zQ9*bHT%#kPAd(|I0j>~%LjsZFzprHxSrL%`x{ri_5N?Zr^3O7=!1?hL4;+tm{&7Z5 ze2;(zd?Nr3&s?PcDvbimMgFgAgc;x&0z^|;{xTDVwQIl8`af+}=*dIL8w-pT8^ zA|MbmJsyY(8jOcP`_r~sx=>veWw3>l1DBbllera_r^CC)b`Zoo!N8@171WH@)4|@+ z73?Wa|5phxaQ%3jo1XTsB2YVVdR-NDT4^U2D_TJ=9xfhw2~1jAS}_+(Yp{ll>_4jm z-^A(PK%wuz+}s`>9$X&$Tuv@F+`J+pBHTQD+POw2mZ1G$Kx3|KH$eU@`NEEyg*QpfoORm?q*@MxNDyE#66b};Y&en-Q;~n z_N=-kK8KqbgH9lEJSpO!tJMh@LxLokN5E=Fw zI{9;Cv~$vUA<`w`lXD{Kqq|c-J!g}!k!Et={#u?EgpPs~^y2?IDPti;p+JN<8|3o- z??R6aNYSDMt#xnHs!Up zg2&}_`+e>8aaz0Br{)+#YjGr+hs&PQo5hPZ!t4-lm!0x@ZJR7NZMV^vBr3uW@!?_x z;EiNWW=d|V%YBb_11i@+UP4ufFx9&b#7TX-^4H?0d3fc-dX@>vnbOg$2F4n%a>=rgxYwsHmONWe2;4UPJRm&A1h9`9{3%U zrW(5R!DB`DOWfxj>NOIB;EFi|r~&SBMH}3C9tfF_r3{cWM`(46&+jvLV3>-L+4gRk7aD_BGa?Tj~j^(M93MH#88F`}{owWdFU zp}P?bu_f9jerGkm&+7lU3^dft<+Y2#OY+C|FMyFQ)(xH9e9&q6JZGKZFh-Z{nr7sF zG;W&#{^3KZ#np1y32#`7RZ5HbOpUG4w$}7;f1@*TW2kN5Pz&dD@>2SF*>M9t>_9Hv zsce_1jnfeCt+b)J^&FmnM68J(v{ZXfmKwiSqSZ{>Mtie05#x70Tb%4biS>7}HkGC2 z;S0tcvuZt?DxEU+*@GKjH0d0y+}|Ap=+N9BhWp%9RlQ?CxS}&J!;Q>vY+}QgCp}IK z2c&BYI#cU7Fjq#kTiHJ6=R1P5 zEi!fM!yYqc;je+=&W0*UK3ol7MD*K8oO~o4@(@|}5;RiFSf6#7bs69+1?285=3vXg z$;ZI$#}ktEG~AYl?2DFSeYeTi6qO+@1uaqBZ4GJr7Bn}yCIke*=ws*_qhT#mdNx#& zT7TY0h+V_-#~Y_x_uVEnbFL?9{I0i)FCv<6JN+&e>c@OS895T{f&0Z@(IhW_v?|e+ zakZX~ElNv(t9Nek4(@#`ejRmaxS}BZlU)7W}EZm zgGezT;nO`>#)rYq-I>{Z=wLehc3N7b9bkUchBf#7FPcqi2l)oH*ee>$<0zX}Kd^t5 z#uX_*`$Px@aqF1)xg8j`1)&i#Muy(fJ&^(3UJVCS3;}Y0x#qu-qNAE^$X;Hf@$)Fl zeNG|mwddU~AX}||y;(nr4LJ5pyf#vZ+$es8?AMH|D$RSh)$pI=eMcY8G0c>~uSzN= zgPM4)9%<7*NuiNp42>Mv%y5#3gHr%07y=(V}o{FgqBz-l@!i8^lfvwO{?F z#%TOSZl`tNJ>5Je(0;qYoz$bvjXWPHwz-%fem;{QZ0SyysqZG!!`*&+3?Grkn{>S1 z&^zQB+^CB4vv+&AS(2oBAKkSx{^avPsma}2@N;GHL$P^BA$+K*%W5Rcc`vNecY}TM zsE1~0U=E{c%=L^Q)?r!vDlXubp|yJ0cavXS>~OAmziCIz_Gfb#!pjm-(cN!d4JTEE zf7iVo%F?EcC<_cUSH1ArVSjgTK`9jO#`Q!vo0^v*J%4a+hHa&<_kkQrs!!H-?3AJF zZ#baoZ05q!y@p(~^ED%H!1zeB!Bxw0( z@8S6_BTu$?os6yQ)i1SO&oAAl*4^b~5688x;5e1|pXSqCQWmbN+l!UcqRyJPYImJ~Q_BjoqwlpnYqDoJ~~Jfs)GObSQ&ej#zusFpIVP}sweJYw&^ zbG&M7eEONBPzlE1Ro7J0KOI1)MVF93$*tB?2iH#Xj^CQJZja41c>ASLL$^tO?_^j~ zGQmFEMpOI{dR0f*&qR=^?%g?qAK{Pw5dUw?tu-GK105_C&=i=#A?nYkh@{*X+@@(^ z*2ft+MLvWQx01{K?G+()wTXE8yC5pztM#OD{YXlB#*ZVGmVizyKVS4Ys4>FyP-9s& z`8P;|A3G=k1TD0|46X=Oq_m@l9X<=r4Vf@U^ql%Q28J48fP1+UL?89%_?)HDQYS46 z)uMLjiUeT#)P6!pBU&~)l<8ra6RTuLs2TR#a)Zk+iv_yGWU6Q&Jw0Ibo|o{c;PGl; za4onSbf4DGiiBFftcK7>5Wd{*n30q!le}mgF7#H>6|l>11?;j~@vy|rE+)rypFKT{ z*6YZ9(%Yv^!uUS(4i3p)ywEej<-nKVI|0N+n6nyzE^eBdQG~{H1sR|2-(ZbFCO@F65wtr+gT8@q*IVLJ-R)i`=>^n&4k$d|^jfxn22+J4)Lv4+LCn=5gFY{RWW& z9l9m$rPzuiM?n~28=H2YRhS`ix*|KdlNg~S*@gsdsfxn%NZOsMTP$n!G`uIFEMj@! z<6Z{MQ4j~{US2YID6;I8*T_nk*XBnX=HM8Ct4rOWs7^Mz&OaLm43ccU?UY75;xTLwhLVc0^DJMsFf8~Pok z-Q~)Uh{Fw|PW>~)$h!67Et2_vGkRqb0L`h89Anuw(!)Mc=YX`aolMq#V>A`niS&To zIZoqV9KSfH<=`6z>l#_92geGWUUneRkiR%3QmlJ9@=Y8L(mA##n2Hd)J?!#Ppv^fv z4%Y3TcH3bhKYCBdFR~Jf#o!G7UMEOGdX-c2L8 zD!@S;CO@23az*e?wex7@{jmReHJj4Zrq2eu$wxrN_^^JTqOu!)C8y_#zart(yeHUh z+38La>?p-N8`MH=S!{3shV;l$5(BUd%2_~eN4FVTXtR6P5w|seg=PrN{!Y7qVb)`p z(o_xm9L0?EN#NnQmf6kd7WMBymuDP=9_(1unjqpY>3|MyaXjois$Fd&fU;ykHO>GK z2G08wu$RCse(a_~G6gEdirkSJ@gk)*N%K3&Sjzm6p@5RL*r(+OI1-uZSG{r)i4o7` zi4W;zUeiPb{#gm3mAvXxBXFdL&AjU6p?TNgs%RpzK^aPJvhR=x=!OU(zZw)5LKm!+ zF8X6oS5j=dp;l~VGtAh{jb`J}*BT45bulP-QC>N)xixd)tq!iVa6_Tmx;p0DdEIn+ zl6_iJ^>4s=hw=*m|Kqnk=|%2bnd?^(TF}CudKr-#z_lg712xED%VbBs`?2wBba(Eje7O9q+;)SJ~h3skDUdkXeC`SCaC*RnG+#wck(B` zL_bqq1=jC}TLHL1%CJhltdiX85b z@R1~Bm-ztnk{3;H%?0>Am>M>G7)=oI6&Wo^QLoY<@5g8d7HhG9{UDw`0JYG0=|Iez zg&{rqp`p)@iEO?8B%J?o9WIX*Ki6$9Ybf7xlpaYy%q#QUZWJP6q_E5g=8z`i( z{{{hfqj6*k7gVfVg{RTVU=JI!7@;>ob|6Nxcd?=nv>(6b5^HMRrj3M*;3g}-PmaCg z!@*m&8Rr*(FGKzD2^;q@f4epKy0yZJ8gQpHCAii-fBOH;dMHx?8YTv0*U6_hP+Gn$ zf{gK#gtmU}ZE0OvA(UfxSVy5bHIlbwOp(2oi;w^@KO;`~^yIvcKP(x%mFYUR;*YZM zwzOQk%9^B;gqw~#p#ng59}JvY-TIO7Slf0#4isfL>Qg~SAlrwQAgJY_531-pO9zf# zh?haEH%=2IlI%i)e6n?&bnC__k_;cZ4BOcV;>`Z=Ho&tSFy>ZXRcq&HOt4tt)rhx% z+o9z3EtS%e>LSGO-H#{YaU;;>{Q&y2ncuBDsk-KoGCVH(09-9?yFaU})=Qq18W~+Y zgd$VGiB@`g`&e=^<+pEFnx;a;Xe4;LygecaZ@ikeVHZuQB2;Tqu{yhd1Kb@Gbb!k} zVMfIiLpKta+m%ZaxtaI&(V+79acVExT}7p12FIT5pKj>&Do*KTu%Rqquw=$h`6H8v zQ5|_^+HWfkPT)iTaIcdwl8LW^dQC%# za}vvHJs-Wdq-E-Zjy`atfE>eUapB>;aAO0P^Q z^7+XSU5mU!e5=zW*lra0(I18C;NwNirM`2a4|#Gf1D+pIy4&&L`8p8yloE9vC3mF^ zSiv$$pPCvN|E5h%V+^_MI%r@S$bJp&s#}+%D$H_;cOUSWKb9F`XSc{zszCAP}Ud^EMv0*F1_-n-g&TCuJ!d zw2o?(Bf|~AkZ>EL1^PonEZ(j(L8kjBsUXs3`z_Y3MDHYwylEJYz$J`gk&bViiWlj-28KITe zt3+vQZodVlwR~rC8OvB?#ow`&SIP$TlDtVMdS}3srZfAK#N-dw=-KV;zSPLZaLSh6 zS2V9rf;aaG=y=YPwfE79JYNyP$sQa-M{ImL1q+L zSpbRE050FDpF8or4d=J`FhWFp-MegRq;0@Z95A^CS9pB0&Od#vDuqLbM{CI#|D%N?tgPlA)(( z9H(io8@oWKO;FFs9{?EH5EF8DZZJzC{CG=veScJr#z^@)@WSU3*m)>S2Mt*si;b&z zA_pxe-o}1SvhBWz+LrvrUhA(DxloMQa&C2v@s3X%&Z(veAac}gLwS{)+h@5ZdZAx) zoPUx1w1kWhnMH>DZ!1R269pnAgY+Q50cy#5Ne(Z#f?LKF9E4tWOLtV$a(6!e7n#FZ zmgB>7H3z+_z4DLDWxz2h-(W!E*w4W-_6n!*_q^t-7;4;#i%s#TOQZb=5;viO$dNyM zXF*91h)F&%+8E>?-u3%gV?qshuF|6hk=$m-9M|Muw_E|@Ovjh%3{c(2U0HR04&MPX zz_yb_b%$>f?0@&}mTe+|3z6sP3}-^0 zt{_Z^&0MldGtwY+&Q6WfC~Guae>l9Jr&dJ%J1%mN@liH@7leQC!9e*0qCNc-uiZ&S zheW4FizdAf2^?7hh`L;Tz>=^NU$E>FI@SC;@9{5~NhzOIIkJ8|4z64%RZ2e1NzMGdG7L`i|I3fP>k$K z=*|A6>c2tI-awxe;zbD-|FPHzIiP>_rHL^9hOz#?YNJ4(3ozao%Kuz!3LOP9P5xD$ z^lv)yU*{*98t79t&UXDj7psv4(DIb}%g%p81pLoe1-Zz7E>;dKdxd~j0?)rx{nruxW0?U_OOhH{*pj&T^2lz(mmcmf zUJP0#cso2n6G)=dD1=!TQ$w$VO ztuf}2k({Jhy8NXz^%tIh{9cgO{78>I@~O|Z{0@9f&g$Fm%H2LHakoOhy7E^oc^*ZX z7?xKLfhPftsNK3ob@1j+8OyE{U}XI#?M!awp5tb^P3cWe>X?Xct8>&&Xndi$ItX|W zWwTO|^ZAsF7O9LJ#EU}ev7Ljq?L>1NA6_7F4ZsXcY#R}zi?)kacBuHTnpxUMa;mgP z^8RQt2cUl8-GpkHIQ3#17oGqE*WP&#|J>{`dGke1iKD7JdAl}H(dz-A+tJ|7BkgH= z)*s=(TRRBofjdi#FM&}ky{-C5ymLw|=Z2S{1_+@t_ao;6Q=S4s1#izLbtJlX@jcP+DKE|0*0TX?c{%wVK)x%J^>hMne`X_FE$sw zwz6yk!{x8xI_+OATTQS-G*v|k>z8VdfcdWnZ>C##E8q$*2fhu#5rpjtIkc=2Rl?ZH zGVH%AoB>su*u20OQ6{&asVB&L1xc#M(&csB|BNZH z7cJNpXMF{5I8)Y|m;cp(3Guiyh{Ju!?*jgD*wtd( za&8O2m&+kHMGT03Cy&8~2rjwDLP@_2J~Q|FBM-UXu|fa zU#E?aZFjMb3t)&pc=IW)+zs#)aBl3`CR_df)$+!|$!oxX`48An)ME9w&{8JcSb@ZI z*Mi1?${UtPSaF67NLc&V$GFAz2+!RQkG7L6IKZO1^oRQwe95MCpD~*R9I>piHh>YU z9Flyvtr7napyt_0_*JNNTcx$^O;^oE-_u|9#bO(5M3#c@1v+mU@2_`~a9#SC(v(@V zw`?daIo8OpZRDxGl~SNFTk=JsjfC;cc;WuaY{KCAC4Gu?jdA?|5a$D}yjEsk(O}X* zc+L1M7fqbi3;=;1S^!P%q#=3<5YB=tDy@4CPNmxVwuKlyPVIN+@F@c)m9^*I8K>zO z7;?~MU>Q7W0k2OW_QxX_I146ep-t)aGjaY&M5rivf4P>FtwdEM9+1T0+_bD@ zay|AI*ak}8PrXKoOV(I&d|h6@9e-9?x~OI#73V#XPn{xfe7tri{pm4wrh487=r|7| z{zMa~(!K{EEqiB1FpC*VAU5Yy`nX#O`ypG_iJv5t-Ekrt_5qKfjH_We7!E{Zw3=`! z&L8d%9=yGBea!6|O=+lncB@*YO|JTNuHlHrEE#ahbvRu(Wg_&oy;NwO0!4mK>*gmr z?~PxwfR-5aLy-j>LBu>-0gNmdu<@poEwyvHbh|_qk=Ravy`bCN$8+CF(iSf^4h5Mb z{Xl;hw2?@vBeUcYc7@~-IQInlT&{#~DS!_S+8^#G1?TO@JzMt$)Vj;&$!s!5MF(l` z9-}xofvq94zksM%%9v%iPczdR$=b3s&9yqW$~dYU&IaW8F&-rs3)5ZT4jl!sexm9c zMja6Bnqu0c3h#c(HYqAx7qp6^$0pr7Y)kP3@g;#*Hv@HoygWAg(=sZ+X$wZ1>u0ab zOvWEuy9%@+`QV}exOmCaVX!cnp-8HfrPN$$z2J@?>|YermDLmL7QJ`Y6JF}~u0Fvc zer}|_2Oz1)O9uQs(69sswb3IHUX$Vf15u38v#*g?f&;R(KEwiWU+{dIyOIxI?|udr zaGesu+0W`?Ms)HA8CY{QRNeMU`ZEECSMa{3SX`xEV&y`o{rWXMvHCALx_ewDzX{g< z^xs}Uj-afcf?)PR#?tL3iU#)Q+6py%=4eikYcJ0oBB2o)wWn#Ey?F~~!h29G{Q)hS z$z>-=k%HX9@VEAptzjA==TQH3LZzP^o2R#KT)n}i^YvWd?v@J%jr zf@I4djd1N<;a1+q6?LzMpvw@V%KbUGdPdi16tSo-7n9S$t%|PTIhFhD8?p zN+1TcO^IBvFThk2K*}j1LaXsJ@k}u1w19;vEC)H+`Fz$!N5{zRb(qi(AS66V(VKpD z{7skzmR@+`+B$f!_~J(>c8V|rtud5Oj|Iek>}Xy`oTw}n!Qi-sZmfri^La?xz2Q(y z;@w&~qngI?EWq6n=4DJ1CL6Xig0dMdWJA-(a;qxABD}uFW zBrSUCrU?Ybo)pO~lnQF-n2excIztkPkSf+OY)al!9`#p6huuGY5`5H+yw@3MW>0ca zwreZciQvmul*h#5yv@)8|+L|ucHiU~F z_MS6I0_T7sl<(**Rbkn;PD~>R`LHpgFlUjKAHXba8G)};AG{C}hqcaq=hTBQnsVkuP z%0MeSwD8NpMAfT1KDxkZ%FfG+awk9bm=n_X%J;m+_+S{Jit=aQeb=0wn7(K^0F?<5 z^!;Saj8<68pIa^2_lWl`u~2^Zb}-np_iXTN+N6DJVOzNQo(~Y%?n1HCFUX$T{EgBE z9X>!Vh^gTr$eIOKB80y7oca=W5voNWYX|084FJ7T^Iatzzl;g@Q7FpDJ-IHpNy5#) z1Kw$UrOXWzc|#*S`&?ORO;l0~1rPMs$lSvFDH1{6WjnsutK>X| zLw(fCq=cWwIA;#zMn<_mm&(J@!3o0!Nm~rB7-x_^g|7QYh$SxMiLD6%D0q|k5vB1I z(QPQMkddy?2cnC|7ta`m@B<6Mx~1qVKtPJ|rLLK4GMfJ&T$2Sfb)?bU$=YdvK=-sz< zY*}(DR#Sd}$8(Y>YD`|2Ygn;_TbAyF4wo3W3@fTA{c*|fYNapv#?rwAQ(?L5>J>hU z$I+_YiH^+p(0o2$-7Yz|_ut&YBu`oh%*4L(r5uz5cuBI(qN6g>X%oOn9MF;I4#HE4 z1`h05V6cO29a#OR>k6)!cQJ%eQYrmJ$kphQ_|5FFYO`nA7w)w{3OTR&@w2N+I6U|6 z2S8zDd_U&Rhy-B^M^bza@hpK~`?v2e3^vEpMS8HmpJn}-6LwGh=VQUUATg`pL2;i} zlUpF=Mu;mqyN_L}6{f^%O2=HJc}s>-I3!JSXS9Y7Bc%3sqTn7Vf>36 z9tMuFwBPT7Rl%i;0>)kiVIYX&ddZmT&jTnSGz8vd#JeJHt`sDCkQ5p9$0DXJyM#iX zsaLd*$6K<11cg$A1fzoyxjSW=J4GDEt%^i%L6<@%4U03P?RYc(>D@|Z9E&i*r3O+H z@w_#_Xzst`Z$PW2>k?}B7O{288{JoBB`^nEfmD(6DOxS++s_>WIC35&eNfljh~!kK7`hO+Mw1Vx>OMo;kH}9nv}whTda_Tt zN=>9g1YGZ=8I|!WUrMN!+ z?C}Y|_~4w;E;l9}SaTF>-XeVQ$F;GbQ)w4)8~o>f_4eZMsG8c_YJ^mEiHDDeovTrs zolb%tRHRIB@}klZg{##}x_#Cg1#FkSP8nbgI$>HC5wO|bu9*CmJukAhg<8oGpN=Fl zH9W=x&BGER+xI%v(1b#w)SWk1}Rr zrbx(@=955${x$7{rknQek`*Nn*8`g4W$jopgXQ7z}0Ymx`g&5t*VMS;M)2;d< zZ8V+orc12L4Tc}i9s6GPjcIUro!nBa=>$6^wv_fx!sdWUe4U+m?(fpQ6{ASBY^>oj zJmw=~rEa@nbG}D0;^19 zjb8ij9JQugNtRL8Q%$hkMhje$jC|T@>&*GMv;$#}?yJ#2VHKsEEg!$5S zBmQ_XiPT2#&0EGREHm;-jkn^ZH!nrmq55Ldl+A!bFgO_Z3AWnvumebNl<$PScT=Op zgJS;{kENb*W)e%=zFD?oI^WT!pKpeq&==a8zqg}}KJ57YB#c;%kg7sVF$)d9p zB*!BuJ@_H0#i32Yaqt{E^z^@siSK zZl*Cf`ck#~~li_Xf++xlIO0XmcWZH^DV|FpTb~N10 zD2?x9!zu#}dR|3{XK7=saKz$)S-P?#uZU!XFxlQTZ_tO<&;|O8$dl-RKkQOD%-=<+ zU?+IZQ3}`v<9 zgt{&Yx=B2Sbxrr_c(#FTqZsS5qjf2a^eFn5SY0$PX&9)a2)KE|WX(zWZx&@n%s{Ds zs`NCajPXQ9QM0j0_Y(pUyK{e+ZM0N z+-uUCppYoCl-pSBSo5~40 z8Hv*rDa-ScxrZ+IYBtDh!u+##mr3u4XO@p38FCFa$yOIH$U<{1jHuzbou7Zx4+aQq z9x*crX0_bpaD(x#J~&6NU-a`@k2i8psjO2mcs}p5V4)(t31`9I%VUgh=Bsn*{N!G! zE+vm9h9hI#U~WS4Yi*$m)or|3;JsX3@}S=pekT~=6GJlBvV@FmPH z`g6rNO^R4SCVJ5G5R^^o69MTBwwHRUA5wc|$CA4bUfsRT9y&P}lx^}Y*P9c#%Q(e< z*TWM&C`;>KgG;-(MxB^OVEHg{pegCQAohy@PKSgaCd36M)i_pFVEJ{AV}Pf)W(Oqs z@b2s2kq&GKpt22yswSbM!3l@sDvFp8;quQbO-|Pgql6*FRtBV+wrHT5&J1^riyuh% z&}b_$EGf~gyU~lIY{e!V8kGba@EXS2hqxbX3^zj9khJ=pI*Wu4G+H#9O%+y{!{B4X z3$5$DuNOXdfe7wY&04WET@oYfEN34ividlFk)NFvcm(6d=|{LS(vXb*cpo6qCnauS z8|Uwx7zdf5{=Cb^Fxtxhf5LMU|<4}M}eJ$3h%c?d%yj4CBrAX>ZpL9^aJtWtB`HZ!-h znTBe(HNo;0=DXn3{%)cUC2QC*)jD&he>lz}`h*1{(mNeH+BjC}^E4SdVoZRNB02ZO z*O2!s15ExvQSxSjP97D`DdVni<@)ly3%aCMgn*a))zOwUGsUqC5T2Djz?Vh~{s@wg z7wt{0L!qk9i+8})oA^-NxE`ope^l)R zh9<$DLntvpBW~coggL)>tw>fRVfH5x_sFAHV#n5h&(6exKcOQY zbporPoB&64;#JrgzwCOR%OYNHpe_CW7|zqj)V?=(ro(=`f(<-VrX^-t8;en@BUb`# zF%X5j9#d!Mwca?p3=hOe&b7ofqZ?#+K2~@9wQaPBJYzvc7LXBq>-Uxb(_EU6n~4D@ zU!6L90uSA%*DJJ1I*T|jX6uufa4W|JqY8=OZN9&=ll%gCz+&aPZMtQ0PklWh5r$a| zE`22*ODUZB09qdI%WDkVInNBg&Aad4$AK7I1&qnTqe>8HfKRAZ?qFR{b0`xHKCcuQ`| zyzUD;tZ5S`0=O2g18r&nV+lt76*bT0hUsWRgbAi-KkJ#7xw({iEiZcWQ0PfZN$XWd zAWh3mVL?$W2uLeE*S0|DSWJ+|n&%n5yp()9vvYpi(BW_;4UyjFL3NIc&{w{B0_Zcf zJbw|?uMZO#2{#2Rt#*Er%;cGeklCJjnLTE_tmAi8E$yeZ=`NMD0pZa$m_eiB%|SUA zeu``De^?d`j)gh#$rKNguszQps-x~DH_C5e($5r4t{s#{QYy|YfPcZ@5*IOJK0nWL z!<3g35;!a#Xj!n#)C*3CKbXk#vRGV#b9-s$3gggnz!Sm0;dlR8tk3z?aG< znde(w_*Pi{U7HLgzGZVkI?QE+(9kzgz9(ZYbqrhcA4=D8#Jj^YqP}2-*Ndr!f5?{NZGSS264EBfPAyZ!H-c?!2LO2He$IVSwr5SBqy zs;Gu=u4|rYH@5KsbB$5Sx-Q+%BdW)8umPD+y!?wDW3;omleRDG+k1Y=giwjRoVan% z#j4aYth@J>djsCiFjsO(G0ubZS}h}|aZ(vDoZPsjh9VT)JMD0oo9^!XZ2NRPAvTRQujO_T*x z3VZe6?V@ELY_xQxB!h8ZqCH_ILA5H^jQ1Hy$X1s{ebS4Dn&iJ~NAFdl(7pp*RDj?q zIIjt@aCIOXf>33{0H4Dj17ngzz^|M`2$l3yH=sn7hgFQDk4SCmiN#bEqv_K63fnMy zg#)H@3VjlLV$GAGjZTE6zRIG8u-Z(e6xw`z1$|Fb0AXYI^w^wxj-rD}WhOZiG z_fsjVLhYp@EbMu@6pUGmJ@1x(hW4;Z`E-mxgK;%*SHmxYBJ3emaDd(Ubx4_5tR*?z zs0F0@3c&&2)^iE8#AN0`Jm-}4t>gQgVjm#ZnhR7#%E$K7BVHLp;$~2jPcYM*chA1b ziD4&sbnZ%YqtLj|xDJc^6p+|{p#kZ0VJ7^JBt6Kd{qrZ|_flRGZNE-8_l@H+-1mM* zChb?aSj;)y8mY9aREEbu^;R$>cZ4U)Rr*Qi_>(S)heJ#^O0^fAF^|6rp9Q~W#m8w<{7w`Jc}HXzT@ONHy(^Pp(M144NQ{M6kol-99i|GP$!r8;UL z0om;f8jKR&6B_12Hoi#vG_%9Z1$9`VC*LtfQeIh%0^fvx7z2DQ5PDN=@**eXxeP3P z+s98sFpKntB{;S%SRy}4nHeH9sM}o)9Sv_z-8KKW z5`mx{9k}IOmtzo_tx!Xwv6Qn%X_{RTHy-obFY4q>`cZh2w4y)43b|DL5{skufJl1! z0=hCLB>WgRArSJS7!_aBQ!MK%5i={1rp>fvTwM(a>;~3y}kLbPMg7X{+ZiCVPkFU3m ziZXilw*^KRIu%A_=n^HB7^$H?(PQZ22n5o>6VrbrF(`!=^X0!jAxzq zd)9l_I)AwqAy4etaqrJ{?SAxN3?DBx7=MuQpt7A|nJ@oP!aF^Pim=yE(p`vhl>7GAkaFs$`et&p^Sb_ijkxy%7((oaAIPnlyZa*ry?L^$&)WC?ZS)FKVC7)~ zSTb4gi8W7zb=iPX&n6>-S+Vvha=chZr{%0laNtYtIJrJ$){TC7t>#=gZSySUrlt#1 zwR5a2K5BO*Ug+lmHP@Wd#Xw2%u{<kNOIeik zT#ZIQOvvR7q+m*nxGza&>%PRXsXXE= z6Ymv?9zkG3R5%=q-pZNT{#V(V5FcoIIxTyq)L;C=R2Nu>$$scdc& zWsn7GS(sO*$F(*_crmE&oAW^mX{+i`;f>a=Pb_Y!<;Oob)?HZpsnk3o_l3uvOr`!b zZ857W6DSEPf%+c?CI+;pMfqV`9xgR-Q}*AmD^@M1%8y57>_{S9_&&^g@q^xsA|_EL&@k*L_^} zG`<7YK{G#qV0p%rSa!VApBuE+`!3@iO?(Ww zhP~R~ae3^`UNRBZOGue~nKmmT3$jrn`G!LxgiYTKreIvCTlVwUL!!XtKUM^xAIKhF z=LJpEV;@HU;#xL=v#^_T&(9WadJdg2m?^V(CCl~=#EN!{6Y=K3DqL(!srJ!$G$+R? zrH`RTMIjHTeU@&9yT7J|YvyW!h=83jmd#ghq?Q(nwnks&vzPsJq1aJtT3w4kAEnoX z8DjCu$C@GAQzgvCNBY?V_%VZ?_)3lOLJW+A(tJyS&|HwdRu4*Ci6U`-O z`}8lpvm_ohlVM@J`m1g&6g=zd4En77*?EjgI|gRzSBN87n{xpxRx3iiF@ywv#{e;G z=j8oNL*-xP5#87>De_4zH4u|E&m~cv5InB*ae?q;X@dc~f(LZ6t+9mCO0xJ9OZ+>9 zzbYdZU|Qv>NpV?|l~vJbA8p_LB>ge?XM=@*_3dwzxIMsl7oI=wS$hOs;=+CtX`eq< z(mi>E##Ckjjg=H%jF-RoJVEbA9_#d9y@m^h9LnI-YU-CM*7pUYN)QfnH}VavJueeBpC7|Cy+cq-V|;{qD&mUUk~ z3+5o$h`|}{b&9OT{Dp_RM-OhZaUBBn_>|o@>Lbf3p>Q>i_u;!<_t*cf4LzZDGwl)F z*lqd4t#`p{g&t^BW2A&tq2B)(8gSJX^I%2URu4ZebznJUJ!DpaLX#+BFKH9BT2-%= z=iiHMq^L68^HCjNT+Zu??(a$u5>Ng*G`&8fVZN-Ze)_)q*?JF0SkhgXDK_Q1ri{E& z&f=0>?;VGqKgcWL#IR`6=+{Nt*ep11LmME&yz@ak2YhqwSH|$AX*Wvrj#m$>l%V{tesyX)yVK$BJw_tfS@ncH4 z^ay;Aj|OwN3Q_kJoXw>woYqaFVXQKqiyQw)|FXL#IpLD__a~SU8~XlPon{Je;1G9d zH>dqC+c8KDT`<@78s6iwm}wpFED~Vq3W;s&1;dj0!$Ci1I`)tqE$x9=-A{83*8S_CR|~?gIMs@%Td|cV*JS! zNKs7GdE5E>DK3$(m2>)$Er*bS<&Cn|$2yDXu{p=~o!=TG_4IMW!6=IuZ$yGG5vv9b z8?c?G$i&PEN0B57_zv1j=IHDTk4d4YVvpy^YsZ3HFsZYD9;IeJgE+uQeM?qyqpbJulj-}E7D|czD@P76} zhv!0u*yn$8cJFEBy!b<@mv(7_rGM3@Y>_I-eZ+Xb?p3rQR!8#ruCJ2!oCeV!TnJx_ zCAs(IwRr%o8!#!Q)~WVtLhlOWYdZzru+hsZBL|JiN6mRLe2@$!uXKhcNw9AHZ65Mc zwyNr-7|wKFd*1VXWwMstFo}{zX3%fggp` z0V>0NYOPAMZ_j(9o}*U&ZR+y>+tigr2iqW*Vn0Gg>PhEMxs%2+_{3KAHMPPk_{=m( z+eP%(`6pY_1(k?N93#wS^Vhc2!35-yk0brYzp2%~+Ld?aNTzD1ntDNkjB{$GF*^x` zSSCM+pwvTjH;rwyZpYk=U=zrcG->tWCS?iH*~N6d63>_{(X0cQiWanMB`7~wq!4^e zrHG{E@&0u%b*#aOW^p3cmk&tJ|Kv4Q#n=4yNyAs=7nD9DGYb9kIrzZa(~YGC1wXr& zY;uxkmIJ}R(auN}^evZ6KGmZv&IxS*MTPN>A2rxq9nDi8Z#dEkB2W2kxUOxBM!*dDv5?(9cZ1qWd#))x{CvdK? zoBL(2`VON;Tc~iI!F9YsxrX0HABl6Z@ljfFgg6@!*hoGrkFf-L8i?%(yb5TcanbML zp(U$67Rgz7!N?GJ7~A!g5!blrn{&Nwx6nrydc&vKH@1lZ@$deS&ByscniT{kMgjb6p*3xW z;RGOXd6H_PZF4#EoBb(=3j{5gUwP}*xi$AE6PfVFFmHV)%q~50z`_n+6ez`?9n31q zA))_Zxo`hAeyIdsFh}9Nh+;&=kCcBWM)g%?lAiXDBhCg*J3YSSDBocR{O7bRyS!7Pb!D>s#GrjF!?%1uQPPWcv(R_9EtN z*sS_}*B>N>MoL9P=K^a`QeAamK_iu-qEcMEohTzG{=P%*R~Qv-H&x712o-)e_ivNA zk%EQ7HA^RFN2*smf2c~rCGoufKI-rjY&h^bdX)8kDvxb3Lv6%%gP}84d!810b5kul z2-IF7XO=W@%a_t*4buKJC-`l$vzAEZTdH!Xt8|(uYvtUxj!$*an~|_$PhBjqF-wgn z>m$2q$?8+13kU)rewqq(rPH;v+IrH6%0wdpu@L)_deUrY@d@z@E z=T^RexpDsG?z)waRF-S7(#F;&XX6!Xyq@>FcS7?HROzs!4@5tmj|g-H(LQC+mn1lf zj=zru9X(!ae*pv2@@Rk_sxk(~ZrMEis;R=X0H5%}%Ju6o|Mb909O*(gI?v4$@!QA4 z-GlIgErNHW4@*gw^A{`x^+i|ly6~r$czZ?mFI2W4j1|kMKyF=?`veLsMOZI9?lSSG@5(6ttNTmNBnqEjC?8HK6svJ@$+a&qwbFQYWdF@C5F?v zVgANHa)}($8!p3CvPh|Y({%F@1tZ&f5=qQ+?%0zb_&dhhtqM$*E|DjFLQR%uDac>U zJ<0AZLuu0Cd0YEt%%ogNdE<|Zy&*^O77Sxeq!F}k4WTG#H8egK`?}W0ex!({=fFAA z3To@T8Y5QXu97=|wvCfIMpJtkqd?iITsj5Kr6-S)SqT8{7 zj}%B2Y&0x)rNKWZ>b*Vu`K?AjW1Z53+iCYc`%TY}R9a~-4$dK4sl=n=8|K&mYlx#CgYgN~~v z4S!gv81CIhG4{OZNTf6=uhaKsM~v5x$`v1%T;zi>N_J^z5y74Su5S7e*Fm3-Q4qix z^9%WTOB^b*`)mcFrFP^nC%CE{@!^SoVzuG8uKSQ8oswevE#wuSWoKVy$s@X~ zKTZPN$!=sZ9#(czlf;A{>6D6{t$<~juPed8PW|>Brc&PmS#~IX=|QpCOVatzx_7RZ zLSpkL&^}Jl?p-xJGcR5Ru5!u+t}gXl+CI2v78h~AuMZ!oPej|K)#^%vA5+8AO8dSn zOL9arW-`b?+2B&6cMPRPG)!NR0!Srnn;M^SHRVLDzR6u>-*`@)RR+aTJJd(z%C3QW z@2mT~xY{zyoa1|nZu0M{`(l-Qr^{DQa_dt?moFKH~1Pz1?RV;QcPg^Qf&QlXsxQ!+V1x7)?q+HLzEu62S4ID))3T(e%SXK zrcUFxO4v#@Ib7zq!Q||{3#FR^HO6`|tvy%Gg+AFaSU99VoR4?n_sEcde+SaY1_wPV zc1L2-d*N{hf6~CP?$^CGRo^{4jJKG#Xy850s+)Im58rDA4z-4VIzKYoPAZ0-zIca| zBHh0Wjt9DgN0rfOt_kz`S;~@!-%nULD3AcsBep=&`^K5d%*U`n9hQ(GE<7= z;Y0JS7gGZr$k7{>tJ?{MR)|&!IBH95(xh;;UVfo^0VosyPt^2BawkA{(N+jki9tb;UyrgNQQx;Q3HJS<7}o$a(Wt;8aOg*6aN1&Rz}0#6?G;)d#KaMpRg(v4%b(EdVY-a@@Vym_@+X(RKsKNpr z*>=bv{rB>q`dtgMoD|>8lfg@rwW_aXrcaI)kR@R-Q0`-92LrW4W@q3{VKUO-jqOGh zUzvt)VbauTiT%Zd5T5Pn(=Mune<{^GoHWiJdgvxrs!Pc#cNl?e*#abX2AFpTC$xz} z`HxJugg3=o&7--6k4l~p3HA%Qow4PeNExeV=Ep`TtfdFT6#cjYpY?1Oo-F!ZuLzR{ ze;CV+?45jc;gU-Q-v=MM+E?(e!3c8#u!$D)X(}mctMhSnQ;)C?MwBYU&y{AU4DO{6 z`P@Z3vueN+v{qFfwQ*l%MI$UpL&M? z5c<^@K9_u{z##3sctY>pcQ(BK-h+b&;g`6IsuAw9l4%q_cvWg~!`SC&vf|OSu}Fdp zgO7uJRECWWi;a%e?b`$pPJ7|t0HC^)Y$O+HeIq$~v5&{^-ho2<4Ff_;uy%->)`nCa zJ$sN$@TLYWm{9JsZdn=SAk|l`#3rSeGnYe$=KeeAMvP9>VU<+aSV}_4Z4in8|@9nkmKNS@V1RaU~}>6`1>u>@{5{V9iy+sg8iLM`c}n;qrS3O2(_KD zxkWr2u7c7wz z(*}_v$jltQ=`gyzn!cOvu#!e74K-B9K&`4pwbkj(uKfF7D`~jWr^T# zOYQVyP`sBUdpTXS2~?nPBCvMy_62FiU)PxAZ^U?0p{!YVs@@BJ?RShVzVUo1OD73e z8Lvr@By07yxl0cGSzM?_Hk@^Ub*ZNF#T$`%0;lcffROWuz&xY6ML$U&98;wLU~UoV zT?w`dHw?TUU}a*y3-LuwH87n0oc?5%QW|wBYi=PcYZ~hL3~WEO0lU69K=AyRhT(Y` z6?on*-*a9BV-b{>sawVVmJ7Jsm$*Cm>7PdRoeCU{kH;&qc5}1szBuXnK|nZ;#XM!k z$F7JvfE-Pvzm8P1xGmlO4)} z=zcr~Ckg|k7w(#d8RNPmg2VNIy3at{qhJ4nvh;q!B!K+Ae|wFCy^e5VrnNX1z`a-H zxf{f6dFAD zx0AA}GC^9@j zpRDhlgPzc^pKHZ=iIvPl8oy(kEIm-XBnpXpxYn@opVRl`N! z^S_h8f=U?j;|Wfi6S6X^eRbL+^9<0P7^v0uab-TK@;#~;Kkkt}{(>O|_?+MYoQV%} zQveBv`5ulcQ)+(xSUsjTIlFLNo4ok@Rjx@kV3?uppYyxEtcVd?5NBF^mFvSrB@izZ z#`Ny_Bgcg%48Y*{sS&{e^}zH~hR^jh+rz4sn6-Z}CJy)V1)i9J+0}kp1%T{7Sl2&^ z!@K=a=Oqph;||HS!wL6rp2Lbpd-Q7Zk4Eage+VNMxNOr*$28BSjF=S(N~yzGnvGWkc^s~q@$F)bdRPVH$Q@GeV%-}3? zo}*EwPrMeiWv>qIUZ40~Pe1mau`PXyBlf(`?en(&p?Fp}6z@$B*RDm!%ktt>wN-BV zc>uJV1o)QRZm~o8L;CJ2cyT%O4*>f&w`|%7co`x9Sn>9^QXf?@oNm;>1en47a6=Fg zjjG}-niTyuzW`iL*9R@ntcIoW%!^&m@aNuvG-Cir)=p6hQrxs@VqHE4UR!Pz75D>BLF`;_=uQ#5HX;T3=JgEJ}hH%p?D~R?1 z(rI>T!l)r1fQ3|Bkn;Tey=nb{54l<~)0%;rPpjQ-%dfYMfAxfYfr$QaHMxX=Uaamv z`Y)N#iecZ1!GbUnPTek^DFX!ekNt366z%VUF9t39DU&#Ac)^ygf>ujB-!ipg*Ne4w%jjbH&nMg35RBLurQ2 z;)~%@=TFr?*2IwY|uOx7K|KQhrK^TrP zVpem7Cb5(sAhx55#b1lb%A0p#bXH%vu1B)pHf)w8CwrbpXnPm9{g&-Xp8z1@oDs|& zH&HGY4s<5fGlvj&A3zpV=wU8OKG_g!*xsm#} z6GfD1{ZUr`T6J`Eo>kj9@Igx=^pNDxxgo9;o=W$e5CV<~frIreHh!<~4+t1*+;^YIMfvVs7=4ARAPJXto&Y2)X5XL{jhy;H~Y+&Ry7D03K`!T(9}qp6w!w!@sM&vyHf6PBw_c z-`_Q0uwDOI&Ubnfw^8wx!SOeYmYRf&-`0?hk@j|vRpV*h)-C~;am{qvhx^)#j$p&3U zVFM1?Z!)AQ-WH`!@Qj7~X2k2ycWu2EX2VP8d9xo#Kr|V50o|1>ttz8+6K~q2&K1mu z3bpWzEw2msd5qmkiIWjSP~yK%#s~U?wSZ5Ojr(5}E}ZVtq+U_&cyh5l8dW-%?_rwU zCoH@-KC79nl}PJ`9H7}`TZUvjaoc;h49Y%q*WQ}dkTeAr&6^`-K#r=FTY4|TcAr`M zN_6ZQ^V=kYqJMlXu(wX-MizlH{eYZ&$S zzqPaP_80C0sde|m8tLr^e?TU&J}o;7RnZZ_%JP+IU0ZYrcurk$wMi_w2)|BFI0VC= zlRMF8jIO}s2xwRM94!OeW{(nXHW0~m0$U>DNip#*;oX)sMzQN4CfY{~Wnhb7s-N4x zhn#0{k){-^{js|6?<0TVW=9|kLJJ(`^^7|pm}3RBcg4@tdzEh`Si;6hxqAOhwh=9j zvu2Dxa`awh^y=!C%^=HQ5dLT1?zf2-9eR#Oto&Liu~nq^{sQlc>AZ2+be+lw6o@v%!l+&59V>Wll{fx;bW8p1k!Axr;|9hWN z%DKCvl9V#Zl9;VJRrj^bmi%qhOH*47({$Pqqk|?9xtW*m-;hXI6c}+U4sAbMDTG zM8ZytJ;Uxrp*YFH+z$X>L>ZexTuqwbkhR-hr2-U)&abJOk_7#sr(>F)=Tzrw;*3N&2qwvIc6gHpGiE5Nfh%GpEcJ zZ%e?#mT%%kuPy5WnW^9(n2M?#?Ae@1d=m?$;lM3QGfZ;V`6CP|ls8y2DYXwI*_Uo^ zOCzaUmOJ6Y)yJaG6C@1|JO!Kw_Qqz_4)b;mL?`yFCNg?$v(DLjsCA2vd>6T}-o!iF zo?}V(x(&!)suTd0Z*jCJMVNKa7w%%d5=M*-fC9!>z#NLPd#7ALnNXI~Gm}n9_ zepi!P)>wJ5Q=oyu2fBL4Dm06(Ns_zcsmw)FT;|zxR0DlZm&S@PYhU`$;76X~22btBcomIz{~3rgi;?oS?lS3=sQWmVr)b6trknp3v{Kleq*jPKTdC z*>%t}Wg%~<%+NK@UKkuBSE~bKy*&LZH+U$b!_#O>4okj4clXnJ!XjVg1~RK}Am+d% z+UgS=wJbb%K|{FIv9cG8VyWCc^3tL+3i%RP>}ArYUmANFJeY{OODOQIlqQ)n`3>1; zV-_ox(D(*KweeY4mxY5^2is*c>g-)P(c0*d#C#A-Ynu0Bu4_8roX*^_x=SS&xwhN} z>p3qHpyA#0NG5wQl*HZ5rsmGi@Q_6D7(shZ?Z)uvMPa1pPz_>C39>P>$%2-=J2{(^ z6XGP3z;NGHHavXVQIeR|Q?bB8p+7TzPc8=v$O;Nr%e+N%j`Kwk+x4j9+n>|uKS=U6 zOh|E~1v%Pbc{?ge8X$`%C z6h!QKJX!mU%60UrlaAW8+h^4-y@ZEDD)TRGW8|Y{UuRaGf!TBSnAnOc>s;xlTm8b28^52@9GM~SiSQa?qAp<54@PG(Q#X$7 zekl!iTHPY!iE8L`!LLWcdX=%d-R~-`{`7c#cZ)ObIptsz8UD^c6YQqtD^#*PDsUOU z$DexvtkLH^9SDTUFCWk^zuzjU^n#b@iC%`1o{ktul#6R*9%S0r%m=3lv)Fnu;7)zzJ@Dqe?1>5m8ErX&36;Q$I_7}!%Nxc~5pxZw)u^L#vXDyGT?x@^BO9`c(4lKJ*;CD1FHF8$xCNjxobNFjg4(a!NGFy8BnV2vgrVbF2pg<1`#= zUM*z1q|{c1f!d^Y5zqMMe`@fh0tnu$yu#rk&4WQC(+J=*M6)AVh29~U=y{?jnFWVN zs|HAKuhPT`^>+?H*rKI*=(+sY@P1w{+Xe;nUp@xTAV6nPu{kzbj}Yt*ZDb3#gex4l zWakxTPx%xl9~0K26bPQfz-qWPl3JVVM+4qRxeZjm*rSYX_F2Wj# zy%nQh0^$p05=NL+PL>&<^5#a$T1X!Lg}P|3%U~}f`!7HAa;ksS<}WP}ViU?+2pPo7 zefkRdTb03&x*3mRsvmfCj7lS#6nqouK_oe!z&-*#@zVaQf7v-1&QYs=COMVvIz(lp zDiLIs`{5CGk~QT7D%%!7^XHX6pH|{dFqQRFGPzmdr?dGwb3zv+;ET~VVPw%X@JY8jI3b3_iQR{$zjp#a z9u?FOu`x3ZP&x*>`2^f0mzbd0yX;8=b-G{ z1*KO`JDj}5d#I1>Xm2L6UQoEA0c>lkp+lwfxx6HKBs3WB?+qHTqEgU35EDUbZypUC z71~1Pc#T#udHxg#un)R!?BwO9#g74Xzht6T24Nnp!$;DqF~Z?A+h(Nf&46)Z4=KAJ zRVS7S&T+H+!))P#NM+6GD9!ce-Vg*|}Ogjf`O~%QJ%Gvk!u4V<(}k0Q z!h3IZ<2|rhw)LJRKKG`X9$%mJ9sc0wac8kqGtaD^Y3%R|IXB|9GL=8gp}>rkhn(PY zcJ8dOvAhiGufC6B77{ z#W7kdfC(YBNqm!$)nzp31W-LGNS0Gb7;gAPq?ybdZ(W$Aj&1Z@%v{_(|GHUZlsvZ9 zgN-@MF+FpQ7V2RCnLa`dA4Udj)BS7e%(z6hTkS`@MAAs6NVQ7wjm?ez7D86BvAK%a zn{Vf>G=u8+n2-sd%S1y%Uxv)r70FM(=P(I}i0RBMZ39%Iir@%)amI^eB?y%k40{=c z>>uE=Ppy%m;(pvqT2MbQ)NlST{HwlKHFj5z8EF zVkV$$+GZ*iWCbe&@q`hG^3677A2ICZ1Z#_+@7gWGvrr;c0D4V3-CYXi$k!a*rtW5q zhDZ{xWdu@38@x(uFknL?iLm};p$``tlYmo3KChcKSi2~6H=b}V5$Z-JgMD^7xs&n^ zT52?3+chkI@e866(HhaE6x<+&d`hZZ#Xl=&ezq`SC^^8Q2PU5A(Miu*o(~@kOGedG z<&Nk|zm47iF)`bp6F(1J}L7SzpTQQ@mc%ZMBwxmH&IO>W|;O&@Mqr_st3+c8v(7;YM52--v^ zIgvF-!j`*|hthnDxt%J>^Oa$455V^Qb|em*pQ66=#ulbwIYP&<3LdfF$4-f)jRjVl z;{0B82dr*C?RoqpT^Qv(_K4d;B2Id<2x?UV26{U*iY{~r5neTpTBp$8xOQnl`7vg5 zaHHFB{#;Gk>G%vb{_Hix*ZY2cC&|*z167$0pzH!awIhG-l(*XR0uSN@sbj=(P4XKP zu1WgCy`_VAMA{jK8H&J6LZSDWMvQNZML%T!d4MGok1BYaP#zC4s4J>={zS(^$NtH0 z$?j*_fl|BGjgPe9H$CX;0y^$<5h(BvzK>FI35+#-B8N}?@|lf4+SBhD_xA>d9-iO{ z?s;YoAgV9gVF64M+0F8sUeFT;KCzZ#3RqD}@@hdM?ReL~igFe|-##Ig;oX%a3i`5( zuu97~nUmKTmQj&n*Z|V<*p!vON6%3g-|c|ob$*53=nRU*h7v`FGbJ<7Nry~eV89sy zM^iDkF`%xSY;2#kJXYjM?hi!+`QAlOSNyucl9q1B8Z*32?+AFJL?pHn{n?sx~Hu~6qN@g_89f4Fu`Bo!GhGmJ*iCz zEJTlVZ{UFw#)`L7z_8EDhINjR5}=)?Oi{W94Mez$+0)(0@^3xQ^}5!&4M#CUEG`_e zZz>iUXaBX+<@TWEMGon!NzJ+BZeUh@!ZCY@IAq*sL8W_HdtGlwUD>gPAJVvSxp4sR zR-B7HwlM`TQ{G3wQy0 zF-n8`#T7u$AZvkPz-REtmQ$|1fSV`y}z-rM};In}_P9jlY{_j$x}*w3rI7RzGD&d5siWt@xCE zQE83lKIoPcrp8F6t7J8~Qo8h%KB+yqMO7=w2wleM`#+HO=b8;q6T`ScDWkh~&KS z%sU!Iy9o5z!{_-+!v15w*jTvm-jxrgN#Z+aOdn|v80hV4JS?yj8ykhIk%xgNncLhpCYmj=86xROk0Q&vV* z{FVa#C6J%RwblK7V%i+qDjq?2R*`k9*{lw_koM9TwWDb2f7hK_btS6t9IGBowQjeI zlo0{WrvP#7Q0?EfWt{nd+HV+H6Z&wdHDa4BkQx z;dhGE?s{N=*?F=)nkICdgFZdnW)3 zbMX0zU+IhY{`-5!9hsk1C5>xi8HTG~?T5fZkjbh!{EH`5wV1mnecwc&jp9(>rnirG zL?-=`TDQD47%UEC_frmuxDe?@<7<|tP|+kw7b%Td;)W*Qcp^|P7jMz{y`4%MjOS(T zsH*jWID~H{!@EeJh86wLqjEpf*JP*cJU*^UN-7(aUG-blBp`a|hr<_m&zNM@FI>Rl zcR*Vaja%T2AM$nz@a;p!F2ub3#gUU(?o*VZ;LsyRRHU#40+TGXb{Y@*X3Db|pEY=u zH)pr8&^*@rom6PNTXqi)EF$ReZ?`!VrZ?ncl%7cQ4Z5-bb8Qj34fWyewb|>+I+UNP z#oL1{hDn|W;mIt~E+MR>*IsJa#nfR!SOhm4kHM5%^J+Yw0Z%VXd}k)kce}a>nj%=&J=t1*S}#|6qG#YJ_Wei0JfrNo zu(|?&45=})e<_3{B5KX-ofgqIKZj%s{ynb*=WLslCbv2w?#gt9(KOza9ADx%bI@4l z7F!QX&xG`E_dtD{3Yo!(QXuHrfnsn%Vl0exdw>iTMBy-mYMlyB6@2*Rknu2|L5#}X z^j%s*SlS&WiWMKcZu+BO={u`Yiob9}eM8FIjcvbTY~Q7v5*ucGTWjH*x;~LHvl-;> zSpCV%H#0HOOd0_%lhs`QTMfcVvyqsGkZexKcXcUc%2fh#v^>JhfysUJ7sV*Kd2e&R z^7ysj21{}6dINt^L!8}a!5`*@v)~%`?H_}_l_y?Cimj`cb^h$ZQmg6Vuzgv9C3ZY) zTVj$5Add*#L#;Rna-)H|uEucgU(r>$h&%#272a-*R5JMOmw^;=2Fw&4jL!y$In1}O zP)U#D;}Fc)J-dHeua{!@`f?-7(y^r!a^h)C1uw5wra^}*)b z>AFAVi**AZe$Jm;(hRBg&{|gZGzdH-;}njrmj1R?xoQ5Rhb3N*ro@<*!t@asB7YQOH=t5~O@rGeHA! z)Yhtp;ZOq(DY#;=U=U+~&QTscWsY6;<_B7ArL!W%YAu~KU*}gdsXeM6u*9C7@#dSa z7tK{(-%S(fscOtH&rMeXI4)U_VqW^XTU0N79YX4pL7hNj1HGP`-Dq823shlZ8K9kvvUwKDu z2U+%kl@(emYb17wLevEj_a+~J*)*4sD&;cFv(fDFO!q_Zw%^|UirHFui3Hl$mEWqN)jeB3EMyH-{DXSJ zRzKT@2k%7Q5t%}!v($f?3rV-N%Bz#x0A)AEp-wt3_fllZUU#X|+*V3$ADZDsGOw+W zKu*f26uFywjY0z|Uwslw)>7!_pS{eXmDAd44`>#sH=2gb|In%a|}}TI?8SI%U6<3AJnCEq>)cpgCt)yv|U9!EN5p;c1!onlf?M?Z2XE* z0%~GbjPizNQ#QJ4I%|7vt_d_hg$#1ugJEN^vlT?DYyGJ*u^K{c zQ))1+0nXH?$jYU;CE@Zj55zPLw%RYbJ0&N-FF0U93`?bSij(oX?crGz*mE^%P$q-X zJJ}rqv_~u;+s z;}(xD!40(t?X$m5FVsuO^ z%J0sBO8*#py0wIwL#%@cKah*G{A%%89@CYUSqG&1 z#*55yp5?FI70|?@Hmz_m&X+PcwuL3xrSR!UUeRcRx?$!3YvrA2^{Pz?LmsA1FW|$g?jA2tvK1UNg*S02TxKa)=*_x4 ziRx0SjJIe?NCOK2wIIO{?DkpaPU}ftXg$ih$}LxyPwGa2v39_@P0>`naWLMWS$v=P z#9xQ3~2k}UV54N{+Vi2nB;x?E)@}&Os z@+(i1oCcs5ZH9_L>ePm-Xw~*9cthwY)kh@o6zieKJ4#Y07d^|72GrKndMM4=c@OB9 zvPkO2V+R4TBpLy+Ajz_dNohsX0-g#&K?x2p3 z7pLcY8`6dM{Ig{{;X7CV`nKuTJ93^@HcxFXx3)JuSP`$Drv7znahq92g*)-{XR)J? zYo(?w;o?H+mCg=N3Hx51&VlCZomnFyqkE3aH*y2famB{`I)-kU^Md33Ui<4CBt}+q zMMiOk+YP-O4##F&jh|E3y<+93soeT|PtA-TPpMfoy^?Zy6BMLA8{nc0)f_RYNGe;5 zexyJBCGi_WW|zYYbFCTu9_LFx5FFLe>-#p1*GulG7jdh?t8j^V!^V`Kw3Iwz|*ePWiTSa#KqG z4qN^a(1tzAc3PtbZp3b=237aUI9+0t*FO2=kEj;v$*yZpWwGfd-}}^l@0fZ$Q$sT0lh@#U%Gd+ppIPhY zt8p?d`JYkNZD$XD_=H0ue{_9KdUq?k^_F8rXlZywpL=wkQN&HPOuWz{M#`H#=Bo|t zbiVvLU2EMhi7mZ!#WiMnKCKSRTuXN8W_ZVzPt5#`V2j$N0lj+{v#O_9f2Z%9?m&5t zs*+{#lK#2x*g6-bE5Exfg7V|tda^gu_ZfR?c=`hRG8-4_`SBA-^H{E2;~;;PZ_?t_)^MKqJ{_*R_3AQ83A5T}9Ogdks2T&#)XZmkmqlOo=6DzfQFX?#k^H=HCm_;)G(uohPJ#?i;9 z+`>w3y4O|tZuX{(v!Ay2Mfz|Em#e-hz1JalCeMTU{*afo3L2h1K7P1AJ9h8E0O;kC zvZPt>pLlajwi>VMJ?k{Z6-HHg&3&HW;dmr)Mr5xzu{=@o;c?cnD01-aKuQ1m;G&gb z18=c~j>FlCcggaVZ@o*Szm$uAxw}7kn$G5&D;6VD90BFQ(U*12n*T!&OLbrsodC}Tub;J}xa zps9p={)t6;XZy9qsaf8iO7))vO5LyG|H4q{>sP>SFO6JqU-#6Xu8~>#21Kf>BIyr{ z-prISoDg!&)gn5K?~l^&Inb@-*DQVE*>ONtI;#10`6ma&^sT2oDSjat_MaSCy8Ehl^!HG?1}!NzO5E|) zNgK$82J|jdD^oTRk8hSE;wkZvm)31V91=2}4~UXay5=Es_uhk9C+iqKP0FaxGU2M1@S!4P zKi<-j4a#{}L|?k+%{U%hgqWAHpvH?7zw_+#r|31Ih>Z*nwWM89cEL_`NZ(hSgXE;l z_rjqBfHOt6^67kULajNY17hK9*E(pu)cQ?wS9fbZVRYT^8$k3C9*Uqb3 zF=tO#L$HF#<+uH&=R@WMid%QHO?vsPIPKh*f!H3s4naBttJF8o9|g@HqgIa|1V34C za${V{ik^b7c+LJM-9aFh2>uH@Gy@cOkIOU*J$TjUyB5+wlXYiLB z>b+2P|7`B5maJ4&N@Y4_gIV2KcK~Hn%I{VDoD^G-^T9|5#!wh__c8Hwj}XKyf$=N650muyQq#JX9J z+VtVX(BbCEa~Dk>3y|l&M@`j;C_mGSlMbqsog&oW&~SPD;j>JJ{^uo=PaFzWqrdq! zX$zb-Jyj`q6UN?JB|m|}v#A_OOurT%oX2#z#qf0uJzFPm3EBaqy9*#!wea=SY z*a3YjNZGVXk!ewToUlVxghA26+|WQ)vHJT1qN^j$Y1FHQ+J!O7U4D`(K+?ohv>@T{ z7b@r~9w2sTwZ33@h-EtL_pv{k>>)?J9=xGqlzf9oC{Hos?g;z>JGD`B28677m6M#D>2fH*7l{?cDp$8jxeil3)J&y#a;1@ zpB`e=GC@w0*rU|Q1N1B-Tcsc5D42Gv33t5gF4G!dZs1#Fcvk8coFueN#cMuAs-0@( zNg6hBrdV1vT6ExOd?LWTqIF33LlgGV%_&rGy-OvMao5@@$xLqykEh^6>}b=>=TNWg zj&t2KO<&bSB~aHIuwc7j7dF#Xlzz8=3;I-4=3&Rrh~vqT+iDsq-%O>yDL7*%)egzdZJH3EWaY90N>zU7C7!>Z{cxh zp+z~YZA5#8D_Eb7uH4O~3XWt<)%-Nl&5DG#p;6SB#<+Z#8av^ge@V~&imdK1(S~a2 z?1z)llCUnSYr!>(Mnx-m;7;F9?tTZ)?#iKk8x&*jmG-ul*}l~BUScgX*5=vc(Zpy) z?;qmIny*lF9(##fUCCB@IeQge9B6VgcJz+CQgMak4=#%Ec(oeIE_ao;9iIBmG{dF0h}Dr)+`hSIfD>AGa)zqI_v|hb4wL4O z&Cy`rlwCf(w{Oxkp+nuA(mbK1qPp?Ob1FBt0II(x!sB!B@vxmri(pQk(3$gHM1|f_ zV!3O_L8*{`TKRg-kunEKtm3JP(T#G3 z%1p7JURBTQ6W4linvi+X_5IR*?=7Nk|5!)$@+`z2w#yi)>3X}QP`?nLls4F`(&5TB z5M2}FrKUB9_fOPo`}HzYKjw7mlAl8AJ|0KAYvY09zmRk35b_Z^SXBBayNCo?1MstRtxMpcd(NmWyInV}qTXA>WyGvo)if>-Dvl3*D$ zphRO_sV!%|yp4+c5Cp-W7PC9AU-TJo&TRh4GK@}o_p=j6^kcTo%AX^T!)$KZuv%3` zJDSkjY$SAE>4>NOLJq$~iXBvfIsuz@1~hi!Ibl7f@{n^kv6CbER{lL0=S>)qivi-5 zHPsQVp{*Iavh4_?3uc7{Vy&(6EP0nmxGi%FDg6-NCk;5Z8gdKlj5M__oID3NBOL_L z^v}_^LM5@P&*nz^^f7N15j>7+oof)w(80W)Z>-DVx7xBcrm^#QlVL)p9L)`hDp-ZA zi5t8ULk=#I`r1!uE#F_?6D8a5*geof*T(@@s^1Z9DP}K6JHM1?R`Z%XIIc%=$i1%h z=-tMv>^Du#FLM9+&42F9kvzDA7utL*qrC;`Pn=B=Yk;2?*xzJN4pQ#{NT$CUGejnld!8Tf%&>D&>bx>*B5$gjCn#=e5Wdg71a?LEux=WP_3dtT2Pe51Ui1z6_Me)RQzcRj771t9`NzKw z_s_lj#qivBYb&z6{;zlc{-=-zjMiC^b^G6M|L0l#$B;O>qCe}Ir0OHp`j2z{*FgPq z;{W>R5d4_EgocXt|K~GX;b3Hc$&8_eUQfh-eeg!jmX_~sq(3RzBU%M4Ds*X-FWR#kk9}RFqo&aMq$2UY zD87)5GG2L;C5NdZ3?sngLzlvOcqO{GELL~aJt<~^ta5kmIH^rj>)uL8NtpCBfA6s5 zKINL->Wjl6$oN}U68-=B6ZV(H$8w=UykRD}Nl5U&{=pO^(NctcF@t>m_dgffo8SnT z2H!~k*RNl{iRH3(i=GzkfB)-&p+D@2!S((?qJb#^+zfRGft6lFzd`FF1+>id_5B(yy8FB5mn(|2idil70iMM9_V!|&LAgS~fmr~BIi_>Bki{|J zKsuLP8{`?~FpX!GAyiWjNLxeny=Kuv~fs(9oI!j~{ zIlryeMrNjb#MWC>PPw=U@R_uU2akOt-~`47$6Jtzk6fGlZJ+NUEtXglk2?%5dG^-^ zS?f=SbRF1ra=&=&rvUz#fOs6dZmrC!_h_vq8-6~0((O9u{1SC0R3QE}^w0YUIJZ6d zXp?}ELcEmbeF@=ofbTqo0MoW_gP!k3pumeSu)c0UAFwtZXJB`-+hS0-$L7gSE$y!F zYXL=Td#9Bqu*jq}Ag7>KIE;cfyV>dNE$|8q_&}=jyVl&^0Wfel1ZEBeb^)i9bEBx0 z+GzFz86F@Z$s5)O(V1QVDk#p;l)FRaHUg&+B!`=!Bx4e@{=|rMDL;g!f#=}QO?&V| zJ}aN^)7ugfTBkynf{pdBE-!AO`HWuk4;_IcPJj|eRnw=r_uwTS@L^M%y970OB4CVXT9xFn0H;6G1sPPKyuMcy2$=|pD299rpmRzs>?70Am ztTpT6Xj)>UYB{wiMPURC+1pXJ@)6?~6A!1qzsQ`s1Tb#u!%0_zPZ@MCJx*7@%>oN# ztb&?Dok~D8K=@-3Z#af-g5e`O-CreUQcWhejAk2mThD8}Cfh-RJPP2u&$R5T7Ux{I z=C^*Kx>-m8U9Q>@cmm43h_)F608brE*@-KoKq}HRF~lvDKZqJ6&H-b@itI&TdB)vU z0a1qoo!(mcv=abfqRjDLO0Yl#GpEM8|BO}@{?V5PSZxNaXUKNtaV_s9A>UW*nGO!X zkg~{gQ)oE_;T~7(1r&ZXex@6wfJwe{7DULP^B~9cr%CG+yF=}X`3SI;(uqm7%1%H4 z8HQKT;V4)wpZ!GTHpsLCLGS|d84Zj&6)oUoIseNvN{$q3z^ui63y@&%o=+ZwIn7=* z_+ICzMuY6RJetJN129jF>V0k+0Ul#8BjE}JF9H}UPPiIUeS5C)*J@$uinhtrqwEc(yZ#_yrP-#lZj1U(N zX~Co=zaX3qGWkLGo9?r*)m7uKkXkEW8J%*S@oZ?QmqU)EW+{qJ8F63Ap)X6(2w0vX zYh-t4M`K&3v4>cDu6d$Hza!~1M4fFeg8ce*0IIb2=qH7Qax!!&f$ktg*W@E#MxkyV zn=xkwA5znrs`seR=Fw@2P0fri&Kz%|dcYC>oVYJs`LE?)m>2e*aD`lXv$S88T@;Zh zm##!Pej6@_A$&W>zmdn0F$+852K-j%wQ0QuwK7u=w~r@yR@iMq+0jytjIEstaXh5b zc~KOi_S@S=&qFNk-Llx5cqSLFQ}Mq2@i+gkar(mMGNuhlEJ%3#OQrP24*UXzF~UaT zEiluAQaK?p*LLkrl2yP9yh8AeJhqD-=9gdF2eHgObQ+g{YVF_@aqXpR0)@Z#0`%h# zz?EIp&Htpi$Yu1X%Pv{4bz4aXAg7Lu=HDSFR0s$qyAoobx`HEpLE3 zf)iA#6`LM(!@2RU!0WAO*KB<6?5l0Odf-W!w+)sXF}H_ciEbfTg52#bXySY4$0kwxie^(MXOui<+?u?`@N^u|V|ly-*;(P}N8 z-EG`ck2fFpPm1HX`BL4FTd~O`> z&(++bD-ixyumXlt{ZPv9^Bq9{mI4(@FFGEydrpHsONnnD=6VB#mhjhB?P89$N#BzP zD8bzK?nW?CVk)HPP|sOYyLA3&k({KQdJ3U3^1qwd`f-sPwiT@=Zbgz|1+6|Mji40m zt-Kl_XvDl}F4<*Bc{4L;mO@^rDTdxxRt$}bE-gqvD|SUj_~adY-0Xuc8UI=BV%bT(!$W$>CqKwj`a$O)zkXfiQB0Tq5U@983kxBVgMBP>Rn)~Jb&@FcbTD@3 zuF>ST8fs;BEIkeHYYv7&Q?+nKcbb}Px^92bAak}#s36@?IX3djAv5skEpFbVxjJrL zv6_?7BaE!n4=WUa+jYWe7i9FhaPXoUQ=M5~nJNi#9|aKp46Of9SWjxg)m2pkEhzQF z6aGF}!;K>K#R-uAys1gN@_W7NTZU$=WZ*EPbVjgqsp63ARVVwkeuHDk%qX26&(VWL zpdWD60`0N9#k(XY>)(JGV^+(}>ppc7ZrPeae<&{bI|-nFGap4Wn>(rIhb#@1bOuh8 z$do&|XHeZQrn#0T78(f7_`Q3bYR?Rw*p#BQq2&{-$Oq2ub3d?Ywup^BAGxO%)#G|k z6Re!*HcnG71j{HF zbgagYxRHTpjKu`Yw?m^!y+N8Ejs1wVE3*BHo`ee2{2=QPDR{cEQ@ZRzJ42^naU zGYx)?K>mXyN8wJL_QB~B&U@VPWmVH2)S`0R#ZO)Ym|%YC^ww(X?C-#F!57_@+;{Pl zzyBjOBzcOpY+gg3y) z93jsR!;5%~&c2oA?9SQwI=!(mX#HUro(z|Q82UWy2hFM&eflh6pzDJJLpD*LJ1GL9 z$pmASr0BPaQ69QlUfyY%dQNhB+dgk08)ociKHp7o%(GJ6p=eaT!p4#8{66V2(=GQ` z-QRBlh=gKnDCU)>T=d^?f?wA~4aK``R8)_7~{h(#97u{RQ zLP_GOX~l9MO(SLaGD7rhgWNOW#~o6@nvP#+48NF`6Xo#?5=_8qwD1xRt5Z9?ii%Ii z|0|AKF-3nyva)?_IQ1BDxE(elF@H#7jOAiSyuwx*ap^ZAsg<69<$`OfwHQ&zj0n}< zjJPS7dP}>-C$K857#Agsj@F4xTgDLX4)l?}?`H}4p~@t43XLU=@TYLe)^~Fl<~Ur> zNs+{TcJ&E-)2S(q9*DE)l1fNX`p z+>$pbBEr3_N01X6%E`saR}e^bCiSni z`kCifErm>M>-o`WD5Wz*1nX|hYd}x8a8~PdAmN-YnnsUo4;=U3aNe(-E6xJ z&r-|YyHMw(nB$Ev6MmofR+!_Dgnzh7u&CRmf;OQu$AMI4rk_Q9tB!xqWmz`(^tMk?ezS@hcrxY-1Zwl`W0Cq-9m zryim6TpBG!`58Wi5Smll@jsHSENh$CiIj4g6=nJ!Pb&=}j;{I^K;SQre@j5(xABb@ zAF;cu${o%Iq`o1oIILx)MHy%*WVH~|_#8IAt++GUd%H^*!f;FqQQkI@7Fx0w;o`7i ze57vd2{fTkXu`wGI|a8LOHrT~S%M^9fmc4QnIOJc0NHGW@3Yi9(RH^EYkFE;o0!KQ zrlduf#A8|2A|tycC*jq7LcidSW*4zMQ{7@m6CrWo_|Wo81$|C>H{?qLwV~P%x14e5 z#^C;t@?ugZ?iUSp_#3ALHH0Re>ml$%<+-9(UOAd0U;j7JY2IC-j_)U$C`1C{$f?y1 zISixl5K()%meVD>LBsy9jY*emTeWU9rlt(ojO-rUMX7_nOBMal4W*e-OT=R2*fG?#M?KWOyROGvz+9MF~$Hr9xPz1(wc zt3#P+l!^99ao z_xw!4q%e)&ut+vgA_?1flq4o79-T(^_GZe<ZD_97 z%AHY*RH!+wow;GewlCcP_ly9nJ2Z@`9MaIH;VN4xS+CF~UFab!O&R^&-GSD70(I85 zy1pa)n5E}L4o{HNPkpIEhM?Yt(1EgKz`YsA<%gjZ1^N>WSo2vA{B|D4I4OzZOBf!k zL6$auR7356-sdQN-UH-?2IM@ZK`GVEvE}KUi%>@$^CkXFs?L}A>`E2vo3?12ey)3} zJ71FYMZf3~!tkVET(X^<3NskhknM4Nayk~%54@)y8}q&K0rN!RmS1|r>&VQNAMH(< zin_vaI^Dz00{s%|@W<}pEAvhVCPc8>Q4(_qa;Ez3n@urKVEChgm-tEYF&dRI?kxpe z)IG|=XX$5k&&vi_X%TN}_~M>#J}$gER4DCc2g!ds0$vX!sT2-&tM2e+?FOnwnegSN(+InhUxpHwGlO9#;2LsoASGkSu~tXa#XL&8~zP+_4CE2$e@i>Rx|n+-6R;Lhji6HS7mSDn#)vLeL5 z)R4acPByPRvzzh8jp|awIIIiDf7^#yjzvSq3$+*}ARo7=QUUUP&VAFnwG>)BmRWY} zF74fm7{a2>kZd?Ks`d6yFl4o2YgkUret5jSpTz@%(0TXn@AztUCVO~*z#L!VawlS* zrICd-iU0HL*u}}ky^)Dm`k35w?5w3FL6R01;d>CLfi*^|ULr#BouERm zu)^9WuZ5@;#J5vr!w{+7mnWoqQHaAVIIop1!TQpRmnOAH0j)ZXK{H&ucFgM&pxduAI#D_Fn$~t zfB%GG>{L8VJoC=LrVK*zRC?TJ6kKyvJ#6NFei_s*KOQw_jR)xm2^V(kRkzItGm{~1 zX>>Ir0)Nbj`Dw|IJh%4pvDuS`MlkJ#Y^Rd{kX*i#q&@YP>2nrapUuv6LJpor{E^o# zbmWLy7V{QvR;bPkSa?;8E$weZfxC7K9t^c_Jfm(FANlWr0N4+jImV}o1M7CTm;{Y= zC!%w(LBC_YH6H&*q0E9-1BL%Jzm~q0Rt#B|&~47`~LJ z7{Y=l&znHQ;K?<`prY*4bxNb{o?{n|SyY03xhtXc>K&5URqB zH8A30^%&k=v~8P%A}Ta=R5=H;9) z56%mcg}54#wye|$=A?wGJ7E>IY(JAB;FrQKiamvcS%4$zsN54D>0MQY(A8^NiJ<4Iv&0UmA&h$JzSl7hzTe!4J z!y;zVI@B0{iZ0B;9U-yj^<=i$eW+Ym`_psT^vs}16R|m(MKBCUms|}(HsQi++Zq9q z77~un9a4SP(jNQM3pNNL?{B(e4jp>moPr$$y=2Om9koD|)QO+<20Xd4CBn9+E5STi zy+?2vNRP6!@vKkF9IJ&2pNVU**GaVe8bG&9%lG^%|53my)lP35H@_CfTK_mr@gVUC z!;kK^=Q*!hT&MITTkq|Q!Q0If#rUko;+zg#rah);_gS+~Ps%)|T&4pNU!&Wi$s&l* zMU%KFiyAqxqlSjHF{**6B`2+pA(TElSan}cx)GBkxAk0dm{T=!NGhKBi<{O|*@&b# zi6_{};anQ*=Y2SJxLWK@G3$rXtNp{a1bQk@GWD#>eT`WRi@4BPF_J94f3Sa<+Q62| zQc9eoI|uu8e{tL2Sj2kZJJ)({NsG|-%T$g0SjpD(=_NGfv_Vl=`0}T!+4!8h^ZJ~X zGiV}aId)=bDIfe^VLj+;e$@FYbUx_zk8g~t;%o#cN!`LbYRso{u?dc|7*cfvLBXEd zW{Rw1M}52cjtd^k$PRbbnh@;>$Q(vBn;PdS{rNV;^u^8m zFNtO9=_dDYPE97qi6h!uSCa##`af|!Zz=#V#lkT&^(Ab^S7M$>_f?XVk{*sGSt;3? z+-B-ZHQoK+I49O^@;ty>-4$DDLP|AIIX(a|t4|_B!ZB8 z*gNX)KTEb6mX2ZPO)=cXSMh)0ApVfs!PhlS!e%;DqfBemCz^`~j$~3x)%(#GNKJ8Iq>lMIu5s`4qEl#r*S(?4`SS)U-6DUoE;eYL9QSnd(sQP5&=gcY>I zW=@q4*3D_{*Gd8{5p6%-Y2*AkUqBcxIvk{L?w>gJvmc6pFPe>$!tBF^mV)d$GH|qp zMEz^=cLdOiDDlg5mO8#(r0Y!Yp+YsN2&iLfH}7bmCaA`|-KxZ9Q@;f8lJ_+|!$eWex6b zs7n!6rQ#Jd1m>4C*J)4J2d2*5!Nknv+t&N~^2%t)_9Wch>sFhVVy|dlA2hR)e+;98 zi1}R9*eiXlAlj2yr;;BrL+y1ut3mBohF(o46M(+em_)XsJn@xgUh#0hUrnBnB}1BJRsdo$siYM-2-v9tzl)R}UHq7xY;%$9bJK#{{iO_?G?ktMrer z<3rsE*t}EoQSK)BlDe>dFs;_U4;`@;OeayIPXsNg7B(LXOg`4a_x?9{^Adf2+3BsQ&1M%o3M?babr~4b}?nP zS$gS%84LQ9Iyn;GQ>0`2w#QC0neKyP{)a`Wwac2po+pcOji8;Y3+1G@-(es@(sy=d zMms~eX*eaP@Xu+1_&`GW5hK(yX?xNO*XRn!mxkJfS_m3f<>9HM9O^Ts{aaIr0W|41 zCs=^nVy+$6qS|ufLmMoY&nBNdr8T&5H09ED?aBs?b*ApzdV2ern&^&fC>!p~E+X3V zDJo_l3hhmlVoeQ!=~2D^45^!z4TmIabj3l=+^Oh~p3i)RrnH-9Qfp%Jo@Q7sn0Hns zhw_It+H)CuqNWildA6~V7Of+F!^-yxU1;zy$wc?UZe=(Qc?1R#kiHESRQ{ewM*Drd z;GXSrd(v4uj!Ue-7}gO(7A_r9Tx8oNqK5g@rGzJnQe>N$Wj$SjVx3YC!a(hMXQH`aiYMwJ7{X4 z%n&E;M_VcC>Wp0yGCw3O68e_!b3f=EqC~Jv>B)s%%6l(*%1`H*2l=1hHC*p1*{j*ELH`M3inzIco_LxAao)stYwnAgaA)k+K+gx8b;D#?tP8E>E{(U@ywY=X5 zjX%)%XQNRqS|nO!udoMxPq?3|?5K!=xArs)v5okm?@*pdx9O0>b2?v+G>oYx@8sz@ z@&omKc$~phd$uyX``p6Z>%;5YEs#(;pVL!zPW=D|`S37m_9d8N+Bd2qHoC_4;sfYT z*cYl-d(_6OqORfvM`I-}{S#f_E;J0u&Vo?N}rta zphO+?ALTE$nJ*G7V4d*pM7WGme@U?TcwxOHmr74<#niJ?I|9%Gy6T&0j7yh|GJ<9F zo}BEBM*}9&NB!3cOm1$1)&8qfR*fd5*!6|e)ri$I;(Sa^uSFwKj-98?1l^TWpf@h& zRe?V>4_|)CaIb7d&us_^shgo%`e=dez%}&|Qx)orb$S%UnO2rok>Qx>8BvR^iBKz< z!V&!j!7nBV61c3Z|JAnixx{3lmC|8*rh)r0$%?|m2MI@3L(_NMr?oxDLjIl#j9@Cf zv8Y+yg1o`KJZTNd#gy^)Au4Z5hl@}g1*QkCv>DDVKBxlyR`S?z+Vh za2gd6!?VM+ncsp>=znGsG;zR&)_4X0Moz(UikQ%CF6u0o z377sEXA{7}>1kp4nZMWJ{r*1CWT#>v5Y2;^@vSZR9TDLQI=bzFk|+XGakHEL1G_b% zMq`g-6TK@#>3g)~3s|@2`f}rZAPd|xG$_9oZ}ZqDg!N`+o|t10E(o5&5M|L zzjqPq34PCOgM8(V&kvjig6ggZt~`H5tSg-Wz4UHrsJHC;ftE}`w-r}neLBLJW1NkH zHL{am`37`?8)pM)QlYE6pSzm+z7kUsu2dRH+h|wPr*xDkHTE?BdGap0XhbX3cKvHD zphA!s<%8wY`APslI2`*Fnawze`eR19Xr`~V*{d)RI@*r{3R~dK;w%Ye{fn5ml>BVD zHHTw6)j3^K!;ALHWNd#_jcL)seb9yP$o%@RxGg3023;2~Qq)9sk&AP3IQO#L+hPyd2y{MWfBhJm5@bYBmAkXBuV z2}WTaPuI!a`d}6SP1;5CW&fIz{|V!R!1LQg#t_z2DtlasadTPgnd{=jIhyw)Y?Q`aUb|*w| zt8yLz0#cgs^+*{!EQgu{jo<5c@>t>%C8sHc-kO?XDuub%oNfJ@_d4aCbm{*9B5bx! z0EOF01_&?RL;Vo>Kbn-#74b3y*e7_bD$R8Ut;uI8Qg*put^c_Ldte6OLoo4hCHP%DjVY5sqDa+2!5B>$1I+4ctgop~cVJ;4UvwaU|C^ z;)$SNs`I8!1LWIdJ+G6+7+Y|UR8$CwV3@s_FM275Yk@8ASyrc~|L^NihgxL2{#Il4 zdOqdRHE<@xF^*LB!MJ7SM`Ip(I>Za>R%&-!oG-^W6hrr=8{Ey#Tje_nyrD#U#p$Z2Nc9we3RyYknpD7TM|@?)ia;YcSB|82}K` z5Lk0>xdXolto@h)f`#&lw;l0e1a9>=?__E3zxnqkEHP1X6>SozZB4fK-$vm6(^s;` z(M5Yxlzo6US%MU&yaYgmB~sIw2+*`#`RxG|vt^?i$k@Qf;KXO%8UN_C3p^gzAh{o} zcL46x!c9k=XQ0Xifot4MtR@X5aI(OI>><)F1738#+^qhD8^cDU% z(CX#7PF-Uea|;pJJIRj=0DP^2UYet*iD)*Aw>!uTaN0i>0(_@t`x%vNQ?2J&%R~P! z055vl=tNW0TOl!}CvmZ=rn@*F7&zc(51@WuTv1cp1qY7}B1>^N;ap5*UulkoL$^Rg zXNY*0;CS7mkuP|aGmhh;ePnhrf^gVh>E*^Uat7WBA!pi%$EX%c`${^ujo#X8M~9{9 zAT8M6rEajarz>K8=IEj02ag(qO5iJSqnVD-CXoP5n&|xVVmna6ma%8{pd1(tV3eE7 zp;r$iVM_(raB-H2a<_KBKo0p+pey8;QJ*!^ToPaiw(9`_{#k(Rv{z5IkuQ~Tw9SDU zE&a^N#|Cg#&#%vQ@kU~Y!{WwhF`P@|k763-K zcTiMGF1+;m){&2U0X&~g%!hI~C?A<5Ee(Dk8^s{gBk1q~e!|=vpE$1}XV_Ts3%uN% zi!u7obx);qG^0>Zv`NvuPGT`R_rnc}9J<#NqSLuk)))1=rgns(JKz1pkPG0+97dRY z+MZR{&}JlMWIF^4Y}?PLR{y=3{RdLIXW*YL?VM;O1ZEp5**Y^Vy?43)O`;65!WNWE zLkPox33pmkC@1fJ{tKf3=qR4ZMj=GZKhV7EE*XC8@e8H+hJM^BOs;4q6>PAGLPgyH zI0n}u<(-DyNTd59SmoTe)X7Lz;1#6$P{=Y=7r;VU_wdC}7NTQ3)9w@qF6lNB{OHu> z-h5RXHjT1In*@;ENx`e6E|cGIAOGWQjU1Y+lZzt|ambe@c~jOs_+4^YF7Mjbq?a=H-R5HUJwkIs(lD_`%*>3pz03}KBJ(|3{^V3iAI zmE@637IZRRFLBMhhvm|IzaPg%`5w|2Pdng7E8I}Li3Enn$tL}x2zVRtblWw1WugIz z?}v42Y2q6#J*O(g(;B<#d-<3=)}pjC?2K1{t~k zFV5oM^gFv9yXhvErC?Nruzza%CI&m`F`tjP$$T#+(AR*7%>^;|9w_b-g>Q^E#+6+> zMXz={gQet5<>5Pt9nbh>8d_ZhV=$bDv{+5n($IdVZ#Sp#{8UB!%H$?K>2CeDZIkmB z*vTTMOU78JdjkJ`2!kXaKChOHYmSK#kPjm#+yZNRZsR1q3V4vspKxbsY^h0HJh274 zV;*|7*x?8R_8o|`Cn#Sy4Jxczhe`%QO0RQJCF9y$5H(Z}Ee?v>qrJ%s18${Sf|tkh ztfK^J+iQE$T8oAvn-C)=8`Uxpk4xlU=Mo!UA115;@-VBsnD+>Q-96~9wr9*+P;Ome z?aOlDMu>-EC*`bOJMe z*|Xy@;{NzRu!{vXYD#rvRsJkr&E%?2i8GIlKw5W9`a$l(8HjkkjvoAvT|;(87ws#y zi*lu^0?E`{h@A(@eL4ry&mB(<7z7Z2gs*1wpu`;S;uef8V|pGS*^0o!6d$=pt^&)G za()ojx0V4@pO#Ys@?FtD;{acpkJv5~p^RKIUN%;c!{o_M2mX&E2Oq7yT09qB3DY$Gb*0jA+VjY4$&V0~D!S(@ zuq>-=vF0}*JV!MU)2+SWpwRw$TJDeZ2COC39I%(@)z%de5Ldv>c&a9R`@z!5>pW#m z(E!Q7I0C<`jDT;mVACLzivWJCIhIB7NVrkw{7*|G5$3%LP@%nkE28NjEoXQ4jN&1Rn;_KU7IXOG%iAr;zy?AEZhU$q zNWF=U#&?a-s8}_J=CLfKNe}_h;Ic*Gkk1E*FeGv>?c6HXdxdhOw3vR|s|+qjjz}{fz0<))?4G4l?0~c}ErFl2WYnhciJ) z9?Mgsb0&Egvcd2Qq|hng8QTNCGGN_a%=ME_cRP`eWiBe1aLFB*m5qPV7|#cBW?mQ>i!{?k`xXl18hHE2f%}_xti;4S zNl=O!dtJrhkUQ_bI-7I9`nxS1BzeThr2^{w{lH6AD@)zobc*P{!^A0NL@V!n$m zoKLnBwoKg^9qRnL#0|g{>}0iZ9rA>hlX<)EwjO~DfenBkOE${6MC3!8!Z^#ua=~(w zJ7V3B2P}_-Vd`(Vy+p}{T`XBqgHO+-LJGf2#>Mu#{(BN@X^z$pN(fCcH=hLDY0OfL zuBLJZTWeyeG8m9=ln!w201cuwOV3jUTajK}U)sWZA0$gDh;=f;D^TO>VG-oQxh8W8HO_Hy&}Hk0oFb?|~rK z!iU?$b5_nbiHei>IHv$>iER1H{QXs8e?N0=&3h}A_+y4(ON*%32OP&cOV0a4mJ-|V z3OQjMj2WnZkK~>wT_bkByn<#>Mx#)G)v@zzTUp9yCHy*x%ZYv5=D*QK!L)dhs<#%p(5Ji*fSbiaANfnr_D|%FH_d5OuV-I`Tz{^=c zTL_JtSq|x_&IY5gR!E|~qp?WUBq1$aLYlGT+}V2v1>ft|h-)xr2y!5AZHqH|1A2pm zxMN|pAHME&@{QrYd`h(PlKy{YpJiB|>3aYf=H1N*Tqgb2^<|Ji<6Q4Xv%dbcV+gEV zI27DnfH;bC%`D`0|u!UZHVPU+wN(DO}JZbL=>l5x;r2} z&3QmNYXl7IeL@5X&Ek^^rm7Ae#eo|5Y;W^gEi?eLwLLGISuNkRp`=aYU{R2GoPnI~ zEg?&{H0!lDRI?LAYfm;qC9nO%{JrP$|wp%);hL9_kQ#T>$uQTJi|6e<4>%RkC-m2p6aTno2nWT z3VZiXw#b6F>GCyVz06Xblbx^mX(*fUGp}tB83kT5-!yUuV|%ox4z!tI9HAk7|5dB` z≪!U|APtqAf5pX$?-g=+Rj&=`0#s7BUw_~@^a??d_#Ps=+fKl0?Mrh!!76e%X7u9g3 zxTs%aDL&BKTk1^$*UD(liYtQ5*^Mr?Q~Yeh>4W5wAH7Q#@vw)lTb1$OLWh4%wS@mS;4rK9%CFQK*qlzK;Yu6P z7hbEvaE!DzaFi4Shq}G85`g`|#t>8VLKE5vP62mT|>pC1m%fK{b#R=@p?oyo=p`-(>P7;9`gy*uqeeIsJCnu}7e|&tr9XPCH z?lZ??VJ(q=8wuYk#4-i zvdi>Zgz^L1_J@YwfrWWHaH)Vfa9m0G%iG)Lp#8fK=T*Ps1nqAdi&dTNST<}W3TP7Q2h`dLuc%>#}K z@!S8p*stWh=LzU;wzTJ~exsLv@MP2I1S$xDL*Bc0XdD5KH^~AwK5ueT4^zXDLVy|@ zCppEm^T|r3&8zIQow}HTf#o9TaHnSmpnbXrnE8(Y*O>zwTxq}w*AKvpVA~9nkF^9Y zcI(77g#wy&a#|q5zYDkv8 zi%>`c)^oWB-vdWIxk3A)V-A*HSm3x2*dY1%12{q|n+NRGi&cJg#hC_X&2*T}YULEo zS!gP4Usv;G%I5bR6~J*RXV)dWf#aLeYd>UFZpD=a1scD8p zB)1=IW*5)DLnF9B^9>)})72O65+Zq2rNfS7Jzn%y~ zvR1EkS|7JpX+P*zFQ1u4OIc4dGPAV+*RLGea$LUNrbo(j)zQLQ?DI>YM3SZ&(B)uW z@Zi7(;5m}+Z7u7Cj=jnSUh&NF_xJaH&+Z7waW! zaq8-5P`;qYG8dGXt-10#-eu7FH@a zi?_GFKo!-(VSh0L0xA;F3Y=xsDk$;5>DybgfhxYKt@(w$Ap#m0Beb7(8A5T-G@yGywqB-V|2= literal 0 HcmV?d00001 diff --git a/images/grpc.png b/images/grpc.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e8c45effae71c8c7c6349c10e5a3e3fddd682e GIT binary patch literal 21505 zcmdSAb9kk_7Cv0tw%w_wZl|_w+qUg?YHMoS?$n*ywr%UT-*e9Up7Y_a@4xT4uIywd zS;@1Lm1O0<*N%{v6@!PtfdK*nf|n2%Rs;e9g#)B@p&$UCKW7qgfPmmEErf*RC4_{C zrL1_LAO=}+^iXzT<*+AnFhxVPBdKD`dd{r+UPJs|*PbZJMB z5iWrI;@75<35PQ&E;3`3m;wUE0+#uOXs(?j-4_`f3oH-u)-(2&38Zkpl!dPSh4)pH z-;X)s4n$-`Jh?mO4vxeQ>|b*vQ5XV*gzh;u8iE3z17BB-1_5HrK$6IR3KEhZOPS<`LLWfk!gXHOYt6%Bh<_p- z4G)#xYpmo$Aq?0z{ZbMR$s!AfC(@;g3!yBxW|N|%DD}>BSy5z@D&iYXMtD|v_N1DU zGA(=Ff&s@v=POqDCM_9~22!UIPeqPl2p_Iv>=7|TlZiYi=z9JuMmgtK_!i7ASOCX& z<0Sd1TmD;P{_BW&ryWJEJ+}oN7^V(bNTT(0jGj)N7h(s|IimgPhNZsmt@^atXoUs@NYb5|PBO zZbjPG5=6aZ5z>eG7JxrKjPD)iBrg&sWdw=*MTlK=NwxJrn# zUW!`ub1<)7UwOozfr;DSTA`}_akmMydGNQIKq!%4C zXn?KGMlon=SftLW8nR#*bIqyOzgkCsPAWTa!hz}*O3MKwH{|h5=1tL!r5AQJaCSZS z%=(VJ8RJJj4K)NN7RVPMBu=`IM1d*^br5_JEELRa&)|Zzi5ejcF_Ur(`eew(l*$p) zn${Z7nz}4(P0CCB7$;69lt4-yhbFe003$(O*i^Vth+0@th@e=L(Vmf>(V-cv8JeMP zQ?1#yO5e0+skV?)@etoMvS{q*h?g#xBdII7DQZimN8uLtMzxBjB}qgcksy^WRQ79L zaZ>(LX|t@NLaX$xELIh>Y)Z98eyhY+_9OmPtQ=t>;7{?-qCaI)rQD@5^W5`pEI1RP z7=mNJ&}UPo%PmUG5iPoKoZ&Iye?sUPrHB@ZW)G>vEM*wWSjnUux=$ERI8K0Oq_TE2 zj%c!JTGLf8N>@o%^=q~?dN!V{+O9gRg0Dt3xmn~c`Q{1D*3CdK?VOD-t&}@S9zo+5 zXw9xT6ZjDL;C{e$38j`=RgBF{EYQtu6s(o6Rh1MRm8Ishi_|DyrRj2m8Z9$&M0*b@ z4*3qr3{m=^`lNL8`^EcKeX4vQLiEE4!ht~)L3qL2VtIcz#tFqe#HMGjWcSt&#^uC{ zVau>?oH>qGSYq5T0Pc71mkhfgbX~$?b!C)g%rWg;cusJLjVO~Sj2JMk8l_I8R|>TV zx2Qg$ncFMQHg#?wVvb*-X+Sk)NcWV+V9wR}{bS;sjh!v_dupZ~lO5|-Lv53IbDCA% z(ry6x;Ox@(HOFL=29uWL^aZMl6IE7Kx2n;_?nS{f)M^Yeyt5WiD-3Vf-$9k)ODDYgtgTzOsfT zG$mS-%4R7}@lG*!q?n;n(PP@Fo~cXyRiS2Zdc2(`&uVH6OWsR1)lcir>!R%wE>_N7 zXP4WPPBqRwmjZX;*J%ec+c!gVGfLZSGk49H8&*k6AT_2n44b^0idULfvV^p`(zy@3 zE#59Zdp?+NId`PbA+Hm++^0`7TWdYjem!5gz>~lpz#SmE(Y5%*Sami7iTqLgw%aMa zk3^>OrqhSN9`*0^ZS7UA_mIYrd`BMRj=p)R(p#~gxs+O!vfRrbLpJkyL3B{V!A8N+ z!dt;FLCYcNVSY09k&sa4Q{;2c(mHAyE1?n7a9MiH)BS`F8!kI^j=jg`G}=Egw{$kV zZ$BPpLSULr8&WtfjW1CB*-mJMPy4ef7StiDHQ51i*Jh7$kPur251+5y@xB49CHMrI zF5-RwI-&z*i!y|QPNqH8I`x~Jt?Z06cBW$XEivmi7ZFRZ)$2xV3(UEgS&lIEfMIiS^`{bll;p-A7}G z`b9IByX8*SPPKQWPa5A6BKcau>mS^VULucCS-n}woY{T)25q%c0~l4PU86C7Hj>_m z8R+fAbp3oSKQ}>|0>=aU4e=dvp6`X{B9thaCGg0}6CNc#6IJC-Q$(d&#*kJxG=%c# z-^+T)S`xp={FKp@l{MzMIZbW@s8^K+l;~w#(%Q{W?{>p?^@?}q+~+b%GUalaKW5+- zqv@FA(>0hg%`_%6_$rKC_s_GPsGM#O-`SR2E+gCgCZw{LIJS&G&tK$xBj3x4g$sl= z9jyd<17%=uLh?hZqJCgh>D)IZ>3QajH&u3?-x+T1!t!-|Xx}(}C7hF2Np+>#YKv-9 z=(;+2T;FEXHmaf3xYs+*|7lklS1GFa)Z{UEcyXM%m9e6-+P7MzHKf5=)U48Je!Sz_ zX~#{@OZHmAt3&%3ss^#3|oNf*B zarCL{o%L=h^R3{Co$#7R-fQ}G`&H;(sK`ZpW4`^;)4<0|$Wv%-Cq66_7Ze8(-+{A! zuk>Z+kCEqa3PA~8u3zVu@J&Pxg@n@5XjY&Z-s)|7BAryJYuc^QW4 zScFr+(a)SGKELO{tB}{IP0TZT4;`-i%q6=p%`UAo`ZsOc)?K%vIve4&n~L9Ra=Ne` zu8&+tuYDJXC(>@3p6HZ(C2z zUM+-PXphIUdjrEyIoCOzo-|&sZAPEWs|~kDrc)Jqtvwv8*fSmn2WhGJHDoof?UJ9< zpGF^69ZQg3a4&a?ZklexxF?yPEm2$8-D@|gM|u-HH#~@2n4MQ|@~c+M9d`v+!zprQ zxj9cVpVF_|H-n#2drQYPPj9fVZ{*t4Zrf@=LGTlk5Zf0BK;|bv(>rZ3-$gwz@Q{Q( zeDV3W`3w#`9QZqdOGC1E*>g6)dU=uzK>fs^0ApMIa{xFvchF_1@a*7AoVqKdB5ej?oe$WpSdi@IT zMSWlXf>j@kYdV~)4FFs|B2CmKOl4$%XaH#_ATVGYAaFnm7!Y`YasNq+0#gBj{wp5@ z2q??~2<$&~WC8JCPaGipCG+nXG$9lS67UTL5Zr%({9PLq?ic9aX&_xd8IXXIkc0#v zRx)xlF|l+1bz=7~2_| z(7W5%|J4rA4|gs=(#FKufXLm(+SZB7ormOKHMjujzp@!fi2hZ@*@}lmT}GZr$j;G( zh>f0+o{@wXhKPvhhoiA6m!h!ff5ZXbcu35ho$a|87~I_4=-rsx`tL^mZb#U}$;i>d-r2&=mgui`4GisEoOwt{{_5zT=il#X z;%@QZo@|}|^Roaykm0Wq1}1t&hJV@yi2nF1mrLHl-Naf$*un-dW`I6;Iaz-EtNQ<= z;J+RIkD&U01=%?m|5x&VO8)PXDo!SjLUuNQ9-VprJ6rz|{@=p?2>xLB>xci(K>T}@ z|CI|EW?q;d4F60SFN{f|q%>d_@hpVplmRh7$Nu#&06wVz;jb7FDC3U!3_Ag_wuG>N zvODm(52U`b%Ht<=Sz#DI2r&{=_OxIsMJql2iA(maq&~t4(4I zQGaB8Ff8EzjVg(@dxL+&&}a`rF@i(`k@o&KLII|Ldyo2`jQ_kM)?d-2o3n6F6D^SF)){^>~e;Oh=u$v9KHD`9g9G}-ul>>e2@m1IKb#(uh1 zAMj02vRh)UfPUorSFIgbXd^7Cni=Jv(TM_duh^5Qi*?3eOV!8ZCtQT=;VU-F_nAamXJV1_lL{Nu|>7@9YSm(~JE;5$N zpk~>s{s_e(KS;xRP`kojJ$;dNUZ30dQxwj6Bh~WBSGM~2`W!mRg>Lhws+*e>_Er=5 zgWZC>>!$lYoX<yMhLxA5ZcpuiwUoOmEjEHAux5Qvx0y-hLLS>9?7q z&#P8m<^CUK2Hb|1{#{_3=xsQV64&i!?WGzty$wE9GP@vc=%py{5-(X>G|4VwZ$%1Q3%X&wnUDw zfol&QYAlP>DSE+MFBGcv6+-bDc54Kg!TLS0`uwX7POPOTFO6||%dC&~yO=+85GR56 z@V|9Io(<|aI8P#xV!qButfBxz6svY;c!)4ihKmImlU|!hPEPK0y^Yz!!(-G;ES8{Y zn#DYrn1La7GKYtD4ciaUXXx(k?s&OMAJF%NgapG!JoahE^Ubcc{2bap2mz2WjP9y- z`~vu)l0Z{6Z%K{~vwslA`OL`{8Q%qZQ|B6`vHn1-6Qum5x&e@Qz}bxc-~3tlQBY9! zhkER`x^KG~`+yqqSDUQHTzftqaYaN#M!);^vRJIQI_#gHe`CLf#rQUzoA(PjG?U$K zw%%lHJO|yi00qLFx0W}>E4DXC6zh_w?|_dKHS~7)S$DEGct9h7@kKnD9{4>1eWvUzSx(v&9yFa2Rvh$I2(2 zQN34n7p5dqSGnj#ZtkDn(nfY5mi&FE&UJ&ODz`&2I`9XNIZf^mVHV@ zef;S7R8{~HKK>zHqAtnVy5ig0qLq~Hf(+Z0EI~Kga(RnIR#bcv&8HGM@h)Y1az>@< zK`Q=$CLwuE9L2suQ}w-1uO@2jyC63748{d5M~C9W&wdl0#rV{0f#ghA(yexz(V2;$ z**&?rqKmDSv@w>f#7s(X7d%mdh0}y6H*_Ym6l=e`cVfxNbrMF&rZh}+--ort%$`wd zb(=VQeY%awt|C>9q->t|;6!J+n{*Zm%v_ozpO46A>3k|;!=Qzi>oyexue8hXufZ#A zS#;VZB0q;KR2+IHN#tkU)$X**^~t8RGh5m}fsD>J+L^1ts+h7(yl6fTTo;_EQjn9w z3b_~$MLZv$PN`77NTSg2*9DIcmQWL9(2yJAj*iZSt}a1kNrPSfGnuRX)m^ z)j=;Aw#18cN({}9%A$r2i@KleUGje0;3}Exlb4?#$gXg(wu0@gXzlAe#O|}XxOTZ$<$-D zWO?NSy9j2D*r@m49Wd2ESKBJ@Q!~t~Z0|Hf2X8(xyQy}&b)>#MJE}tYDH+41@IhRY zxZG9Ve|nI0kBi3CZ>(CPc8HlF_bQ3PXyl_HJJtQLDj#HEml#x#SXZ(Bo~wNe5dc)G zSoJ{!bMo0(87L=Sm6JF>T<=Xw9*;1UqfVw#cWhpe&l3E*E)cYfwG@{XvCNW*i>;3c zCGKSnVRkh<5yM8**<6y8z>?-{NBQF`_VBpn=`+H|W4pk&Xa}L>@AJjg?_d}8btP+BJVh-P-0~q=jD%8lS0}%Uzh=+C|u}hi=(O=on3Vq3?X$d8NrAjSM$rXYOv7ik5F}o|P zV5$h$1{n$yBZ;ppk&kh6BMzc5BRr_XhMWr-PS8j^?QFhJYI^4#xz!}-TA^HqB9qA` zgPX6e_WU@W%cs|j|7FkdV7DQj!j8u)kEiZlW<`C|6)~aCmJ2_6q0y^ZC^STM@PY z`!^row4dOME+}^qez9p40Z|_ zGPu$O7Kw{Xi!=t^jShRFe?~`{tnyJH8X#ZT?ejP5O<=S6{5Dtj_!P2(mi-yX%?xnB zWPsVm%K8SxQLo~P=iSepJ*;e)V-jCiyK<7J5`WqjH&_*q%{glc3*xGEl;iI03QP1+ z`xOmko4C2mMZt7}lFOL=s&^Pd!5bRLJ%E7>JzW#tX+GO|Sh+BV?!6TI^CY zfNi)IPOx1@M@JhS4P28r#u zy2prxWeYZ6yS{M?Vc@q~fzJrm?E0jaJI}M>xLrwn4OL-de5Zmouy=m=#a5FhtLU)n zYrSdQZ%#JhP-_t??DLdiD_VpSIzABPydPyY{#u@CZ!WprlNZrG%79Qd^QzHNZiHTJ zVE%PD0UQ+H0Z%7zPulMvM$J$-NG8Ui2uW6@nT_^OX>?u86%9b zx7e>wtzu$`akDgd$I}xd=4*C6No;}0-`l&@HHS16+Nom^#aG|%O{|na39EJ=pByLYOxS-cQ|$J;d{RhB12z| z`rQKpy{q3|2$Ro5%omgbhj1uSp@!KFt?;&Gcc97hDXOvtA2${X@!NPa&`E>%SnT2e5h`;sNaJE3$jGh=`xDusw)eDTiR zQskVkxd>6Jua?pK|6 zXw2iFj8hRCF$1>_e!lv_E)s;Ghqq<5Rdqa(X8@!m+GssKbT_KIsf)|GL>#gfY6TmuR$Es_vQ5##qY}p$jgXL%^vlfx0pAahZx)@eF*NtdpalxT&4l{om*xx_5`k1447P} zK2MEYI?84}f}f4XPS!Y$ubM!R9%HZfa~Sz6F-`jw_Q8ZL{EIoMF4!*;e_TORC}`+9WQb&S+Rt zCa7veW{CIc%*SZw$GOg$^B=7&H;#{wj=rQ}M<-ydPt&Pz8TZejkJSi#XU_vK5d;mC zzF)SXQF!Vs)6#|0s^oASF2g4sG`{ewN6z73 z6XTJ99qakWbsK-QsoJVO>(_SyQR}`g$zA2>!l}_1u&SueP~Jxr@Wx}}F|RKh$4^!( zdqlfhD}Wkk z)AZ{8xzHa(@TVg|e5-998T8jixV*enWCr33q*be)UaZnOiJ+8bTcecC`i0L8GY$sh z#l+!+fX}7O77-DVm+SZ0R(ohV1%ZGk4h#%jj}V`^E&gGKW_`N>YBi?DEQ(S8*v)Y> z$!0A$Q*C&V5p2$nV<67kEyKZ;$=0Yh3(R0pnGasu$nzf zc9i$xZ|Zq1Z_Yf`wUQZyz27;oBcfURfcOGJ;c+#`71Y6{feikr;RM_DulCdVrpz?<{k`Q%!Iwy|1yzN~ArHX8Pt@|aXQ zoB$I!kLK_#*j&lqn%MfAbh~o;*EoOqzDAuq^idk;oFX8cbs*nuj16%>tRJj2FsP ziZ=1Ehg(wLUWK-Zg5g3+i|NQU2&EJHc383qEyT}Y{X+Bc0;B}7;z;vlzo;Fbo%kl> zI58XBBHL3^7)$qp@Ls}PkY7k&kAKd(19tbQ?{*=pi|X_U2K+f;#c~rVI(x3)ik7Rk zu)^YfNmSN;P@Ex7;7}Iu>>S!c30Y+4&|#>JM=lAE$n8V7mb@rRhB16;m6G_7+ZzIcK zo=ze=#X+yVf5SZbV3#NXj>K@Mnx6N^0)V@Bg37g?|CFFZp=b=we21Ie3YvmWoJf0X zzNntyK1D&Su)}cOlWTdy)eX4PI0+fL+r>~gFRL(?0tZ$93HHq=a{GJ=5wP~NvC<{H zRk5HYpSfV+N@8i_;dDhaYsy#xW2sTtqmKZYD)YzB6-OMkHB7*9l#VSs5qDPdG>V6H zibX~0n0#1KC&!V$)n*h46DHy2y~fu{}A?@Q_H=7PS-8WSsP0Z zQMb_vJS!N5>brn?@0|m4we8Cwhm;VrrazbA4W;G&=3sNgZS>ls)bM$j{yKhdmy4FU z_i7vz#le9mOMLTLMamo=#wuqfQ-Msq-z`6jl)8(>B}cOQHTRO5o94{C2fqx zU{w)@K^0pVqLOqI!qQJb!@;5XiaF88RPg7VjlpG)G*@}vdnF0$Z5)>QL?ePFg3s6{ z^Zi{Ya9c>|av*?Z|BCSD%UZ#lRl8FGq(O-?IDyIwlA(;8CwX)jMiWA@7cr%($$?rx zhtj?x`PzK{l4oivf=t5Rw-Krz;tHXOGZJf91)J1Fl5`$iT`WI8^u+&$>DgQ&CLC%N z-b5vN3;gvDEcyotn7PmYSTLLyOkg0dTBqaBcQ#B&1iUzt_g3c@E5C1bL`(oO8k!{GMrE6BTg5qq^_;_kCn%PGj-$OqK}S_C^JpX%*Nnm zX$0I)%SsB(@@+zx%dDsQesWEklX+_a}IDf0to_v2aB&aibVV$-{1|P zP8pRaVFm3Uwx?dXcRz4{zPAtvNIsCq!Pegj>G&B0=e4_s;cQ4BI*X&ZS${?)rDhW| zTe15%QnW={FCi814Q(Jn(2jMQsgw&b>m#|K9GJv{md?ae%Cm2o}G zeG>&aIUML33q`Q%hr+&>KL!7oNdTCo9o(tpNDB~?sEs397&Tx?k)Ss2=Gc#pZwNXO2~#A#4I47|AdSO!0XNd}AGEh9uF$?Z-CJYddrY{m^+H0lfNJ(Oe z{+Le^g)%dfiG#-t!(P=cZ8>PHJhbQMrpwF85O_n4KhPjWG4JpD=lH_}F%1@A1*NeT zBsHi-S4GFpKt?|q#~yn=orWMPPf+qr(b)42-wzD7SwyLU$7PdV;>UUuK&`Xe;sufL zkO#w^pY}~GlWY)s5Enb`Fr(1Rf6g9r5i{b+=`j!1h8*$GM?*s95Hd1~f%hJWju&)_ zH?*d>#1C$`2*Jc%8Yq~_Dk{ml1`P%fEn4$?*|}BV4Yj*R!@1d zGI#bXq3wg(5>wFRDu&TD%6F7)S&%ChZHYqe8RHGMvlD%FE-1E0iL`^2&~exKxDbPy z8Pi^gB($n%d}rN&GN0yB6QR?r5Lxr$@iRuthehba;Nk;X85Oc~ zm_B>iVn)P_c~!xGPTPk!lQX6Y@(Jdm>-(;hkSvFFaAqtJH3fx;iHJgHo zWWt6KcgPJ(et~LTZAjkd(tH;oy$YlmnSbBR*g8(LcQ-ZooA9{=2h30&3##EBVj_jH zcIXwqw|8gyNmmr zxO19R{b&&9mNP}@AlG(;zS$pzG=n-)@xmh95e$=fDn2}AzDZhiuQC}dteH!2$5_yiF!s(*;EZCw(1 zQvlpgpK)Xe7^gQ;Aj&=b(@c^N^)WCX_KFq&Ghm8$+5fkaGlGx{`9lkhUhggfkf69& zesz2Q=;fe&Bdwp=CHK}lQ6#d{Z!NaMMqDj%RR~ehL-wb1um*kd7*w}d|3F8h$ohTq zj^nM60Im%ROu2y+2*inKff|z+IPtKmV85}RDbJv z{=;3h;C|-na!@7`#NWhjudh0aXY#5HI5h7-yaXFk2<&?$I*ohA0%?c!89~GUOg|Q| z6j&Ogx?vwHpkaAIu(<2W1Tm2^8OB3CsvY_DtiP=ZeXw&l0P*Mg7;x?Q_h$Jw#^EIh zAclB+a611Pz`tSdNhJL~eKSHRhOqy(^DpUIN+9?67(>rD1@(Gk zXna23cSNDW|IlgWx?NnHTwH%#Dm9xT5eR-fhgC&Tn*Mvqx-%lxN@A^VY?S%DJ)$8Y z5h-xEUE<+$*#D9j{{KLAMp+ez#!!9x7JVJ2^G53V_Gr`Y`9Nc{QXitIq(t{>FQP%b z&5vF&pA=-W)hgKHR6k~^-+@P2>!Me_@y6NK+}}Vczu4s7p?wroOXWSa%?EWXgC<@m|0O9u;qD1_mXXG9rU2D^X+eC=J)vP*zN4WHYn2{${gW`@2%M%VMpWE+j0hLdEm|z{1YGKAas8x;^~z(#^ zv1XxVISF6^hP90nUH85W&NAJ3uDBw>Dcmpi^Modc8kUQY>xd`P+Ly-V)5Y52(rQ|H_%hXF86{ zV;M}deQ+G)a=TRz1}ZxhxtuLZ(D^TlpJ^%f`8PG&ZfGKa(go681hY*A*}IePFL zC3gnmLiYqB{pt2d2JjRx%y~^ondycQ0TpsU;K5HxF4T3yCx>lN4M(jG&Mqat!a_%0 z#|zaZxtdi{e9oH4Yfj-!Rz~|%L9`xH4wC+tKehaxEq@k)_y10y9?A^rfSak6Z#uMA z4s+esGnYEf+3st#&~dhV$a}t9v^Rcm<2t2>Iyv4I{`%QJQlP2hcvDSsIG%7}m%}G4 z5w8U%y6B_xe%eCG{-qzqN{**4)#7BQF<*f`N#NTj(O&W_jguH9hyJJASHzn_AqlDO z_o?^uI!zdlwA;Yft{Z(xWU^IUPwNvjd@2_3p41xVT=rVqDN7LzyVYVefv@^F^~l3f zuAl63-0n5d7WlJU4*+fuoIqyc9N}h(UK@_ZnPh8IMn+W|1~ROEy2Pe=oP z&(}M%kkFdHqod&hd(g%S<+8a^6TyaS}Gd z02uMo&sz4fz{IG*3L_;i%ayg@m^upcrQ4#bk+OXD^O56gGgLY}_x_~eMtr=%v$-Pe| z(;s@x&&mO)a2`beCIzGzrIA|O3t!tlJP5FSk>;BK+U$pg26%3qCJ$v{L0b96Cw?gfS*TaIEjpcc5yl^kDFp^*`@G}NBI4{I=^)y)K z$H`pD8AX&PPxZ2PwRYRAAZeTHg(k=-)zAA&8avqMrSGX}DzP+~T5cv&dB z1DDfzf$;UbJGr&nN+sy5I1f3Wrpv*m+A+nEpRD_%jow6T`eCLq$(oQ=#Ig;UUozH` z1OKqKR!SV2E_)f?-rU(54*`oY+s|jHtBRZ45pzBq3eQ06c=(fNt`VV)$h~&B)n%hffCn z)-MpR$-{+}Q`tU=H9dkU{|fr1x&_)mF)w};87D0~RvHJcVRDzE^~}7Cn7>P_h$#CQ zO%zL6iSAx1id!UIf@z-si-v{9MV>rDb6}Vh+E@e?-EBqKn}Eo3I+TAdFFrPH;*Q#P z31+2Au}G4|W|hSz+)yWvHI2`&+qwb;LRr7zr=Qo#%F3*;!rCvpjdm5=>nfRF$Pm_K z4qOPoDR3yyt_}Jmc*pVbBK&)`kxYX*LPEE}a5bTxg%-+`#CXMc*w!s;!I!W0e24`E z1RS-K9A2wJ9YRBa!Nkz_DDZq0oEsS_IIOz~_O1D_KAh`~&@V=O}w&poR;i_Rl1phHj1Kv;rz7Tn+I_-udq z*ZsaWiK?my=Nk9VraYFK}g)|6B10#7Ac~2=L-wPss1%-%Q_#=rTaAYnF ziiBr2ezV98D(`^LY8US?Co6NEKff)tsfXc7mXG;tKZn`M^omCSU@}CZU`iy@B(qp8 zN*~~HItr(J)7Vv%+<#coOO;OlKAO$#W;|Oc!SqMDQeA;YxpaH=XEkoYY%cV0EMaPq zRO+9JOm?2gM#}}s1ac{gk*OS>4l=o%byC83fH5@o{&Gi7LP8>{yG;f*N~&Wf@#j8W z1aO+a&D%P@jJSHa|9+8@ilE3Xe?I76Q|`{T0Iyf`R)AUb)FRJbxh*)?xh^Z5NYVS# zoK1v+M#fH`n|vJ~Lw-7G(~yBLo6XsgbafpPNvO@GD_f~$e$)mY**&WzD505~MF^i6( z=}7*r)$3Ay_tmFVnC23#p$?{_=NMwW-ESoHMMCOX(qgq;(3GJc3nN>>2ibi7_=I`OuMcA{$y_W^$9isK(2@b z>{FHYy8?^3VprX}!-<1|2-Hauf}5TGFsVAjLFLu+l?Id5Mhn-^HM<_VCaWdYo9k=) zlMU|IFK}p)NVNEPQn6JNCI}vcdxySY=md5<-DE!dZT^>+quh&nqoHWzX#BK~yWFqF zITxT0CzL=rEGTRFK8%qX}SDOU3yY zD>cZSOszoPOU}1?^giFVzD`TG2N&{1V7Y$+>Ds?NUMM9-?+!*)q+-q*k#dbZxs7U; zhoV(4>A>$DM>2r>$x^RfGDm^!D+L=)_#aiBcO+UQ(QRG}jcPv=mapct<%$Pr+DZIz zPDhhi{?S~-W1s?#M|eXFH>y;U8o6;)j!}*GrqleFtN8*>il6K+b3X8!jLnoVJLg+L(J+blIp*rY8{;Cn0qxp@Oju2Rqrrj#iUuj zY}8FAm#m7M-$dA@f0P-#6U%zHKV3g{{sT<135y!r5mPDH@}sw%2C*j@k?(!FKwBGG z`tYG}i3~37_~CqIt^jcNx;S__y743Z?s03J&Tf|@#!EtBaBZT<;q&SY4G*t!!D2Bh z{P8&<3h<|-L*%)SlYCw3`6OR!*&_eluI&vCN>QG+ZU_uKFiZ__ZbXua*7d#-;a($y zvvrw~yT=SPo94diG+K(W%Fj)L0>#kf{d#v=aEogN@OsO8;dJs%mMWS0Hh}%U-7VIa z;Dn1JkH_^qO}{Qo5G?$!>HZAs^+AO=r`O*_{7tjd?sB$2ohOt)ECf-eT9rWphLZyD zcpO#J^C>C-ar9?7mrXN_$MU#rJDP_jI7ut?SLRnNk*yLBk5nftk3b#B zh*Vb0yGu$aQ>v*$&bliSn*BBhS4~z7%*@6CI~yBr@$PaPN27JZs!S`s#{&JH zRWD{=+;^eyAG0RKmbdf8=`3QQRcw~lhqbQ(HEHE;XmZBERJAu@fnMxKam&fDy< z?IOA-MV zNe1m!B7kY^Y&s^z&_!mmDxBB{@J0U97XoXP6oF_k5>FZiI4?w+fa_WGd;PI44Acs( zSL$g#lGSwM0p@fWKyBHqmx%zNK#T$=ce*=0=kT6fFmTXpAEA?gpS z8%T$@F9EKc7l3)EmIk5)^VdT5hk7Oid6L0m+^10~7eASuLFJ(YbH6d{!0CX$(YOh- z4D=1KTWyqBtkJV$ucAa1wCC!kwr2oS;35#=8>Gg95#Tyo4Pnb1l-Ed{TBARbka!7$S3^ z5Zx)r5Z@0;Y>#}US1xG?PWDm_S-SU|B)!rlr7-9{GB$h>(6?ks{D0|NlyAC0E~%-MmQc_DNZRJ)SD-mzjkZM~yR7H~vpPAYVt^H@Qs^+2LPy{c zet$e8l;hqz3 zMhOj`50)LaMBt30a;ZF;_~*;zUjv*hmG0b>d8J8gR=m_}w)rwxleS+HkK-{p_d|>3 z-cUiD61-n;IBlk77=sj;h{0>L=M)AU*Bk1bZNBkh3$0K>^77wDZ;quBN<@u{VD=SO zG6qU@V8<4T=x;(8)7VfUQ=;P&al2z?tS^W45<6Kl%kHz8J;w%pa8;Jc;BdoO(J12` zNa3EV1mGEX12@{4%_d7}C=C23P$)iRXC9>hG#b+J8@C85L@BB3$?RbI1#*~Y{wCA& z$I})#s!ItPy|%h&Oyp*|Mw4Z-H{g$UlO&d@3Tx~GCjI^r<(E&XdcM@mW};U>=`n`L zf_%)$J!7kY#R;G{BQxD;|THPrgq?&qq#>z*if7SlK3G z>iJiKGJ$A+%0?h{ty%aO5(jTEvDQk-L0)QmxzxE9hqA0)w^gd4?h>7MPw;PR)P1VP zebj`H_|@h-mfMz(jzn$F=CN-$r01{(;<*jANw(-+B)--M-#F{vqp&V|Wy!<_xoCL2 zm6f6fvgLQYh~bKVx<|u$NL-uVM=uy2(R^2yXvEnWios15sBh4a!P2(^$_#21zGCdP z5CEvF5n32cL32@WQ|N zUkTT@VH1H2AX7M=tT3o}b8q4R5Mw@)VD;s^Vaghjwp~YC&dWDI2K+}ZSbo}2_Zr{T z=??Me(hV2S>%LEYd@nzCPP{MfTwl(3ds8ZxQd-g#hm1*E8BDrMEo%OJPNgt=kZwaI zb5sosydu)UB}d#Y8p~ zPW;#ndL>`{KKI&`z!}T{HlET4D3kr&2%26W&@kk3#6UiX@0cub#PmtpFQfcRv_!@< zRBtoR0h!r78%$#WX7cEC8iJ`?OSwd0V9yLOG=N8=m6pY=Qa}BKLM{oop3DqTGj)=s z>*o0fuvf-orp{MtD0xf?a+d6T@8mNO0|A**B9fB@=9RZ`T6O0bW0L*1{z_m52$RF9 zr}x2vGc4R4O~E$bH}w`1H={Gm9hA=@lXre6LB0embq1c z)tp9yDK%Vn2N+<4E20)$F0i4eNal=^%eJn_Sc@~14Us~TNkyS@68}#hXC4mq*9C9} zV@6`^WMVMLR)a`VjGZ)O30Z2=LUtNSma*5MWM@nfWtSzYO3Q5^_>HcSZLJ%Yfz1XqN=xG}+d>>9t-zWdxFO2kN z$y1)U_;!^#Y`3lJoUJEnB2XxuAUSO3(jZAoE~A%`L?aQo0}GUc#)(gYqcXKQowy3pg;BGiPW=9Wynf$QDs!dL>3(VbS$Xt2sXW z(7u+Z;$^+dD*6??N-Kzc!)uDIt5^2mcRAJ+hOSN&m1_5K;k~w9hL-C`r==;`4s9JkHt$A;qfQ2w%}x2+LyFQqTtUiJfq3)wy9Q{trZ4TBJ=ne7CyM9Xu>%9V zo>Rr~ndr}G@z_)9A)0RU@9cKh}V97Z>LK;*`&k6`?F8vWiN^~OGaps^|#GNt=^cwl=$-s6-2&nhA#8r zA+-^&z30h)S3nc2K#MIKsbUaEV|G?39^)Mm@&J59HK#R3(lxy!ljI0fa?YA{`_WBq zo`*V1X%99N@VT5}gPd3lR%PLoN&B(!UznE(s-LdZnv6A!8JUUi7~EK^NYR>NIVYjT zVaWcxJIlch^2Fbr&GYlel-evI-WoY7fkSCUp@+jMb?j4+7`XLWl=qDqx&`)BDvc<^ zlLh9x)q0Q7I_Is%rLUI`LGD+(4Lk~%U z?=$k0eOe@^6oZ)cYS&4wX!l|#{5hH3w7jIE(Sl=wC&Z!CXeN?Fs|4fUHyRVE9fYb9 z_#_uBTyW^?RRt6;=4((O4xi!nkJ)T4+DJH+BqHsq9h^;T=Gi0aJIOjun2luvLbug(UfV)uGx$P87G4MU%(y~b+r?zC zzvUr5F)fa9{(sIG6vU9(VoZz~X=(a}TxYw+0&iv8;B6ie_#Hm5@XfNa@){zm`*X}`(>kG=|R{ddD}6hwptqx5J@R!*7!ZU6t>FI%$9yV?9R z-9IDios!X`B{N|1)<4nQSJ{=xvcHw|kGOiom=-pkUssbc%dZ}vviyUhe$Sfu3W%~i zF(iYZ?GV8;;5y$q}5=lDs^v>hZQb`*cUv(Ws~> zLC1!GG1A)Nps!lcv_n5tGITcbQzyA!!%`l=Gl%g`a#2C)49Ic}es6$$Spu)PKPrx2 zTtRb(Uwp~HOY8l69hYT+xv{1$ftRXguWuV2gw|gC=6dPd<0YM*4pXwG_h#Ab*%T9y z_G|5_J!kn4ycafEje!fG1IIfgJi1gRAC1NTb?{Po65 z?aF|#suDAvG#2UVGcSd&>+E!F3Vm4aRF5-x!(&kIGsOP1g`BqMgzK67ArP*#p%gz% zuGnb9qjiT=7SsQ3(ce@mfp|nz8{k_jr6{CsxHFii3`Lt@{ha}0>m!jw_Ege4Zyt0K zR(8mvEt_Vm-Pyz_VJ61L=BaW=0G`{6Z}1z5y6-*sc9R!8BMGI3udkL&Zob%IWrM!= zv@xSfzztHG4o)Mt$P0n8k})7(=v*S*atQpX!~@uXkCY}YPkx=@;?AhTa~qtqaq;-l zonHfL2*q_=_DR7FZXF6M1i)Z&2TFaDk=_$AWd(|)l9AiCbeysqDAF(JwLJ|3uwPv? zf{!mh@g`+P=SQCneK%x6cVoHWh(5y7okrZ51i~zZx;tg|_skQ7Rs6Dvg8XsB#tNk1 z*8Y%?2n9Thmp2pKR^Fk&XG8E{TOfN9^XbP_c}p%Yky#PR5~upg#>D~8QaYgCY1+1- zlRs@7`JoY1r)i}vovn#P{*>b$FC0E1TLNXM&~~QtLmL>PJ67IJg9pBiT4hr`_7F znE|tYEVTW~1)zk6BqaNmd8g=Xj@EHi+cv?kdk2sCOOQsHBMBmrUePSpK!D2!TyGn~ z-_@SG4hkN6aRzzE>(0-;b@EkkVt+a^0h73XD)sBoqlBO$E;nz+VfGr}Waoy)7+btn z@&!bLFO8UgvOmu}U9qwt>bt63z1I4EP2a;^bWmxLI{Buo>~vA}{aWR&)5Px@LAyY$ zifqyj4bn(OyJOq%D4KgCobz48RuyqV;QFE%+hBw9-FcCPmbYAQupx7TKE2=*)AY(p z+@WEfUkwtnVuwN-EMGA1dsL7FMP3)%m1TrIkM6A+C`wqtOYuW>8$G7gwy0ta5y>vY zJx^j!Nxdbak|7dEf@Mq z>vX5bv=O|S=-ZiUS1P!`mn{I4t7tF=q6IUMypi3z*ET&VF)tQL9%yVKgc znr^;3dGV1cOz0uOACT@r!)f6B?3~?v4nJYcMFK5ba#rRG_2CKbjR`z-rm3G z_kW&uKcCr|otf{%Ip=%gy3U5FD$8P_KShUwgTs=SlTwF+Lkb7BQ&EwD?+7sjS2#G# z4_1&3^$jw9sBp|#PrDWK&^e zaWNnffpy+|go46}42aa6**?wTV$@4lU-tQj*Rb#AGd;JLKxjT-fe1qQ++g6%@4mxX zO_$hk>23O9bW}ePa>ewSltMAhKNneW%8$XplfooQc-`}KB!m8o&?uT{+^vEBk~5w8d{pe-k9D~kQbCz?p;*+0OtC?XUu<|^GcuHT<+;qO^S&+; z9Z15y(!BCy8hib|^a_Ihemru--9?%F|;?M+i*h@2sDM-;=9L@HuN(=LowR(YsCI{azQHyrYbsW`5)M` z)lo@`)pSb5Vn~%6oEsb|^W(!eilIAx zf_qiQ6Tq#GBGY@6jvC%Yg^Tvd#?o-RvjmP%{62-I{A3ri21Ol#zT?ynR<4vp63*tlp{;6ig1H2)}rV!WQA+MR`#-!w^;|Ln;Ejc?!=VjajVLW5tX zp*s^L>O2kikItx1+y`j)RY%6#^B5oIzcdnQn!q~m8!+3!PoE3cu#nO3B}fjsivF1X zIDYihRBig^_J+x9^ywEqu;se!!~Wryu@LXGnB+N$eYhF_tll4HvellQy~@T|bM*VE z2sq^x#fW9r<9gj*iZ-je+&?@NJy9ZAM(y-_(Rgp~JvIO1 zQ)O5JTxQw&P?59(MMWd-FFgr@10G3ZbXGr#?*kO>0dTko-Cc6HDDh$fq&Nj6-7f4; z61to@Q4&ABsKWe;yw}N4MYN9u?(|W`iS|$U#oCBk@rnEwrM@u5FQRSaLvbp9YP!JS zaXiUh%xalucy7HUXcFCVq;&A|vM=JENktCE?F!zo?(29PK(T1AzkSMj$j$GLZWthYRis zL6{WsMDjM`rKtc{%B!fx)JDI?lsPFIS`nIySUEb$cv|LILfO@Lbb0#1y29l`g2J*w zZ1u|Y=Jd4m7TrMI;Pkh)6}n9e>~(7&w0~xooyXM;&b;$=e3qt?tzf9IB4bBq#NZZt z%d|kKr$9{~7XLa;vNU&E{fFv-#!6{fnO@0lX^a+0>6lifDx}y)`9AJO_6zn;zv0i( zMZ=}9O9V@lrUj?nc%F_16HAQb5=|zLf3YgI#Ib67>WoE#6^(3UmMl{wlhv;oHJkoU z$yzCS(|y!*)NvFsJ>_Lf?Vv8Nt_@qojAFS$d5>;Gt!M4dg583{!jpxFIybAFS)V+~ z$?6HT+24ELXXn2-DQuxp6zEOPJ5zd7dXwK{wn?UxSeK1VjQ(VsS}s`pvRGbRuvMCp z&nI1}ewb<~h-fy)`6|+@U%lU_U#Xwbo4`A{UCcMmryQnvkAvKUDS?TET!ak9vLp3+ z@$P9b`6d}V-&Z~_<3MtL(kR|^o7#!(NVQqcWfS-w_a221D3$9h=}T8mWzOvPtv|2g z9b&>t^z@Z`<(UO`5QHN-2C%z1n)W0JQaz#b9B0dM)!I7 zcw=6qWY}}rzdZa_RVP=UYF$0M>PO!NyQ zBcSgpMbSnf9ZmjhF%wnUN7=Oad9mJ)Hx|iGaZXXEv?Rf=BS-X8JX2kpU96qKdk4RMI8{1#9EhKW9;I$f{5tNRn$Y;wG;vx_vTU6= zi%|K#l4C_=Mg36sP??G)M=|GIq`}L@d(E5VHv5$JD(GhPL~!?V0ON{PJ@u(aluW6fDu@F^CSCjY$qT ztF~*5eN<#h&nQHj9nZcYH3aUUv4x%WqJ_2KLl}b?*p!-6Y*JWN?35=I$uiWlPH0}T zx=4QjFC5j9S&>XdO-k=zkrhTJMncJi&AJD^QciKrSlbNEWvtl@D3Q7Ov`$>z9S<;A zD*sY`6)QieIJ%T{okl)TzIyS_p=QRy<#ev~WvlibF6_BaF|}%y#F3C7Cs_I-BC|6y zi9f5`*rciIbuV!_LEBK&@N(iU4F|iutf8;Z2iOWio&R_L9#aa3?5i`WsW1(OdiiJc z^zj$+ummlY-DH{94I{YouXH5y*zZa^=o%6p=zQN0zImfFEy!Wz8(W}9(h|3Mm>Jp7S^S;-8ZQVaL zU0KBtZMoM!c6x~4r!RlqmSU$bqt9UI>f~{BlEqT1O<3t(<2XIstodEDs0^knY;u0> zICi3B&1Ai9y})An{OOEtxk3HKsle}M@}#^Z@GN}s33uBcEv?$#fo{WwH1~w zZRO6Au`MU;!7%eK3hr?VNi1($qON5ZP$@ta>al4p`dE^^D$ z%?F+)-e5^j$;IDsAsOU|PjM(5_-ocmt|x}gJO`2~i=XBAwmwK5hh;O!Ys?O1Ca9z{ z@<0TWTz7AFCW`gOq;mM(cvtsJiM2+;ocy+;voA$`ulx^#ZX#Al_SiiP1kN&M?L&0i z^!C_q_3av0-HNJhr52CNy0ldcF=+=e-q!o&7mIg`90%(V52uE0 zJ4oC7CEDd{DobG|U(36yUAJ4vWj(lo3QTyhJ-OC9aG8CS-Rk)qeA8qG<6ii7vh{wf z%&4*B)dJas$Hqo#3PmMd1Ls_v%iHbB0U0c(hWkhL!!r)(LG z3LgvOKuB5-Z&eqp=UPq+4hND|N^`O=m0*fD`p12+*K4!em6x{|H@Ecq%x=H5;R3Km ze<1&YV#8VPz>WWIih3dALHrC?%EO03?3bv?hKGY#D||^%)+%52GE%3=oQ(uE-#$^t zkvt9D`4Q=d=W*uXMwX_MBRZ*V=%KF#0vsA_%q#BV^3rzu@Sz3^8I1Djv-~i3iA3np z_bPrlKRePRivTJq50QKJ0V;5AXeYtl+ylnjzSz3WA60%p@eywRR{p(`65MlO8x;-- z{wdrOU<)2tMBvH)vn>P91c&%%KLQ+Fh!q^t-*c3K_2VZNSRTjxvqp>$hC=~<;RB0% zF2cWOBZcQ8{<{sA3LJwI*N~K#2i6*9j^^fePL}r0PE51Lzz(#Jaym|MaK!YF3%tBK z-4Ss8S*tg1o!=@c3Ygj3vYWiKH#KK>xBUp54F@OWE&y!Wnme0NyW85>ISIH6gZ`W$ z0Bk?*<^WOuImOvp81z<2m0Hr?(VUu>os*ptB!W&&O)cd3?!ADzl+54Zz%OBtrL*%# z0S*o~H#c@SZgzV|3l1)Retr(l7aT8MumNYVIeFMQo4B*tInn-ek$m(#{~Y6G6WkVz~qK_{>U5v^HaM2^LMWe#9E?B;WTG64b9|ar7BAZ`h24(( zNK!tZW*vGJ3!Z-GzP~N2Y+o>N{~c6hcYEE3C;RO8%4zoH6(>Nsh47oQEZb;Dh$|)o_+2y_FN<%RQrq1q!dDuH`5%)V^fh zgHj#qFFv397Z1-hPNoibYGG~P?giIa7i{~f_?Dd$-b7>@mET9Q_$xQ$m^^Q$Fe2@^ z=S9MVm+Zt%ZNPO;UrL4od48bjwIt=`l|EoS=Q8tvhvOT z7^=g~?`hnhn9zTlPNFt(>WAe&Azsma5Q?jnborj zxm&cz@z(8VVg`j%yHI)^iK}3<*N#gZ7#w=0fG=Ah%O`IAWEPE7u%nQ2hy-DtxAUTH z!}S(!Vu5Uo>udI=cO%PFDx$(nu$k8_Ry5<&QbKixm$yi>33m8GH72d^Td36zoBN+yH%9TT%#~MlqaRQlx`$*4x>bM=nzokKVnh#a z`*QC0Ee>)Xo)zvJa7-dWW_j%gKZ!hCkAczMq0~Fe9%&ZM-(T(B zqOdIqE>*LJT4?Uf2?FN&SFd8Z(u7$~Kltq?q)E=3`h7+vafB0t#L(4xjjejH_?%y} z)g?CQoz8Z^ehOc&Cmj3^0g5OCw=Bs$y2SE^m4%kRD9b`izBz4)0yL~N6iRooj+4td zCmlfRZ8I3UEZi19oG+K%jEbT_lS8g$sy;VUInA-w?>~0Qy(2X`;w{q6V*Bd1* zqzXOS8!J%rW1DT9g=XW4h?e7sii&glSrNzePjI_QEp2t4^sRa!Rw}uXjnD8>dHc=o zK?iKFW9fF~QsigRps~kZx=RLA@8w~~gAYVG>_Gr({GsV}rel$k1i63n@G89R z#J4e#Judnz-Q8)GZux7<-I*}~NXs<&&9fVN9_j5xEkh6U5N}bNkSww`5aPaT%Fc0x|x5k2VdMHYW%5uP{*CYQM30ahB`w5AeR&$#y}E zosvKV$P71V`Pp=J-8Q^pT%7LUlfbTb% z2Ghp851f`ftz-$g;8#pSC|dQ9-^_iV^oKtnP=1wn&NLnPq0N15)A!-hSNQi6{;I3h zh=#~-5rPa3iA3-6k_{7$l$*4bdR^RY@Cu(XY2e)(W;?Kz&3dWKv4-L8liaT}iiSDp z?l3gm6=q#Q?S1!9wihTuFm8<<6xgM~*MdLj_r0 zU;{l(MrT&OI4}vU#MZ${Ib_jNzR~2qIkT5H*^vV{opxbUJWPDj8aS|5akl4|3=!|< z5b*Uzid(IoG={l}N9}FaVzxX#X3)hq3S^~@F)LB0V>&4R@yjd=jIn>GvQ#I5w5RFV zbHRXC{V)o-7xNaAV;^`D++nz(<{759hFpE_YvtWC)1+ztwU1sj2t-MXs!1P?8aY zDM(rhkEMs|ep|LJ;R*5EPHVB_0vn0ZmZdxIUx-v6L!LRJieLGGbX6?b@`_HIe>>Pq zhNICfh(2nQbn;yl`idd~J=9XsPmM^exA$lf0;^X+PjKK2w(Opz9b0LPP8hYz`2ns}Ae^l$oUM?U-U5t1Id>!ZB+!FLl?6h~rFk zGalkq>^|f@fk}sdNY#ibXG+?HQ>P(ccBHqWGedVu3293y$-RNgLE;LMQ93fVmgnzH!r9~cZAJ3$~<~BsIkgjJ_9dvg_$4STi z6zr8^DFWNo?)Xq=^y+(g4nIUP>n82C4TE&@uK(C7M!N7&anaG+54wCVip zm_Vrj=SF5k`8Q2!w;{Oxn8sB|dH`USvS-J_~N=1_)82Jp1@5r&kM4+T7|>Vk7Ws_r!G2&*4n@nVcoc z0=QZ$J|E9n6(1|)=wj)&V0VP=pA zOLPB>_3WB3Kc*SF!IdC&7fdXY;V zA(}!?D=2LA8G|ZnAnJNhC?I|*JgLFW4EuusYVTMg-PG7Toj@LG!kwd@+b?$xCv&M> zX00Tlk*XTBm@JoWa)jR3BSx-eUu(k6SV(j=YM$Vk(uXja)&$A`32hb+b(jRgMOVgkQgF*j2V&EWkaugyu7Ae7+*`L5r2=*r8Fbf9JickrS_-G^?CwWY@G8 z_DYXyA`%}TX;D1ZTi5I}t63@HxSi6+b1B9mz^PFmCYH^7?%qUPRK*+oKEmGe^~q~H zuW~qiyQ(DDIg=0%s=15b8%`-XHz>fmraktjcv^MnxhG6>1Dj9?C43L z>{FVk8*(NN;ur%$-rb1i$$T^u{-yNnbD@nEii-Od*k`MZ@o6%C$3mk_v$zVYA=|OS zXE#mvHc!hkk4$ez^@VzP`ua(3zWtjs1&d)LWHXtT5tL;OUT@_bRsb)YS=E{|?ML@i zxU9TB9fI#K6J~kwwQ)6Er1c{LJ%!z{n7Z}bDmHX{DGX%av_Oy&fpqD0PxNQr!?9GD?HKdF0hLOryCc2rO3UUfAetZgm;#z8n4~ijM*^*;YNuJcwhR=OKn3rg} zAMm{k;p=~WGjHejJ^kf~H`Ln5TAD*jZBM)liwTC|6=b>`Dh7zdxPZbAYy1Gh}q60uK4yD|(kIp8Mi zZ5p91_iNXA@Ae;?Ut&JjxcjJdztUHE28P;v4g)uBe%81fFa+ErrqK!6Yr>*cW(f2n z6rz)vYeXUJ>5N)_7%?#!U>SMej{F2)XwYg5Rbn`g9BL7}zMazqwX5jJ5A3_hXmSsB z=>NZ(@fW(j8W26WFaAnQB26k7D-{s<)0y9@oQX9%=)%3QM~O_%^lb{f2N@Zs&)rq> zXwK)*{G~fT6h!HXuXy^e*igDd*_`J_C%Q|GB&v3{%r66<92bUxmOkKz5LqeMo(zf z_&1_Oh4Ho;P~VX^4p3HS3cx9){o0&XsW+$oBjf(J^ZkVA5PtlpZDWt3wLx1iT{X_ zxsqoi(3gso4RMwKBVGxik93?LrspP5gT$dg61zpkCrYDZCvqFp3gep#1R5S^c%cASP2z zRvEAR2<-a=KS#@V+WBTJGYi(0P+xTZ8R$tuZDFz?tUK&ga9JOzP%#IzX)7DwYvZL0 zT>6Wy(bAl0GP>fsqm(J-_5PF$QCs62$NW|aJc+VdsW`8O*zXdnK~`)x2E{&`UO4f= zi8nfzV8$P*J}Q%+E17quVd{r~wMH^B6fGMga{D#l9Y!h>E>g7@>X z-Y??>U2wCQRf30Y-JI@;in!|`-%Dp*R#{H0$NtpVK+)p&21!UQFi!~+g|?I>-z1O= zQQjL#K-RM0xIo$-3oQ&pb|k@S;;e(g7?3yQZ>a=tdngg@J_~zA5#EJ3iKO<1(O1AA zR;uLS+s&Y6eTq1-gRTa}`PsNkT(mZ13tt-7TS9%w>vZ&>c1roQOX1ojgQ>fOTk0*- zLKT;u-+1k=%XLv=OLnMJ>x<&8P-F@ZtSIM@>l8>eqM-w%9IZmpS$#N$XA}Fo(;9)k zdc{qkXe~=md9vkCu@YJuH9Clzg5cZ4`Z>peL81CLmf$&0Viu+8vBX31$s~2rjH{I* z2*xdoyvqDb`YdykUZF7{U$hyrNRm;b5OUf*SA{~lv_e7r=ZcXAr`U@h=6;mXK1Mc6 z(Y;@jiGL$o*8fjro2w5L*Pc+A&wI-O)tFy`idO68UN?4oQBFI$kwT%NaZGwS3gI))`sdgz->P zWGOv*gNg^lgMmVp{IDoq0M5X1h+ePW`?GS^uB}xPvf-Mv@-?2pL8lO3dnRkma!Nf4 z|K*a?G5}QF!*>nR#fQ+SB~D>uquxbPRd4v5O~|%Xn+|pDp@qu97hb^0trX{0sMRB01t7N#Rk>D^~&V%@t?3R;dSk z9*^D9D|^{~LDnnA0QY@(uF&T%K9@D<2ND?hzZ>se@uqv`J~GV2Ya1APgl+Ut-1Adv zqEJ3TcY%&H;@uNiX;|p!U@aIbX5&uyR6=5 z-$>TGAvizMo)JBYb|vgN1}XhiL5s2ec}abszH31M0kf+m#w!o${dfrow6PFU1@qR# zQBo7tf9WH>h%Oj=<|`*hIOI0k!tgR2)xNPVXT5Y5ACTpRtO?BYe|bnhVzu5+NeQ3c zfeHG3X;djaw`qL+f1-$9iHoWkTPsiOsNwVLHO>tO<(~JH8Yud&^DRgU?pI0f1u|c3 zno*(hS@KjjvkZXO80o^tNhO?6)40rn1%C$;2>AseW9WrQ@u>BFi{NN)G}lk-BIWg& zoBTu^oOu=8!VsD-aE*u&T|Dq>6+kq0!+0mE{Mc%F3Wv2jLrWjQA61QfF&bT%s7TQ8kR;F zR^LhGynp*XaoXbQ+?O9wmF(_BNfPr%Cco2om_NSHfhGZ8^@gl|d_AGw`>T;CoDP1+ zo1NkowE`KB%4X=qf=nxBSpJeLr=pocQ^9%dASmLB+A@VdPDwfT-R+Bo^jbzoQwnUS zJ&S|O+*3xET!Y8@^R-u#6dufMirHbq&}o<>a^%KM+xkx8*1yWQkMv2vx#h>H%c`mq z06~Ows8n-o2`Ao-0C}781^8Ac9$FzBZ3|SGnB4f}M%!aPda$JE! ztXH)B=L_IB51jSQ6Eftbj1TQWok4@;ES~waCUq>LOB;{QIia@5P}|7crILmg!Ux5N zL{;PjlHp4?L5;Hi9+UQS7=Ww$B2VF5n zC8Xi}#MBL+FkBEVFw9mrt&TW|wj!>pn87=mAauu0pfxy8*;)G1Q@u+o9Ka!F!2yY; z8#+8HbgWt>9?|tEKK$(W034P$3mZ=6jpQF$4-ctqJqce!V&Rd*o!~tYUAf{j=|*a} zTmj?A5fE@|oo`GxuvE5AE?VRJ_I?8px8bqjvK5i|4AH@_VFZkx<@ua1Cd0c-Yx#D= zZ5lGTEuxLiIWTa3-T;}yR0px-FYB+>!5k2fD5k^&rT;Vk$kjwTwz+Nzv*&JmX}mCn zMre1O-;49m=Fyp#Y?e}SvXkXSiyJ9=2c9FAarbPfK>(<_;>&`I`_=H9ZkArM}tk@f5FI?QP*bu3r+f9aajxRjyx_ZTf1`!tM7I+qP z7bMzU>T{Fvq_4`Suoag0wQEEBBgxk4RB3kR^B)1bO(e~o;zfw$!KGnZn26VW`N>G% zH{~`;^!t`KXw~!sdFbiJNtZ5_%XVV`mto-bz2o0<*cdgDR#l!b3H*&OxN}^L`dK4( z)Em9$PyFmsj2hMwypjz7yu%!}-vkUe6GfPF>OIhC2+dcfowSEq6rWoE{*Tk>A%mw4 z4|dwoUD53ilP(yfCeuZA2Cq&)uNIPm@uZ=+HJ890q{Wnl&2Dd%_?D;LWtx|>T?E_v z;lIIQJu)kQpz7S9Pk7R7O#AO&fs7Gn^9;T$vv=4H%vLx@GJOb%ZR0}(O=VC!+ZT#iGlKN8ieFuOF z8H7!N{tW*6+<#Vn9^`-!HlZgCOaGC}U!VFvt8oe7>4*tk&Hm?s|L5QzV79Y03J}7n z>$Tnimfr$u>t)-a3krpEEY4P}B(?)b+nG9)lkL+FnxoHrZA0E$f)IyCa!+t8)9Kko zjN-o;^nXO!iHnQ0fG-Uc&n4iEB<&@DmeD?*a+?K0PZQu2n$44S`rFRS?ay~Igu(SK zo9WgHQvwfnr!C$W^8#5T2mdGW4!<=b^$BVUF$b(OTiQ9{+IY;~FSf$6_ z0Q2MWnzcHR@!WOZJmqsd*Sj9FFXuLc2rD1ELmY3(5c@uk8DS#d|9W3iPjH5V!B!i4 zyGHdehr_A+^zShmxsF{$Ll_Y5S{Sq4yA6DqnC63V=Y!&`|QlA$rljb&JUqe#fQ_~vPxGHL-)MabjC_cGFBkAiyW#5 zpC{e|WMXDu&&M7ofL(OH>q9LrRfB}n5vQnltrA3csQLiVPcy)#089s8hv?mJoEAjv zSDnRM!z`7~DF&`O1y(KphlPv^ULNW+9ce4&DeQ0PLM8{m2v5CgyB@W7edK6+;BE?HM0OuJik(?WSo?Ed z$-4VUwnXLiO7yWg=cK0B_pssa($iLg>%C&vd;{29)H(Z(`@2SLsM>nY!(DL!v?vGm z8^`x8%8Gi&q3^@(ed^sKQ|9Ibl+ul4-0u^c8%X||=zT;dTt2F8Ccu2ov~39=GAnVh z;A?zVWcG%Pl3<4J1Qrs!8yNxUI%vWt89dp#Wcl6RFRYorPrLxu@?ueK5T{Wb_46Pg zO#uILB)4lcAw<#XoLXdspgOP zm7;nJ$+~PSRlo`|wD{HQ?<>MerYN0^k~;DheEQeP`LYI$h_b79o;#)7+$RNTYj-t6qLF1We(iiB((cP9sr;O^KZv;lGuEegAmz}ywu zFZT0L5OEw4rpJczGPXYwq!0-RlH`(NS{y)(K&N-nUCo;yqq-r-^NcomaNB95k~a|4`r?c;*zTXH}Gh zzWj;Im*KAoN#X!CK<$d>p2thgnol2gw?rR2RM2-=+x83&9SIl| z2xJ>Z8R~7CsJhP_7=^4gASJe=K@j))+5IKtaP-X}2r2d0!t@_M&v}Mxi6>nX6v(gSF}t7|^z`!|7w|z(;eZll38=K1ABdl1{tUu40h^d%sokjn-1iGp-@8-UNB^)FA{_1NLN1_+pU zs@JnuZ+y!Ve^)w&3qRKhDxZc&u9~jPzj;FJX&gP8H0KK96X_D&O4m4;%r2@ADCA&l z=QN7VJ@mP3@m_>GUa5V9C*2#gTv|74xG4MDsOxzX>h+!$I9YFuu3Yg)i4(}CU@vi* zF-+2E;zRGYpq`lMd8rDPfLFeqZ{U6NBQtH!q60LvEH5=VEdz}RC=eXjwyfw=!kj{- z_MSu^#k*bWmOHD4rQ-UW()+mRm~!6Q*T%h9pL|k|alF|RHdWR4T()x{rPmlep?%y% zMx}z;u{@twnPF#j2Czay?4Pib=e}hX%^yZY$ksZ5?ig*!wJMrkSC7KdCkXXT6Ppfl z2xc*C^>f`^{nC+4C!BMle=?$AxwG%QyaGa?^cSk)aahNYS zA0CNKc`W3nJVG)ZBHz5lBeys%YXL=`e2LN*?}bf!QA0c{NIhqK=934Kh3GQZU1PzS6+ zdiAigdw-7J;3qVI_yFQUU*B1v@XoA0I}a<=#I*WnQIE+gP#iOQf;2@d!7+JYEj+w8 z3zrbzhhggK6#q?hx+8!f7hx(dOb~ds;2D3&RF^dvRr!Lz)^IZsYzLE5Q1&t*riP@x zr3PT5Lhw-+iX>y5PXlc@HD{G=kYxrLkiYIGB3cbpK+qU7JIjH2zrhhyOgenaQ0a-m zi$M$lngmdua9oe<#0>AINg<%UdH+gpp?c0ov3q(p_0H;Y>2)g?)I!;p?pVA+;$m2f z(t}-_*q>B1bbZ?TxU7=-dJ5JU)5l%+s6T4kQukHH#MHZu3!D>*^BU0)DWajgsN{hT zRCw5$ zg&Ixbf_8R9r?3bC89l$Or`4K0Za)+%`?(tc)v8RUIE^x2F5ShoXI^!C<)PJIZ)V&M zWX;t~|K*5Zs>y$f?pTECWI0kp+vvijSRxNIPYOG*q)$>52>&IeLvf-H6Lm?Di8;w#~odC?lA-poOLx*}@ zQ0(oM5YP;B|0)BLRik7fg}0slPus*9-jP(Ch$m5jTg}r6cJMR5@EIIB#DF(i4DZN^ zSZpxE-&xO*S!8nkdZoPld&Ox?7~9MpH21|gf=GhYT-G|@wBx6io`;*_eqDW}@7rUJ z%|z;Yv+A}8uNsNSYEAw$lye8vmn$@YPEpBiF)*K47X-u#V6JxInP_JJEO^YC#E|6mDrWp%CCMdsbKk=yKU{8)y&k z56aXJxsSL6ndgE=V!4PH64{VOXtMYsAh#H>c?-$xVWL8Gz8; z~;s$rBpN{L(0pxi&oMC~+%zvPY0>Tmv8% zdh6pJYjDOw%NA`N^g0Ihi7)w-tW^uaS^)q9{8e4z%6R`xpt5o(t<6_`phP+O&{;Pn z6=!J6p%9`)dq}577;l3p7JAhs|H|~Xz~)8CNVqr?K`UWcTFFIod*QkT6RxywnZ-h_ z)xme}v1f_WyVy_7F)`B`KiW!Qzxo9?@P+%NuF`unC;BZ>1tpV8+6(hf%XG*U(|q+m zOl|`Yb?N@hq1AG5)HP)&EuXK+%_Eq)V>>|ON76ic%_fDHV8t+ldf`P)YKil%h3+Y1 zZ3B>1>n>UfOl1FL3o*o#oMotRm4zu05K$8DQ-s#=k48FhO7DWf$5(OUTNeabf^>q)Ml#o7w}vBT{1I zw~5#(<$^6h=>2pxuG+22-u)%SFm4K4P>IlFTF(X-3h*+Bk>&~5_0^9Im54kr8PshJ zs*)mk%-$sUA(RE6vZ%?;XP-^`W#K5^NBj|b$$EVo0JY=z93k3^77b1js0d9=zF_gB z3V0pYks8(s5RF^osN&W%D-4o>e!;w4pTT!!{HZ`!!+4||&MFLx54YM0Uy zY?m_OGCgcBdw`3#Vac$`QKZ+@&8D@NiJ@GcL}jWODh`OdE5es%J+P_jLKb1V`NL^1 z3QiR>?YMV?tp?O@xw_?tjCB4{3aX%LB44kdUWF;Da#sJ6Cz}ash2}LugJV?Rw=f@i z7a=tgl@rno(WTAD7*!Ol=d?y!4r0CzK$0d`?ML+TomP|cBqP7O+Y-HmvKMMknM$cm zh3dNhNyX2Q0lHG$-wSBQy=0ctp#aolNgBv&gNp0oqE)^VIc|v?hfPxO$=Nbbtd-il zKigy0DjyZ`2c|nI=I#)S1MSUOs4|}P0`^3QDI09;%L{@FX%d6lxh`^*2%Zl2B!Man z+J7cPpjE|9c^JqBK`}?9ZP;U{g;YOWXh0DuP@nn4=q!@0$cD{Uq85HG^`|@;Q;MzM zRDCB8bH*Y-LCzxa2IA=*G+kp%kpUnz&aJg^OyNQ?M$hvb0~taS4y+98TG{E>jlyfoA)~hF7IK30Y-uMf_K7c6+u1v3zK8NeSg&h}BydGt31N)fqpP3L-8{WH# zGs-jQD+lUdW?g*|EmM^dRNp@L2Zh~kCs79|iy>TD5Xw`TMi8%$-?0LkWzH}8 zkjt`ToD@1Fkp32xfKw~Ay14g)Fi56#q&}q(d*3T}*XX-c-R!wEeFGG#N*x{;NYBj& z@p4)ea?s~~s;U&qivR{tj9MP@;qGKV$F!Mn5r!;V)c7BdKEA!?tXL%Gni7>8a5bKf zuEweyeHYi(FaZQ~!;Ay%t5ihJ91Gt*57RskzJ+FWqhuCeOA*$~HcKd!v8}B> zK)~<5xryW3bT4_}mPnqn&Q)|*I~157WK=6R&)?aQso<>OxnL0W7ykpGA7jhMGz*i~ zOpZ`q=h|#B2^ZH~mW4ajToYf@g@GQ_L{V|IwO|FX5!9xp&%SJ%&W35q)6s>$`=wD! zFJ^zqG?g0fXG~VTM(e$nBVw9PyHB%KyIt;O{<{c!-}!23K=BROz^I!?`<@bADvtLi zI_{0P?pw{3bob(@5B;%eFH|>qM3kG+rMH4yCF<+{@ea+YpZ4Urbc23ha@a*wa6u4Z zj;AF3e~ea%u%4OP=GeTV~xDmRz+nwvY`;uV*Sp+`(uRx8^gbf4 zet9uKL)11QC#f(1`Q1L_l8@#WxA`{8>y+sem`K)@9Gyha)XR3T;UQ{G2nCo$yY4_V zy4f67Cjhj$1z#5r1;#QV;Ar7SF!bAyh((cF`7=!}x`qqf11;?%4pPt6WeD@aS?hEE z5WZ^eIB^fA3}1j;B~It~hx7b}>0X-RzM=c?Cj-2dAn^$MwJ5%e%4mVz5_raJq9*&B zG)1l9ee9j9ce(m9q*eEpVf4wQJjcVfjE-vwJl3@BLM*Qv8gVKCdHXn?rT{J?#ukm# zRA&5&CPyiJdX4bT^D!2p?01PbhaD{k2e!4AfrGBLJ|cu>fb^K9f6qc=!n=E4U7JR* zZ5kyh$rVL0?YV__j}94;Mo+hV0Wc8XLXx;zc47k=NUo&k*yI@Mi1h!oYt$3IkR57Z>a!-+!$ku#hJHZO(34!qWja&5JZU;>tgpW0 zZ@u+iuJs|t9B14N^X}aa%bmm~d2jYbg^5~mj1sv5vF=2_7acm)Kj}%L7l+(j z^gl+P|JcXZNTl^v+=roTd%z0^35bVU-7Ae@Q5j-1L$iA_}LY}s?K{GgXW zg)TK&m9bPbax0?0_|@0N2Qsy3|3$k$s4?l}BfBZ!s{E9|#W57GK1%p(T+%Kth}iM5 z&*r`}bm+54og70%?#Hbxx0^M=v{(5z!=)ysNZk4^BhZg87XZH;`Z}6qE1RH)vpIB= zXwf2B_X9H}7*LI^`$vG7S;?iQ;Qp}diD5_}g}3|L)P}tK6YZPoV+jGBK7EgkB>J=> zDLm{#MJCY`VE`KxXKbrOK({kx{L=Q7Lp+|v_adEX^2?@Wk;6jl9Q1dCO~53JujQ8b z5!a6FxTWM;Xp$4duC!kJb8*X4$H_wZa?Vo0yQDBmChjnqTmL&_{RBVO0PVmvuWAoE zkjo3rQ%*jSu!aLM{tNKnXilLc*>?vKseBw9eXP4Y zcC~yH6FPu~4gsE8+;*h}jFSjsdrYX=1QP2vvec;u@vp<~R0w2Bu7T1tHaVd0ROu@# z`-t_vf1yMQao}$acmn-tWU9l&JlPWyVjn{T7Zp_iB|pZz_j4u{%6Mt5_4?Eg zB4-zJ%K>?~$&nxw|6%Db6GE`EN5IyJgoT<# z3Gs;g(OjCU)#*CUz0+jytR`5r?`FD*iBLJ>^o77WMs!fFS^az_k`zv*X#nz+K95EV zvk7?DIgl(aM}x;@TygLC24H6o*_5BQpyPEmbXu94=c8<{28$QqP6@H-{v7+`$!d$R z6P-o?-VjJLVT~Wm?rj7MvMhBAeF`lJ&-4F3!rnTps;zDNRzyM+q`SL8L8PTbT0mM_ z1w>MiW{GrnNV6!BM!GwtQ@XpQS-?A{JD&S}-upYgKlZ^^7mLN5V~%l+>vx{#5bj|| zZOYY=4Cgp4*_n-CaO>R(HPu=6qH9hM+3(%t7K_F{dIe|Vg9#K)ca*18U18g#I(f!~ zS(=y)YuZH~geCj&sTHao#s-?;UdeVl(x56KmRC6|V4ctp@99lpz-jV7U|d3)nd^oZ zh9y+u%Iw_icMv^&ew6lvd$%|EFIxC)?;+7Myzu+#XIeJTbe?0OICW6jfbC6k)O-b+ z55_Mf&mkb7*P>!(?534#1?&en3sH2-ro=cs zQB4I>Z___=J~H)^A zBZpw0UPp_t7XfRmAu$))Jij*Sebd}#+N3Zmurp4ZQ(^SfZ3gld0mqZ?^#w=)=$5(r1hBePg73_+!$M-BVP(P^)d&UZJ@qqzg0-w{DiTRL3D}4rv9wkb2r) z^;SW1>f2QLtMp()qkQij(hvHE``_vR+Lev5ZUTv;-Es_QT!EzsVYWCATK5Oi3_Udr zg(YSA_%8(^K_g>|hQ)T+N)^|KLYy~>PW4R2QWyl1P4FZm1 zI~pqOxDnZ}gg*X`of7>sN3X16ZF4&{#)t@idYHIj6$&tcicUt(73D&AobDo1^^l(b ziOZmi%e%kY(gXTv_h|y`4r6pI`F$7Oq6mcwpTsR8hqI(bb`)UcDq{)lf3C2PdK8v_ zuSS11oR49)6Lfp$Xrics09mUS>w5EtfzM)MOiKJIWBC+B8Vl~_W+Z-YQ*VTi!Wouw zamQ+3>Tk|RZpJn(loV1L_R8|nQF<}5946)6X>Box@qhE8X!EG&+1F1VYL1;WiVxn1 z2Y-4sY_|Q$RiIE}K~M3CQAt1b9fhSiJQRr>VRM%Lw+q&jM6C~0?6&Q{ie3p-h<=IE z1h7xotd}ovY=<^f=#k&Vs7>Z9UwFgF)3Qs@R?wC-ZVx)Zc*2G`bh|xx9PBV%03s*Q{`T^?s&+;zllan zG~|SJ5iq}*3bwDm(ov5o>7!0XEv?xu39RVBZYRKuYB^Q7+5P0Iklhfu!0q&G*poH> z-C9Gv#c0M2_Cr#RFc(wzPe!>0oXSMI=UY$8Tgd<81K8ITXu1A9!L{H5o;(?~6>na! zQKaGNF|$=r)2H-BYiAP3MQ0#^x|>Fl^ALlhiv`+GT(sr;QCqi$cg{95MiC@P+-L@5 z1cH1Mht6jUzQ(opnfY3TVKW>-3n3;+2>TjXr+=a1b+zs|o5)}A-DANYU}uYNH7m{* zW=6*%9M0y=T|jWFhU#V)`wDy-YlEKkJ*&dhn+YjY)b1_(dsaAoxc=#8VCSsbH>2&% z->f4Mn+yI;VZ$ifKfRXUJ-+UO=Ak4QiIsedz1Woy2znXvnW(HSB$ntir-SZ|Ld8;U ziV;TB-x2^)G`kuYFec744lMqG?~M5WS%u>oulkR0;6FM1 zU+DXS5?s8Ch9EZYzpv(h`C@k$yrvrIht%Jc=5J%ve|~v(Lu(+Zd=ndLguoaQK>FoLX@_7MFHBtKqIy=d?z(C)kf z5OBL?#GX?|q6$&XuNXqkX`bE}3zO$5&nNL&sh3Ni|il|r=MX&5` zE-;)(#)+{BK{e(&Oy>|I1ZOdu~b-23%7=-GC2}!uk=}!u2X&gAEWd zyfnj0WN=vhYI1QJ<^p)TVa}A(!d=EKn<0ur-~p}@1-?p|Ulf*(5bq9YAX?zz-P8$h zT|D$xa&0~!?B;}>%Rw?$pU|BO>H$8qT7bb%uI9dAaI90f9Vwq?a=PVM4UI{Pe?R1# zZU8L=0KuzQ)G8=*Nky*(!y8x&Dx2$8*sW|D0H~a4LZzIReDtHmG*%Q-?-xYH9mU&2 zZ$P_briZg(o1DgiNd=h0&md3mDyod(O9v3j;jqF1F#s3cNk4|EvDs2@na z`^N~3kg)cAC?CGyv!>^=v+@L(iI~u+0=i4ljBT9uT;{gQ7U`Np-L{RB5j^l04~xwk zXo|qSsRR^xmT_-Lj+6WoiM84}>F%5bX3!<&uz=x(_`@ zaM0rf90Fd4UvCLvkBTsHf1b%je@A5c(C=R6Am|jh$0rWtJikm`ZfX%sZJ&T8 zQJd#`m^?hEiGcT2_1fDU!A3AJ-ow!pssVs5D0NN*3YA^pE#Y)c3B-6qj{FT<%DZT? zMMV781MPB&AHrXEB2BUGGs<+$S>ISDbn4$r&N=>ODH=nfAASi&Mv9-$cSI5Z?v~+F z1P4X6klnnU)XEN80;k?YDj?3VEy$OFb-cO;%)1D;B-p<|+q08C;QOHlk#cK`J4*v- z5GF2%=xg7mo3#_HZ(aWS5qhR*kU&H9Rt>J?AlQ|xje5%vZ2e#gzjcdP3d#atX$IPh zHDTtA$nye+x*ml%E^4hQN#DWcI=yrLML*h~eJ>waUmAYar9BUJ0Zq-E?BvZXrIcAm zGPT=JxT$mR&CL=cDNubLBcHoxdv!cs1KhpY{sxx}5VStsE4RE>IgrmstK01mh;DGF z2Dh<;?j}Nx<3Q>J*vwlZ+hLbebJ|j!&18Wto&N|5#%iWXwWhri>u;_v>zt5(VpH)0 zLFTpXFq7FvY`&-cp`rVqrEr}9DHvPoZ;EaEt(K#x5o!0ANy@R;?eZ_(>QA&hQYAFs z=VT%_QCZUCnVZpfb0k63G%N)0H`%^y( zo{vT5wg5h>lU(!!7qVTw?I)f$t|aNA)>Y{-1bCdnCFn(Z04Rk>FU622<@$ww2XXq+ zuu~pL3v`5#ZxIpE+!wk&$`(C$xxQK?Y_JvuUTok$Pn&+53fD(~e>g7ZJ^HbqY}?5B zhInd<>6G&3tb@Jgks*rTr$b@nCp<{Da5U$^afW7`P;Nm>wkcSSG)Q;JCg? z@tSwtH%Q$MIdqdpaQkzPoxxo=C0a~zyZUBL3$1qJZw?@Zrv2uKm^QEd{D-ABdMZ9=!`L$IPbiV<+E< zy?x@(n7r&4;o*1 z8HcwGp>Z3Pz9ws%-CzdIB%%hmWd@-A<>M}=tLQ& z@(2fv?h#?XJ5z&ZSkL6lcN<&4;#Czv|A5;8luTT9*xwZJHY}t~F}bPNG8h<+fTMm& z_|boNQyVlgB7$$aQ^e1 z zB&PW`ovhSn+yj+jV#u{Q>7o2X31?nX97Z8^GWL>C_oH-?52gJBOcLJ(8adq$0z+uO zU=K-DNi6;a#y1SB5I~p2vKn zfr~*7Mk;G5c;M{qlT4Be+$t-B>yh` zb)`iMX}pzk&(@AOAM|3hC3K#r>x5^?gS8h>>_amapmUyHg@wiE!|ux>DE)~id0^f0 z%wCq!H$G&P^gK&1d>d4>93gihnyflE_1%N&)@yzJA(Js_nU#EE)$n+&n zY|5*P{SVT<#LVRdNLy~`FQnZ^{%NAA@Dr#q9(a~#8OBQU@J$4G_ulog;Q#QOT2H`= zAw03jn``i05zCu!hWn1sJGyR#*oikHfGPa<^;ri&IS7IIc{BFCvg)7=NwIcNdfv$O zrMmazUDa$dyAIoa;ZsKocK^Lx{j2wK5`iUbf{Ri4m^v0^(WlS9dTATr=ne9&+TGQ~ zG}Yb)F$#LUU-w_eW(t7^`81-TS`yo^xVzKc-2#EF;@gFHKm~aOT$l89r!cu40he7z zl-G<)Do5*-QzqLD$z&=*keuu>bYtyYpW~VFY>N=w_Os=$Lfb+8rGj(OZ-J`y@NB?W zWZBbL=M?CcfsI#dqG~Bb5Jf1K^6+Y3FzX5rW*gj_QW={I5E9;~8S1ZyyJr1QvzhcW z?%>=*3iYpgF>@`}?BA7AIXVvdQKtPWm&LDz>}M-OyC`>g1{>kH+IuvnsIX;P$^+4y zJ)^$QsE6b>DUbBJgF_ulTUSGEu#L5;1Bnwm^9 zB!D2DJM$T5YxZCWcrs%*Jce#KoTc#5B-tqoOX9|}Q#{fiGwL?Q`1BdDN1tBqH8kje z`J^ruzN7cna1>0qnwr9%`wLOL*ubs(TcT*e4yby&a&M0-;!0JM1q|I*_DZ6Yj1_F4 zhXLmk^)Hz-W)<~9d!ma3=I=|B7K3i`sB>EvDp9*7CK4V@-Qad42Qv+sPPnll0g4?w z!4e@-LH=e6?*#FXVIa-NxW?{Ynnz9I$>S$5Ljk&37Wg+s!Eb~=;vZ2^42!-H0Z)nL zF)vC#!{m<<_dI4H<3m)6c+V&_)oa@c(>%7Jr#MNpQU6G{*0=6wRI zH1T*q^P-am-7{D3^JsrUbw7Q8(Qoju6!vfu&c)e~8$u!o4M+rWX#sY-Em$7flHp^Y znTMZZ<7>X^S6+H>SAlA~#{fAZBzTm~EBdbFUfS4HXwh7HFvF5MmNk#z=VFnQDO%I} zY4QCAx5Cdf&yCeE4DJ2ZvZl{msfcf09!Lw`#8PJp>#g|R84GZ!97nS4HfRLrD z$Lc9Z-QPY<03Mq@YvlRu+w`yYa!?ar&~4bRc`O$K!`A!944Hc7Y^taelbomA*TrN+lq2y@gE@nG<;!V^Z^#@gWhg z8q3k9b`m6_P=i}wW8(SX$-da2^lQ68so9Ve5htjb!(!ojn6M!a@-r7X=oOl3R^RnB@CltZ~@UDN?8&{W3RQ;6AK3{7R; zW`Tf3m^6So)!>X8Ol3nPToX6w7TLE5-`7kOr9Bo`mG)A5`O0|3i_?ihuPh74$Cdaq z*VEyoiZfzSch?^EFAVoHh6x>Z3O<}0ZE0A#?lg0{V4)v^-Sc#VqE=>}D&|nJL1MUv z6w|z46tT;yZni)C(@Lt+!N7{*Bpu8iZ~$LF>mIsny{#gZ|L5{Ie`-3~7|u< zV)q!!uSTv_53{dqI1kjZne8W=FgPk3r>JD<8#hm|BKiR&(Wz<&?RJ-#$n5yt#|8>TP@R#-JBL^y$t`QUk#pe=_gYRnp#jXR$X|~^`(TA`zc(oCRlv`=r z`oSj<;bTyv+ufckguDSXjpcRz*U*1*g!tO;+Fl3R1D+2fWJEYyLmuRke5;2Se@P{7 z4PfdpFPWpn2A0j6r^uL$0$v%Br~4P8D2Cq(XyUmZmISPU8R&7W?1H8a51#E(?)}JN`XU^{Rm*ReEwax8P9d|W^q1V-&a$3G5zF2uucQh3EP(rD!OWzw&3?|Eve(<`e< zkCKX!qNRtRNxMlfm<{SA^C)NR(4%c+Tp8M_mKyOGrUpO4Efi@Jzr@=6xP;N-e-&)_ zh955c_U@AkvKJb-OHJW2=i* z=lca#b*zmVEzmgTUKP4A|34^P+452)+RDWQ?G^PiQO4(4W|aK&KV&z{J-vEcBiL0F zK9u-3*lyAxX|?9WNlg{1Oe#@Mklv^O)txOEsb%pvDOAFVQE?|KmF^)CGrs}( zR51qH8chkPQpPN3rV97c+bBb7v_0^rGjODs&uOc{pjC6XKL{co_mBf`noIvgWT#^n zniL$N`eqU!?rD%wwi(X+xSs97IA|tnTb5~CDKi3WZO$KZBzc6an;SrBHz1~m(Ix1- zlrmeLiGHUv>B+34@!lp-kCRw0em$X_U27-w!M#lAL-riZdqpE3VXXKN(3-`t!wr*Q zIFy11HufIN7r5@b^_P~Q_~!YV+LLrTBByQ}h~o8O>e&o20OsBK<07}M5EAsSKZq$L z35-r55AIFPblC0xO>ehKcG|`se>G?T9STd(ofwcYpIIyC%)h1A&?G`SP zq`PK;todT02$jKBs$3;tAZH4bz`H9)KajmV4yN{m8ed%EbV1{r*jM*cOUR13<{z>G@f7Jmn+2ywj3)zCBBgKeqv@Y!m|_Mk04MxaR;#UV{O zF+PPh6++lxkZ(jf2QaAMGAe$^Y2EUGtDkd_7(AkGt>l4UDa7;SlwGu7ukh4sOS<@* z#B&kxStedij@PdyfuNX3%*8Z$P5S83^y#zi<`Ab462T-km5jSBAJOO!=}2Bztvu6I zuwzRaV=}@|5b*SRayO1G4ZpSC6{md%By$VO%8-`=Q#(U?{2A}xt*8WzsqD8}3d!^5xFB@dAsm50h^XGo=N4kBl z7?n(cM12M{hga02;+YnyS#!ki4SY2wyZE;XG-2%@AA3LagHO7wBS2Zu|%e^2P;4aBTRe6Ej;HStct+EF?Ad9V2#()~(KWl#gnEM0<1@i3z zfzXBG0{)d}mEaaK166cH+*z(<3L6qb9%7>er{R8IF`t*$O2LlE0Rl78 z-HVB`d$)B9d&*r1&%wTICDX~R~-zeReTPx)LP`X!3Srt{<}0FI)q_^0KR4(p+FM2pI|OE#zhexv*nnV} z_!o3DK`umln}{x>bO?%fQ9mJaY4a=Rj8ABIEmWiH{zaN4nS>BMefxVySJgSxs#G|c z21LdO3rR~-xpD`i#rwlfbDs}^KsHEBtsdyRhYM4m6c@GA7BW%uy-hTgJ7JRlwt4I1 zJ=MpfTfvH9!vf1AMUa2HFvApP7m;^ZJeh`Cy@=w1HLmB9e-ml)`s32DVaDu_lD2NF z$w!9T#Cb}Pm)t^NI??u_4yyCB+?J?5{ZgAF!K#k14ba8hf*DaAfev}BhG)U#PHJq^ z9rd#TNnB!K=ThUE7Kpe%OME0v8?5TUHSd>t;9)_@{(+cAFPJv>An`+U0JTbt=+||; zQ3-P2>2VP1fU@D`It4cVbtj4P0*;h8QlP7;<`(YS{`&Zhr%bM1aNeOlYAo05P156# zQO%jvXJO{F%~d-X2WCr!2*omV56Z}e(9eK^W2J^*9FRx;PW%)mg~M}qfaRX|iNnRw zhTaypD`SJ|6yTwePgh956IbeqgPP5o#{U4Dup78@uFBVe=dAenJE$Iz0=x9dg|-!PH4jvOZ31E;eE=W}Lhe6~?UnXWoRM_^mp{5Yx{fkIg)2MM4PDa`=<{;;Q*oiU!%}HEbZT<;qv_fwt~h6*<`7IzF2N1D_!v%rwLkS=>mK{V!K z#9@z1Nt6t2?nJ22VP~qpojghRG%)j(6d5OvgEEYUIs zVE73e1jBLR9yTo6hG9~P$+9!gyMtp(QKJHSR>ny;Jl?RZtT+3j*P$ zhp9Gx>Vwu13&{(IO8LRM?9tjpR1#( ztHgb1B&aj)>t0`}GB3;0@yN^+EWqjBR^mI0uU^dc_c`BeZU4Tk+nY7N>2m?G#$_pM ziF5ncCweY!;}qa2+))GQ&P8K?9xdo8l8$B7+X>jsRSO6PA?g!8owf#*k}p__yns`S zb{pi1ai2oIJiX@8CJq9^1F_G!wE;sgju41pIWxaWFEu;pIHOmeVcy=T4f+H(iemT3JI-?Vci4T zYS~aXJV}sRDDiYP&KMr8yocIg1HIkf?@A>$4+Gi6&BA+5{Y7>gLq(>8@a6GcN?(OS z7tH6ZZH7zyADq*@%h%e$r+D`msemcIcPJ&Twh)v~3)EOnFG?vOQ{Fo!!eono-t+Ib z{^xTaJ+zh@T<>cAxQzA`DdaQl{QvupE&w)9N@gfopGsc4=e9=*aj@VQA@8i7uwA(jnnni|)}*eP zflJotNW~?lYzI;_Icot5$ASQH3&?mLTMCQJgdFl-5TIKC)|KtLlwdx=z1okC$GQ5# z3(M@*l^{E@x!D`TgqAMSF^d)fStaLS;FI4=xtv~Oa2q~?(^1I&j8qcgXYhQq`8efV zUNxf5Au+1G%M7{u5VGmbTJiH`9@!2h_F3s2M#Lgt5AFX*xnipY`cirQ(4W7HR=7Sm zkDbu-r94*K9Ycx>4CK914(M3K+}Q;_**$B(+I)fS-8rg6BPrG$5$sZxeDC^VL5nqS z^13`mgxI7-YEjUU3u&YB#PZLko-hvGv1hW_76t+at4p)(xyQG%ha(kFfo>iPIRC6@=QQzbys~_2*lC_C zC?EMr3(>gldr}51iYe-!H4_F%@>=5dfdo}i?KX6@ez5;dKODxF`qDWwZrELy<<`}^ zCLet%nX@dqvKW!FxbA-5Ojysg4b};6Pmls|@j?eh`{j1WTxIN5&U_(dGQs)!)3U34 z#U5u-d_-^r{2L`KDi#DuxG8Im`OM*KyvFW8STw}e!yrA0-tl*hHe56N*IY}5JV)Ta zeC4zHEZ82+O##y;k`(woY-@e;9lquH&QVVcM-PnS-+@6a) zO2C);z1F{{rSsal>Fz>Cq++}qJ%gvQx$i5SP(=+k{fR?gX2*t?g4XPr{g8(OWRKo-{?q^wWcxWvZtsPNE;$J^q48U= zQi#_-)XXz;we#wLk0k)^jz}Yeq$re9pMVtkdFBBmSxH9IGLSG6I|CUPl)!>lIcqhR z03}fvf_Q-dovAp9X%O-5VWEy32;K5AAw`GUjrBR+epUYZF+0R8G+;42zA;S#txNNd zTpnMz@LMbP65i-4!0pG+8d z`i;Izuprncwg+vt=d4^O3F9b%WL^xO9_$sz;|i^N+So1WC#Tx=x-_Re~EvrEB(mWjze7^@u&C3 z>_hQw->wl*Q2cYonxh9m+0?_haQ=m`mg*$oXy=I0%yETPpP2n#F-K~@jHjBr?y<4w zncQz3?E<+ea|J7+B?^VmOO@-Pvnt1!k<-a*^+U~o?AGCNF@#K2>)Tr*7-qvvcbHxk zeYYUN3aeMgTe!pKfH2FR-%zVvQ-^5%D5m*T$RUCTI>-wlGK_ zwU`Al9L3L4_NUiG_y)2bvO(i9)2S>fcId)#hmsCBr+4O5MdXs%m$o8~u5`dM9VZOt z2yDgk9B=#*V(_ax6XBhq2x8^p-l zJvbR(W;At6#AEi07jE!f6?A<)h6-SiV2gUCwU;b21Y$2%We{Dcj~+_iwg+K1s3?YJ z&o=BDZ=+@u1}5j*Hm1?8w#!ou?Wa>-F{KXBWc20bAG`>>-T&n-MrG2&$wVzm7~()# zjBjBn1{Fb=8Bnj{98oH@tI{XiQ>Nw~p;0C4MB0{bLcp(ifQ*G9+*EwTa!!UWp86D|&B2j$8`kRCQx3@k{5i-uD+bNY89RMD(@L+=u|i#! zX6(K;Fu+f+6aG|bF4>$#%3ewmnBM9mcf8IbAU*TN;k94rLU7$mub zMwkLn4zhn3GjqmVSVq^h4m(*^TW!uI)RP_+ymJ+1vbdRn3NuD92e!&`%2FVyKT4d9 zW-+~JYU#dB?uo2!s@Vm+%_swTRL}&41=;moaZpDQKKR&4yf9=uEW2qh27L^(mL8iF zXx6$zARniWqlv$`zQ+)laVFLz8semH9L#HUe~7RR?}6ZXr1hwphJrPPEGk2YR56*+ z=RO&oea8CKB9sUQy?>0El#z4{RDiLc~XJn+NFz(T*e+oWLn_~ec04;%$Sr39vKqe*@| znZ@~(z4FQTxq3B9E=00&70-yfpzZASx#hfH1*+h#*e_lRv{m%(L*WE60n0 z2PeR6>uEYl(@+O$oIR})E{}4uE@m@cUG5D+lUXLy$tW`>*`oL2{7v)ZDN06tSc=OE z)jc-r&x+5uTQZcQq_maa1dq4s zZJqzO|u)2ZZy$@qNDVyME*s^Bd(Y3-KxnrFk`_@K455arT|iewPsk+0hhs zcAYCg!dlt|XESp3d33*u3ni1>q-RfB3I7p7FBN&8}3pi6_jP2|+T62=%hN~Drfewx2Aet;_*-mBQ}CGS;p$i6KJ(Azw(9=jI{v9Q zO@sC{hiTm6(0oz3Tc-ispjyKQaD$vS@AbcS)}0TVs^=Ljf$mPfQ{TsCu%E{7N(QiP z0Z3GmqwY>Jv59^CT*TEF-T28EL5#hwuOe4})`EB4)0SCYD<2C-o1-!s9JM+SKVwzH z8|_x=CZs7pGOj{oO1)S=G4Fprxn&sY!iLDSaqMgQkyVe;J9J&nD)jM;HdNb2V#)_c z3Ml}uohQiqAoF<*8<;FN&W2@`*1LIQMeC()KGVF2l8QhXx4W%=GuBq8rX1Cil36=4 z;*dMd8^e25qnN!@-*aG3`T({EcAG!2K;e%z_N%WH7<{C2AC_Zh-qzx9oY9tQJ@Gf=VmOcE%N9eaZaK79rtz()U12u_Ovg{ly^U3m zyD5i{^Z1!6Ye3$C$_K~3q+7DnLms)Uk>;3nBvs=vTR7+FN*63E`E#wZFj3u8ep@Q5 zGRJ$cs-xx0cyr6kA<35bezK~iZ9Et~GMmrDWb2y%svTZ}^t?kH%_NiPJGwP+j7NCjS!8?BrMO71#_57ilD+ylw`k7ClrH*r0Q| z56O&=#9j$Je1nfSta)%VEXP$P!)}|=)c%!<+>qp@{KNP}+pM`5k+mmBR*o&C%^*XG zJW>?61{u%m7f^qGJ=hat?7ino@`h@{n-b1r0alPZAt}UYM!c!0$`QM@PQRT+q)XwQ zBuYc01G(WfWv_LX8HF}-qbl5SS+B0_X4X1AYPAmJ&$}~Y+kXfF z$fsbY^ZP5U!&e^OK?`SJ+EK8(X-zSmE2fiSS5tnH#$^Q3gpbFf^m=PvzpiHC04QxBk|L3kV4 z_n#&2gA9v&o9xCJyqz2N0Ql?c&gg%hnJ@qCnNgPt_d!B!28}X(*XZ~~BX|wyiL|S& zKI!-=z`m!oWR^)u9l6Lb&b_XOT8#&Yh9Hj#O zqxZ{}%;W0NGa(Rkn6;s`_i_2zB!N)EVU%1Uv*kw3^hqYOuDQs^We!=3^^%udOo>1s zz5uq1+ivY*cbJZgE5q?E&%;kB-eTj%&?V=c>v}7ML^fC(aW~6c{i8MfBvdWAf_EzgGHI+%^U0&VY;@C8T!= zk)S&#`0_f!jJPTu1g7KdO}g`0w5 zvzk3y*O})nbAq6=vn@d-r;N-t#Fed1cgC&_B=ztwzWFBnw^{KL_i?Oaf`=qg>%2cO zumrsP?hnW4=+l(S^bixtE&I?EX7T=llz2T0v1RpsFW+{+oi#q{_0vLpbI!jm<>UW# zDT)0wSNsvlCe;Moh%2sxxrWm}Bu9FchF7 zc>IgS+=4Ohh)$pWuqEvZ_zNh~jmqZih=S*Pr8P^l-K;G{b-y#QEQAWlU2h25u95$_ zx`!-HLk+Q=X*~yJ%fAZ$^cml<27v7`R@+jisuZ^8h{BU!bTl~{dKY53z2KCo9MIcE z4LPFAxbu^PWZT_o>r}^5q5))N`hxcGV}`a36QHPD&3NM-I%Qdtf0}>&0;QVy<|1Jd z4Bb-nJZMcT!l%3@XfN2(9h1+ zmTe^uthO2q5g@WsZUUU?mmspSoJ8?6jH+)P{ONSN6pU~qFv1^&|F01qqP7fL2t-}= zOXPcT){9!IdbV>m+6?XoXcoBf)1{O3e^%XjeI-mTD$bE~yW1J;p_zMHkir0uPoZ8V zekh%?8L8OJ=;sMJ-wU!#qKZ(>x4r)u?>aZM zW5hW$&6A3n8{y+B=aBhDm@>tafJFud1s9fHRg|Z2DC0#RN++}bHMcA3(Q96u;_%z? z*T)E5j)E-;8E9n~kZQXZ1>WOrhzTYYkLft;A-e+n8IQ&TKqhm1}o_lxK)cSl)#K?}N| z;+_LIps6D=m`9;FW-&<}PitwTbVUR_26O#iA2TL#11~X_d~VNdbLu$Y>z!A=i!5Z zX`slZ78%ljy0%d%+Jz-Zp`uI-J_75XG9;CwXhr2j-z_NpZgEqr8hgaLlkF?KTfEO` zBYUt7ua7;cAP~w&U@PJAO&bf_ffn{h(mMo)BZT7G9CdHlyyV0ZZ1$AnKNyDG6`$K#wxLJqB0RLJd zZXBW~c^hiku<&Yf)3fPT^B7EizavX`LWKL$wFoYz?FIEe4eV_piUOH9>y0nJJQaJl z=pjnFzOaSH>JMy7Z0;QmufoCIn~|&C&&o&}7x4o&t&&dK)w(!jO3;fFUMsLr*NnOS ziCWO+GDQtD&vc0=yfO72C2gMdkMH#$dF!|YjxSYP+P+19HkSaNtPsYxsQmK=r@$Sv z5v_WqJM6|GoI6c#MNc5bd(5<=oZxP3-?;H=2xUJpJ}dj+V~QM#h=SQ_cheV>2Y)6v z*~wU*o!7629II@{Srej^Cmr*s(KWvt*hq>t->aML7MrREyG5y7Sq63{8Z$;y+SJ~w zS1gQw_8QJONDQi(Oh|=ofrO}dwj1yVc2i$I;kke_H>FW4CKl~nivyrWJD_R0W^Ok|ht=sg|z;H&g zrzJTrX@pL2O;?avtGQL9wi}^Q5OZDk3R5?@5IA3Mq(SQ7h~2rw=JB$Jil_7Fi7Z#qaU* ze67QbLbeGq&_SxxIFd$Qeg;$25r2U%)mi)8J@YCqx*^W#n6u)w&XoC!2Op=?H3KWE z5LySNV-89E5!W$}nT|Le-6`tRVVEA=xn~MX{ACP_No7ezLq86)@iUhbE)-qz&pqeB z@kqHg#d)PEJ}Aa@iK$oG+UK4je_wZ!(1>f@#pv!PfqDYxzW^SU6ctMV5t>nfEG7G5M|q~?o`7LxkQ zgk8)P%d{;L(XJ-Is>M6nFgm+reJsW4tSpbx;Rp%C=jd$KJ7a>Qqy=`sy{IWnAtN@( zMx4@{o(-~~zF^lZqEftfEE(Q}mYqcglycmBCW$uBUk?sx{b(JY*eZ?R)go?HVSOMU zu$~9bx4blcKrbs)FNZJ1d&Fj25d*rdnP++6*Y?<<%M*D2wM2lwQ_C`5ed>o^&MGNG z&Xp^k)`~&fuxw%QT*PVoN$QCdOwjMSj$0Ub&P*aa?3r@gvtYwQ1|o%}qLS?x94R`)fGk>q{_A&#U2y@NX1lMm^R3q)Bhn zj2naNRXUd!t#2l(-l88MW?5BUIxcRmxkQnc4f<@OP)kMtMt_yx%Gx&Eox)^Eq;DwY z1=m2GW-1~lcpHE@_NiI6zngO6M_UxTb~PuV-uzzWQV7N$+KO9{dBqd{c3YS_ZQ0{Q zHgDp*t2>2GM_bR&Bxg^(N=~F|v)=6G4aWhSZBbC6cd|Y?L?K^5&6%r+=XSf(RW>Dl zU)F%<9!t}di>nu1Gx`JQV=H5~QsLq14w+(*ekc-q_0lE+Q>XMzkM`8*;{)L&;_Ry; z*@_RpO4booZ$69OPc~ovT=Hd<97Q+rQ6wo~6vHXIdp^vkBY}A* zRM(Wt;ePO>z41?vbK0;dWM4!v9Wg`HJHvnCr?^pN)o5;;LWkbkGKyT3)9=-`NZDeF zYH%XaN4U3PXCcOQNu1gFH?Xy6vr*D;)ZTQ#X#G|AaX)VXEH6PFMLyD6rQpRK<>*_# z+%2@8;BHD_)RA0!@$5X7-n|!e?#Ga@$nx>w>9v3?{N!8{&!#wz3Tq+Mtmtx?nBQ1{$rq@9fyx5 zp95b9!2n86w~JbuS#tAm`a~|bKQA>VzQnNtjob&&7AONc#Ml?IR`S#RoV%Zp%%A=h z8w!KpABwHF8ybhg(dRQllpnOjv=nW4T!JI2$jgEC9N03Z9oe4j6@arEUL80S=sq}j zSXX`r3do-T=T>*C>JfXQ8~~duu8tSL$q&19Gs-dAy!#e5)nP{E2fVIgh5hp@@U)w zCLGD#dQ8<_`6Hs&UGuyDaCPJ7MNIJNa_>J^tm0s2Zws5r%wa3X>7Fj_{=ba;7l@>H z%U~C0uRUF|nx6XcKa6~dEh*+00?C=^Dx%j+oZ#wS!b|cVKuG~KWMETbAxhZrFD1W= z_eua{nP;X^!ZOW*n@@R{syPm=cIKp&G1CX??WiNa#E653DgJ z(~3dIjZeLCuG{N`x4tys2+8#*gHaKsH+-tvG{>Y6c5&d)&7AE87?lS$P@`4RvuTyk zAwXE}J;9w))i^#YJtdDLKyn3NgHRQPef&COZYL1TW*KCxhIhPF7(U?FkViaj-xOa4 zqm<$g62BbsmVfu2Bz*)k#=ta*GJ0SD-2CLMnUyO#DahxG{Rw!#Uo1h{4V80OyMz@c zb=z+_S+mS7;=p3`X#IgaEUKF5^GWu61E%=1!uh|Dx;W78nqBCRtbhjPuT;lNp*7xe}hD1+a!Ke5X! zJ3NLa>RPAb66;ioRB(4M*1-E1-QDTZjaX;rmaBMo*_uj_b>dV z;_J_L+r21pZ~+7*Kw_twFGdKP7)&CrK`deC8_IvlWPS+hf+ z@x{73*lZu#$~(1r?Lc;Hh}!GqXEl2JxPdDlY*tj_3f{tdr6;z-@jeNP_vG#M)FX3u z&S=5XzZka?VBAc(c3#LRwoD)BA&>k6LS4IXq4wOnvFPY|u1wK_xzQst5BR3JE@+_C zR;265zNbq;^_Y(juug!<{%L$R6gPt9Fl{4!29D_PH*J0J;tK!k z+^MLOpbRERLie%xUlRJk=6_1)7i}I|T%Y=^Xt7lp>&q)hvp;XR1m2$(rnzP zhV)I{Ho`WTF2=8pIGgp^_Ey*WBaq8|*?H+%4+XoeWddK4f96KED)Har#C`T<7SxXz z-)%@z>~%$YVZoz4WqsNY6`WB^Pcfj@7ui{9&bP~2RFB$Emo{EA^180yOc=qUso2^} zAJYzX2k7LpV?1cZw=$ouYyC7uT&;Ui1$hAK2T(j`BGs{-nDER~=&rYH!*%2g{=;?x z^r-id)lMYevPjbGRKpUcgDe(taL-@ekyz+kKD*%9P)T~N7NqyI5uJl)x zVp>Ueu|K3oy{Z$EK-A319zP4|Z6;%~Y}u9QW3py+nCx>kVt#p`DbgpU=LCs(V*F|B z{C0NU?!fK+U~MGd`<*!{6=>CJwn0;5-j% zfN^UtQL+a%%f}zq)xULU-!%Izx9{5ihuls(DdsD_X668bx9DVfq*ONju80!Uw&QiL zrk3@hXL{8UILkS|tBLJ45Z=DT0Q8Nz-~R|_blg*#k-SA!)|&I<+Z z>HDZyOh2&xcY#gtViS7uJi!n2yp0^n&}Pb>ngTt>IPa&2)AP{aiFT;R89r9L9@VZQ z_ZmdWS#Oru0367+E3a~-Eie?r;mJ$G_FFRV)Xr9)c9RVn3KxPUjj-}lBIqKmBs^i;M_#AXAKrd8Kfx=bT)5gDGfWp7?6a zJsxe^c-FJw8H2Z7tcE^YDmmwp-bt7-VwgF0e< zU2Gd1K*MbBqcpQWem#nT| zxWvq1qVBisK_Oxnp< z-aHV%qz$*#cQen_e4F(iKmZ=oB*VmdE~$@J{Hg0-%u)~Lnk=z823Nt?c-wU>#IPN_ zN~;mE^!|5c-(1@9cD5HNlceeC$5NU!DczQJ76m#B9lP;fuTPVS_KJI`f3OM zm?1eM(tA4^jckUGD*Lh{-6ts(v>&qWI^{uH7PN@9@46J@d!x^Xsta%X&*`Cii4!l^843!ef?r=5CVAXjf0PzfQ0qJFrrK?! zFD<6=&GleO%KjJAewe80ds}^P%rJ8*ybg|`j;soEmQ>|imV1HvWmEj)A7Fr}bvH=h z+}liWkD+@oP54=HKtbzrHi=bCV9p6(t`ScC*DmD(%>hv*x?nurq8|3@P)pamWdEa1 z+1>8xau757BCp}qOYxxsb|e@^|?>;9>Qf?C#B# zn7*HCw&;O%Y932Ahh%1!>}880rU%!b(|I4r!ayIAdzvpx*xVTG=qg*{m@Xu}PmH;6 zKOGO|uT8f=6zUKt8Ibr$qVZ|#?PI{7I@ybIpFg=cRT}^7Kt6`92lSf#3_^5)X*eNb znUXI4L#`R4_S8f0U&qh`3t>gw#Yy$>^6eK~&g^#Vq7i9h2~Ik4$pUUl8YYS_IRXNN zH)u>&x8m{UB$*2s2xIb6Zv?!w`yUHx=)7w2IJiiv*5apnABhiwPboV^!(64rF#aC^ z8`utZeCJn^pE(gJU?xe7Mp^`;=}wnTdumj3J1 z{{-%Y(*uSsoCqduDivB&d_I~lPJI7~ZA^{-r=?~Hle7nHwU~NX>c6(rEQe;*_>#7$ zmWi!&8PD^rc#|MbjwpFO9RP<$b1hiH0yj+UHp z@g1FHT)MGz2+GuZ$9J&SM)vNYZOp9Dc^iKroJi)nhAcN`WyyON((hct)t5HhCD96% zS-OS}`;oK(am>T9@iNiur&GglY+>z)31>74oy)LaSlH7(>_l6#ul#6W|Kq*3t{czz zr_Gj|fvCIxsXf8%b+X@0D?bsOfX5R?1-7JuJ>4NSL8u58wZpL&yuf;ng#IvwA9D4X zIfeO|?};h)&nZZluxw>(la*{lVtN)3Aaul^G4Wkt?GYcn?f4?$ATZa&G+g=S4f;$Y zY`g&>`>{}O7p>Nj?GbAq*OC{ucw0VV9Ijek7Nnr9*Z!BJAyy`~1WVVP@ufbILasu` z0`4!znoL;5oy@Mce)l>OzFz=MKwr9?cO-q3_}3;Avp}6hBxj&x+_cR_%Yk}#7$5R3 z|9JV&P39fJGN7kTMLNRT*tP2m<7(d)p-lOqkyr{MYWsA_$TO_w5h{=iX<4#2w-qWL z4Dvl;irtxNUv|S7r@jSRP{WYC0&L1ST`Dy6zO=3JaWMM(cdlKF$b2c9AuVns(d%T& zcV3I$-|$DHOFbZ?;?K^~vTIs~5K5q3w!9N8KL~*YXzopQWb4D1%a{>3D_@|fMZrZ#mxDv}J}^6T zH;dw)F$IZk`?Y!`>{p`lS$|0G)yOwaHh&h|wo?ihFhGuZQTdC`s^Rcm!?23id^V&b z#q?CS4>+R^5KLjan`0Jg$J!^=mu2tlWqh-s7dO#9g#IGxX1pj@0aqkVgF9(nu4a0#>a-G_^KH+O#0&~Xp?B<=W@EW@ zbnL_~d|l9HnlbBrV^M&QQ}W$z_u9E?T<=c-_}>SWHKYuUWgaW??gt#8j*)4ztC&)3 z!3WhYW=7#6Wvuv3kKq>OCg{pCRokiosgCAYiT=QXe1mqzZQhgf+a>!ws>Er*WT$&n zdHD|U4;7XSU5-BKD6D>LymtH!KyvMjW53nfviR56Cb4eQ-`=dvt1V*`q;LehpNP1s z@FMmaD#Pa!zJ~~LIy`o4r6;(Ql(u74x|!l)Hd=1D7LW_}%^h=>m8m_mZ^u3D7Ldl4 zyT^YcLgyX%iEtt1m8L-Z`_DSNy-E$cAO~(oxqXuhR_m(P!Li;Um9r{ zhkn5KIr+JSY6XQ>N#i3M#fG(yIofzcfb}(o@@dTW+M+F zDli8Ba+exx96CKT$9=n%NYE#14*UT3-^?WW`-@BCtr>JlN^7p1feoGaWvBiE8^(0* zaHg5aJf^evB_73OXejiYQWQ2?XR1vDc_>Z0wsLjM>vX?S$E#%h>!+hnhK^`=0}2qfsG*Uhe8GH>Z#*7y1O z3LNyq1`)?8u7lb2|KcT{p{Vj>k#T`x`zb#C;yW#!Im%AC$S-@V=uAclmSjOYTpscW zD1!ABWG@R1=^c-z(_)uuq&5VPh6m%%Z}WkUL4&ACiu%3u`?AcUC5Hp?QWMS~Z{i-? zevC)+z4mZhxp|l5($Y?c>r*NDJoJxE8WYCFZ(_dYF!bU%YTfK#D7XTm4^4I+mHd=S zCtI>o@i+2aJ$IeH5@bPb1pWjebf_X1IJ&rJCZ`-_*9y2I7z_O!R&;$wbf=QW@QM7> zIDSZO7-_(xT{Ja=C?h*XiLtKK;52*zPD7Ij;2Dy7o2qpiQAvlGbA!Ikd&Hg9F@ROc zGU}VJ>}HtRRgtvIPT1QfPjviQMxU9?6`^{_ivA6U{$;qa@0%!>LI+NOLUebYk9~f; zR7^SFa8S#>C)JiXuQo%ym=yZIx7k<<^;*gpehWhWY@?}0u9|vlI4fbz^eC`67BiP> zzxmMUEmC-afX{mAge#t?+}N!W8_xph0RVGo6rk(`89}(5p`>M?3EA9md%|3n{neWe z+2eVSKDf^~JTbX2f>VQf`hdJQKm3oG3(mso%2?E~s!?k@K8k#@h~Vh9^oW31z)<{o ztnn6`Ijsv8watr8!3n`sLXJM@K!t=73|WfCD&JyKdGzH@UXk{Bm^yo(KylQT2RGgw z&CEW*79M6KM?o3Z)Rb!H^mPcD{M@x;oAfAZ7p#)ysW-|TXIjf^=E%C`>2bNXKsV86 z&%@>}%?aEwlC+lV>D0nE`=&;r0PI!ZP()01Dhk~5X%VxO$5Kql{q+J6l%JeqrqIwg zPPnMw;j)D5PEdsY3$9b z+QwiCtkwgJA7CFSRA*B2MK8WB{(YZ`okWB%G@N z?Kky-%o%s;pUH$L`kecOHjwD@RXMDqk0Uv~)sg}*5pGpqpx1NPkK@q@mW^VR1~{EIO$<*^nZ8w&OUi6_3IA z>o!VAai&@4{Y|Qi+z~Zc?qc*SP4=H5UYZ(7PY9{!JVTuD2ZXcY#$5Ufd;}&<8||ZI z?o(W-IuN~AE=r|T(rMY7TkoUIVE`(<*_m~JN^Zm1z;nQ>Y24J2ERuSVbgf1y>E0_Z z;YT(V>Yolioly-Q+Oevf@AXYfz{2;~|3ru})uxCX!klU&pp3qH`+QED@BMg@Qi}&i zpz~nNRmT@xRSxn_zM5bG?{Ir@mlErr24|SM&WPBnew{!9yi7Qym)|JBu7d}&pF7aPGV+x-mW-+VDy%sxlwHA#^!*d6Scyu5zz}%2J!DM& z`;B^Mc!jfB5naj2n>#>Nmg~OP9rCJV@Zd5#2T^p*^^;@DaCMg%YQD(XC-z>I6COKv zjLYnQChK@FYgY)A5*vSG-^B+<|9Z#A%F|!|U{CkW|I%&x$q!f#r?CtJBgyBDY8N9k zP94}f)NxV5>o_<36hU$-<00?24@xurOnT2ifFoMToc$f_B>!h!B6rPa>F87jTPIYv z^Pby;Xe%D<;rCfpr9P-y>1*5UHjy?RS)pqR9}4K}K#v6UkzZU6fj^}v9W2vhmA5lM zP~Xrjc;u4PzkwJy3TGh3dG$KS5e8+;pH#O}uf?d_suklc_NeeQ=c)_SU^eisRv`eJ z8?N(soW7Q=lj+Ve^EQ7i%UTXYvSw6igW-y$gU1DV0}4X2QP=VPw+<$*AT!$Z4A972 zizOI?Cp9JcLSd~G^z*4cf7E_kUnVBe-tmdeMnQJRCGO(JrjMYg|1s-HOGX&DPm^|R zyTE%-`LrP=s`{XX0Tg$dU3GT7;95D9gS5U1YA?~^-l~vh6>PjkrLVbdGDu1ORBcK#qB#Y0C}amKAA)nbdJ`nge#6X zruIYqoB+gYI7^WfBaHL8S}sazY^0W*YS^cE&3{%?Tm*&zxCUa!#C5#Jxo~n>M15p( zzVA()JzzFAT~~%I6USZjuhix!jkF1G{|~d_+&GHSw z44j5{UCSia+Uk`qI?E&|QsFA5rshp2s~u;8H1X?tpQUUmyv|9I2>mZDRJ1Wf=gwVt z2^Cl7@^Rs+0A63yP}N${2YAZk;2Mh}?#w&`W5x#uK^a#YH(sDJsbGc_cbTJD_^&{s zg&SFmb#KBPqIN?~AUj$7jQaq^K4aOJc*Aug08VQE%aR@eLMMmkpVU3Cs=Xb%fM6syn| z;ETM97pe5Ju`#1tdZOrbnYW+y3R<{&gaezn;nGSz{Nubf zq2xzGhZ_+RFl+*jpUSB?$fsQEi6bwX+L;(5NX=WFhv7O9V6@BYb$Zp)l|HD-M@k~! z33o4FeQQ@;XmlN%3sM%^P}a-fyAT2|4xad&Ajtqe}=W=3=Q{J@v0pA!C?*<$&H5EBy-&i*ZJrtUcFs+IeaFI za_l$+zk0a=eso)jX``?^^WN&CSyB=UT*FUyN&6$dN`yew7^-MJr0ox`yZ^ETGnlXF zPYaoA*tKo5hAlSGH7R}6nSX;0DOe+L3j#z(Q`@jED1i__D%UFYg_JDR7DbNt=xQV! z*T7Argt{I`Z3qBX!GN0yRI8v z(=C8ueEhUl1d%EP%%AA@2?#r?&xjZBr{LF9P!&Lt-~l>qut(w#>xkH#v4C zUF!pqxYgu1&N**>7hd>480fn3Cn_UI7;yIoaYw#*_+5Vpf{~YRUH^&6a+i~r1;fdo z`=A1b``cOypi%-kRB=H)E@5@}pCJ@x2vlKy`jzefphpNHP=!OecX#bCe&@diZ6$%m zB9V0``={A}3@AK2Q*BZ5yk*FYe~ZL`BsT(RECMDeLV&IO136=Z3(-4-Iy=(;B6R+1 zP{FgY@Z!>g{~4|k!GYi!JZ>+BGlJ`HN27tpqQ&jeZ2za(&;`7B3RaU%V3Ks~e@)|G zw9sW}tSdOyoM$A{-x{n{9WtrNE!7OAfBx>F&{(18suKTpwr3w&azG}1!NiWv{paug e|F?V&;0F&GU^=vS$3X3tb1Dj&x69-#1OFdgKQYJv literal 0 HcmV?d00001 diff --git a/images/pecl.png b/images/pecl.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf300c061dffe6ac6a53dd6b9dde5267d5016e4 GIT binary patch literal 13399 zcmeHtWmp``w&>t)VSog;0KwfYXn^4E0|a+>4@B?~B)DsEg1fuB4DRlOzhUol&pG$p z`+mItuluX6>Z)2L%U5-OQ&Nz|KqW*4000;=A0$)&0C*s@%!!N$eeyq8*8>3PR+i%8 zN;2Z& z=dG>ga76hXPajX&g(+YT8?8pN;-)+3dnNOJ79G947;M8a!-~KPkNcDN_K^QTYW)o+ zAgNjJ8#UQ9Y=)>Fo%~mH)4W`BR+&)%%xf6=3@i)1w2vL%qoQDx5bs+D?~?(_m$NB& zde6kqWm%mBeI5XE6N-`bK@S9M9+-f#9hsaE05+c2V1LLfgfxtbQXnGo89l;?@_H(2 zN^X}llFg4-bJ&J3q7egIvd)09I;^W9N(0QzaR_=vaU#nrxQsn`M{LEuE%D!9mkTpM zS+JU-Hb_Tru{%8i>}T9l`206U3DuAUZE9Z|yR<7Dzw3xEF|0EjU;<=u2C{#|T^Fz^_Jm%+p?}rCT`ITu z8bJ|>z0=!MaH&0?g^bzd@Fzo6A|!?SD+aj%U33U-kqx&TElq(>rt7>4w_L7BZyY8> z9pXhdDrZ&*SwTf0#uLd?X8b4{k_cO&9z*vQ-x%Yo{wL3G2fR1AyZ&}xL-5TM3p{k&>dxTu3W>(nb}fMsLwjFu*s z3wtvZ!h(#ZxgFVz{WTU>U9kB_#~A#UUJ7M@l;->fe$c~*5HPHu zhYFHZ*J%>+_jWRDlmHtGgWa|Q0Py`|0!7LBK6)jRR2ZV!W}rDXL4ZXx*2xxJRhKwe zrA@T}=dn|OfSWX&hm5-$(mIP})oQ7wgquClha|+#g~ar2t&7zd$QEP~MYQ(b13(H_ zMp0hB(NebpB3(H|8AZ1J-20j6vs*_hN>=>@Sr#$E0)_wQB7E(YS=idZ6ax=BQsj9G zj*+&A0FGmn$MRFq?mU{+d{G^qy3teHV=a1%HzB=1CBvJy2eIOPZXzR74r8Z;#>!K7 z_jhzA!-PdV-WHqE&xa>PqhEY4qvGep4goVksa+!`(iL89T?!zKxwnUjuvjIf`EbS7 zW4axpf>5MiV)+LvYADP6vW~FMKQQ0Y$^^+~8gEq4%I3*R@^y&Op!t!&e~e7rS?_Xj zcXdY+Ju6XeX#uk#woo8%bnq-UMF8MQ4^K`+&gBV~k=p{<>mKcWC+9~3%D%+{Qi?bG zb0uX-O6#y!b;WRxImJP!jDaLWy(AvN0BqQf_7B)dKScRoV`UR`xH2Qew!5$*{S06) zNB@m@&_+{^cL?v@=BI=e85Fz9SchC1K(tD#Cq%M}w~Ki4o-Bx*`g7YAs(F&VP=P2Du z^hIGw8Qi-LQv{}&;});@F^AvNW_IuTxS;3+YGgK!^IuYX;WP)|Cf|KBQ9U+T+D_4`tv*RqXMEQ2Wrdyf*xD z(sgh;3E_Ic0Y~`19YgMcmktsM6#qcAiA{qmi@f#u=(G4|4hI%jY%uOO3B>XEUAP-# zezpYOh`PkOz`BGv2^%V5itFeP)Z#y=-bDkY*MFeOyv_NOvz&vQQ=EgTQkK+^^ed@R z=d(^|l9p|$PW=M&pA9R`>9pdjm_L0ppZuMOe<`NP8pwjB?5GWC+@tU57J$04wb(R66sqM7E?;r?%RwdT+sQ!Epg$A?%O4W%{gNruam~ILhqW!O-k{ zk+bX$3Q4x^#JmfsFR3rlBYLxVLVGbH7{c=R+Hv5{(ja7j)&8%q}^20IeTcJ$Ox2{hm z{qJI#RYNVmT9)q7Pj2L;nz>YwbHvQkSK*qm{POyU&ylX(E;xM1&BGnVo{((MX3up} zRsQEgO`>(h?0Vqa?ul9UMW;B^D%0AyU(t!l#p;_sqg5*)|85x9QzvYGHGVxe36f?K$w(sN z#S~-(KLz7_`h49HHS>7q80Ux!DuPhC@Ik!CKYM zl2pU6tF?>w!SU*dbD2x)@%xLfr-@tRt7kovehX%|$Gkh|e?f&H8DmBrRE|JLVpm=PFHm_}HG@NyE0*A=#1 zv7%w3cB}Di*W_kOW@FnK*PsiKorC)62KFGfU*C1~4x_gQvo+6wYk_qE=cUpvQjLf= zV&gk>v@moA3~P*86h%x!f+yAvN=n)+nk<0{1}B|Qsz3^Qek;!@rbv`8y@lH@QI~J{ zOg8r{tXzyQ8+LoyFxe&&dz5zzVzMbH(I9eVJU4XaeS#AAfx(nxi0(? z+~)p>f#sj~6fDg4(gyy1R!?BqKS4u5oyH`NX^=~a$#1GOH8R9+-~PCkd5YCg+>e)% zs~yCi=hYU^WPT`YrLK*AruJ6@s;OyD3GkVo2fkZS?NViycTH@t*uPl+x^9@aHt8{$ zl%K4a&ha>oJ`>Kw5%Wu%BiUSgBuS*$#BK91)tS!ueEWfW*7f*%z5lRW>MZZdr>DbP zMZfP4g?SR$5;{)S@7sdp(au7$LQ28}@k{hC|NJ!c${hOhyXo-47`%=q()g%%=KTEQ z@NJ1)bAp|olpc+No3rQXc`8G-Ca}z-(rId-L48O)xA;j%$mr_UY4lv)n$CLDdV#^1 zo^VE|M8D?xf`6@nC@wS3dzProu==SJ@hP;JNSu4dj(uLOW^dALe0x!svUW;+UMo`eAvh;n>T_*IV36d~q%2 zOEM80Ar^@vU*$%@?f8I+S8qINK5@E#)3e0cw=^0V)!F`(Sj8k-&J}?;xBa`l@qFD; ziF7`9?)Ae$e2u|x&Vf6TX*VMNkf4*0yD%`p0kfw*|7G&5{TH2P-2>)(J-fPf_uL9w ziN&+xc1=YCv_`jU{++vSq6(e`JDQayU+cq?>&1sfmgCJ8Pv_cQyOrko8AZ?!-n{?@iiiT9X&O_g%fo6URc;`HtCWv0+^+@4}mL&#kS* z1d=l9vbzS^r?DrKN9)E}q-XTo3l(=A_g(eCcw>b-Mc)dU1%438kL9$^A3_5fpR z^%3k+p7_Mr5}tk}qN^fCTb_=hO)v!^sp~vx%kXW&b2eh+JcoF#r!o|PtJBw3^f9L1 zbqw_dr_>U=M<@Q~umF^&QJkJedKG0W==iJyISB4L-h`YRQ<%%LC}4Wn=(63?TpkT7rQlVHl!+ zmZf0m0C0cR!vX+bECKNU=%WD5U#@6qdV%>nhx-uknMO#xBBXSR08#`xy4u@<7# zl2;-Zw|6on=VoSQW~CHHB_}5rboyk*uOcD!4{+$45T%8SivvFki@Uo!vpWZ~y^}c$ z8y_DZ3oAPdJ3AA!2a~g>or{qNlbtiw--G%JejtvDBe5vJEvh*;u(U!2Zh2ji4hcFkr z;9uSUN5j7+{5L?Ye*v<4-bn<{18J25dF%Z&3J_CZGH9ON== z%0dYlGD>#MP>F5olSaeVXMOh-=aJ__*OBLk6JPtX(H*ew)6SveQS;1#_tBqO1JlQ= z*;ZztmJzGN`ZwC1nunX#XN&|xKToa7Pco3JGXLg|>N3t8P{x1UAjzIK{S&X*)9;#1 zluP>>wW!6vD+dY+hfe%&2Mt5Tv4l7upwJ}EELaF|lU;4}l9{aXmkE_=SySIt-8JXD1_b*4nhrJO9c3#}pH=C9y~jilKh>uuUu=*)Lzbu+ zTpzNOvU?hQ7b-!b45DzrA01 zCVjd{e^#rp2xF>2R`lIh-SH8)KdkD^7kS*{JK5O?ss8@C*gp-lxc*R2LE zSb-ruJeVv#YiK4*xpE1iVayE$+;+E0tgM#kqW)2Sm)Rz4y`q2YaslR8{!p!oxWCK)Zb68!?Iywu)eIM!7=EuyW$?Mc}j0%@T*tCKVZq$o>2% zKE%SZ)Ne$vm@hwW=b(Dee&XCH^D?KFtZ5G))gZLU9J=G+y>E2DwA&%`(2`m(|L>|1 z{k*g^Ep%iyVH*wzjgd^_Ua z)4=9{bL<*WJF^if!0ab=d%A|@U&p-P`W#v}K|Wi9*<&^eIJQyisuA1^0&d{|hD*iH}4MFbA3Cl$`9z@J&_H-GGZH34r& zS_|TDw7Ex+H6@-_b@Rg4Q7t0olrvd95;oNJz3~Z{K|P_quOS zw$q>*j8X!kcA^Iv;Gsg-=*9bR+9{1TTtxE#of^~ou%dT&GWEn~r+nFMF~U#eJSHl< z@dnCrV*O1%9w*)_MD7mid_P4lf2|_&)V)_DmC5Y#=Hsm&^*x@H)xLzvjZlVYd4L#d zi90T9PvWP?Jw<=3?;0&kouY;33l)9oBjX?@X%7sjA#Nlwizi1; zso$n&Au0V8%abpg>;7wVopeC(RjGT(q=JBar*Q~+m>5N?Zoa&KY&_QO>tCtHbWeLn zNcIi$C5)}##f%c!#)`$(gibsat7S9xpYLW{J9t`ehfg0*{6)Z-UeNUmFzQs(C8_C# zh%J1?CtwuQR14{lw{waeH@@49Rg9#Weus(QaiW&#Fv7RwuY;>)7vzU;b;`pdj9 zOf1v;3;JJ((Pv|4`Wr2!9y+^wVNkq~9?EB)t|E!>HeKejMEvP_c<5&FJ4?BkW5g$5 zF<7c2s>en#GX=U7imk0YKix1IzLtw;eDkZ?nojc_um!r4FFehA^50)|HeW9=2(IHq zeH|r^HDW}`Q4%$}s?HaZFEjCo@?N4McAGO&=4%fV$K<0<@qfClTK`E_#ioRBQ+1YU zD49wA@goo8M%A0=$s}x^*`g=wn3JnI%lj=1dk^u|IS?+nxF#oBbDU$^^i*$}JzC6@ z;E_$Tna;!HA{N-i_N*eS2g)r*UNt-+9rxgymH;@ZfQu^w^I$&sV5McFFC-ma2PFif z(;JX8DB0y9P+SoULuCrdtwPnK12+wOs*;y& zHgzf0i84GngZ=k&65x$eB;*W1JlztX&-gWX|GI8~5)W_^nz?Ymk9+!@W_dxO4 zzOtWY4LavH4bJq(L-UOhrKHG}$=%i^KeAeo_f$41*S<((hA2o*=y$lFbz;k4;mGhZ$ z#hi8h4U5LS-?X}B_bsN$=i7mmr|Vi?p1|7c5~aRODxJBI)@U%tC?!dy=lxMFR^s=v zngy$vGFAf9_v889p}W%@EE#E#z^n)&`zA+GWii8bwTsWV3dmZv-0e!2vua=R>`8A= zf94CmUH{zD(Mx!q8PTLJvJg!x1Xec18+?&AKJ*F=<~Lg67%22Mo9vMel!j8RPS-aMwAAX_a5Q99$ZV6? zhALFA@JLWc{ucyd8B*WN@oddP)9&5QE375XAmh)Hn^2}bh>2D1HmOuJ%;oX^nEfpH z2(AWI-Lmy(lI^MnK9;(FcHJQKGR~SsJS{tou=mN9pX%WSKS50?)CQ2!@-IQ6JETSK z#`y;5>^&{Pe65D3K?I+_2w!G8|7c4{1Z{Yr;#yd!W?WD6rT*Rs&KW&&kCTCP(F(J% zdVbC;A{XN4`gT_6q$)gT>f@H_zE4$;)cOEb!DMlWMfqYsnJ--vyy#i%6Bqq0`K)&8 zs3Ht}yn3(1Vopx{pYN$ejH^EP3&r|9AT&eu4wm8Lz9v-z&yqtYV5Mk5N#;I#_=Mj} zbKz&Che(89+ulW_z;S`qFzWnA&#PiXA#-6~29=&DW*<^(gHMH5EV)^~6p5XO*kA^S z>0f_;DjKl6FSTo$8b<5W+<2=A{!vpZ*aEW$IqVQ=_ObMoH+!nx3g&nhFXB0wdpq@L z#u1%8sD3~kS?26QQlPVQYH(#u)%$fNB=W;bJSk^7g*>Lk@Q+wC)5t|AdoTm${{-(g zWx(*+b+l(icT+U#GG0UA$l>w*04sGrCam(h>zrsO7~6POd@ht*u+bZr52@LV2-I*0 z1>~{3=Q@pn)!SNX0D1J8#g-TSX7v1c6LrgxDcblI55Do~psdyJ(y?6(&N_%0gon!e z*;oaxMVqnU*n+KHIaVwXp(}aiVOt9i-*)wN2yhR;XxMTZ!qR2_6roCY*n9(a{1Q}` zL)DB>CidR5yxibQkN2ymJ= zCdIMzd-4;&A?W==rCNw&fC0}QhSs$Ry598XhaKs`s?5EwcOG|9F8EU;lqTk2>Yd|S zAQI{8ayR(ImGY7I^IlN9Z#zRHI?exuv&fK$Ps)ddB!>G7>31=haCuTMWxBay`BTmz z*hw_P=ndoueT(1NEs$=O5tY|U%wc3hNdYeJ>3ia+c3CO9mVn(bV&7#*@}2;=0{A;B z^iw!G;Z28zx@EQC>-iASw7QB)9q83E!f&xP?NP583)r(Bo))$ysIM0V5p}4Xvs9s* znhxw{*!E9s(X~*a8&l*(41s~Q$eJ`^(g&ilYP#{kyO}34G`bvyoQU6~*RB-f+h`PI z6nOW`8N3P!ThPa=A(@pGn3|VlD0jM3^a;B2gPNs?8JQx17QRn0U1G0xs$lIsWz&g_ zF}h=@ej;BcN9JTG@t*flNy~-^+TN4k8hRkcqa1du@gSIHA>bqMe)2ugUE%jS zB1t#!QfjZ?n3OxAS9FS6QHNxT{1W6~X4;&Y%p3N+zBbeeUC`caw14X0nq-XDc45y9 z#mdD;eK*qha6J(N*}=YG+&0h(%gjM!Df3=Fkm^-m<2kh;Y5bTf=w(` z(7Z=53mUI%@jU|@NT1smHI4+S_U zWxh!G_)l6~8xjG~+7P8C`3o_%SVgwkqP}S>iQxaiPpmU31YG7SmEY!%${%&=eRK8% zpn+X>c!me>1=Q)tyLc9DssL0SsN&LwS^?frI#Dqa@0Uhw3b+Ew%|w+u>>}Ju$D=3g zXAQiMe$%)q(>VyBBss&x;`P9qIsrkm`tH;DJr1uPcaGc}K^w@}@%TE79EI=SeR5wt zAe?bq&$z4)(%W+q{|8NLCd+2{;noJuXaTviy&_L%%72=+BG~&p%5jx^utbCL84c5F z#M zr)ypECrg!YpQXxh#FoTsH#2+PG?Ud!`7EFkrWogFW`XW!RXZY4xPg)5M2-tir^$L= ze;eIdC6b$tmDT(Yxo_+4O zEZVKQsu=~J?d2lHrE&Xc|<^3CE3)e&XvA96WEIGX8iJV~RwCK{wnO^kvkuV< z$LMp!#dOPI!bBYIH${)g0E_@d{{Hb6q*Ml zJ=S)=WD}(v)V47py|TFWUFPu2%qT}iSYPNCCX}%Ac%83Q(7^qQVh|n>!P16<%QstX z+7&hXoGnl1wQC=_G)H1e#B!sJ&cgLxP1toHkK#V6!Q*dg*~7@bIc1LJX)Z%sjI_=j z#o0_dE3B$~@u=ElfM#*;K8WUy=n8FlF7_$|?c4z6)H1#bb0o2r3_z$)g(XRbVoOWd zQTvz3ZEc4uPI&CS$Xvf-5I73W`GAkPwc!N(BzK`I5ax3;Z1`D`m}~<>||rwH^PCE+S9I|9E6G;@XPl?`VPtI_n_;o_@)&i_q zu*HIE2rMQJo5lW2K+Q@7Sih z0_8-;4c~o;R?y8Phkj@bpE33E+I7_y%HP#!we@!-;+zc7K)!@Q}09?CS;d=FJL3q|77x{4rd?VLXS+O z^#q`#I8+{Oa8Ap=5Yiz0+v0icdCmJUxQEoglS7#(C1?WA593yiGO8> znPhb1Kz98NlM4&pYfO~P69(GUU(XjSm2ayf8zz!uJQ3++1~`iWY2Ile`6e0|*Rvfx z4eq^|par(3ki~w@eH(V$R=?Uev)|xr%u1T&=_chW90ve*bovm4Mj33ap_rQ`ST@WMN;P^tSR+e%$kJK!8oO>>NRfy)i zubm*BeDfj+8Uo4O=nbor9Hj(BK1j7Hbi46LzpgJZR#>i+48g8}#QcPnWJ-BfaNn{c zwch0c$Uc)%rpHX`w|DLw>A~#yU27CLUcLG8)HD5d$6NPyHLkXXnQudN&k15q(2{cw ztXT{GZY};28!lH}#RTACeMdlp^mh^>7wGO3_}OkHeu<UJi7RvTQO}NDNo@q7CL+D^Q2a(5j`6=uSL`>WszvzL2J`Nh&v(FZbCvKIL za%n{m6Yjndiplo4LUaZrki%fGGp%u&7kvcnCDe6`hq%X_43?P_Kc4ZJFRgP8J401&3(!9>ETud5Q-Z?MojG0$<}!Fd1ZQxGRbem%4$HN9 z1jCC*qc3?%nfX>02av85BezcLyf`Bib4ij$i&gad>E)LNt|oJUsON4UZ+Ss6oqTLl4G4bvzE>@SOjvszNhF#*xFFiT zi<0N0yJo9)Depty`7zY9B)7(eaO-ot-wpdkXQA+ZRCSwzN-OuMZ_E42Y@cyv1=`Qz zrGM3fqI8T12gR0y@EQum+B=bK!CrQYC(vWI4XKf_{Y^N}$}kIil|5^pqL$C{ml+;> z8&z0dqp4p#_X|1GUi>ueA4HNZ_N2sAo(ZI4(JR>Pu3ZfIZh?}h=owe{0j4dkIYQKr)6@MIEhRpu z1B-e5Tu|B&{ReG&zQ55%%n|M^e=7GIhFbIb7t=At@=r-or4vo`5S}fif%_41ElHpc z6uN#nZj8c}P5cyB>%$e74M$7?D5nJNsOLqsVeT*rJ~f_xD55TBdObR|2@vYvk_R5N5g8 zcaOq3M!urH*_R<{XBw4{t>5}X{A?IrQY;qO9b$*j?gcoRW;F9eOpJc{20(SuW=Rip zpp*9Jn3>UY9(EXF>kUr{YB{pCN6Sz5^ZI?kc{jRv;)=#iXl!p^=o}9uf`)9#jwN-d zT;Brnl*vo#uLcpM6hjoPg~vDdE)|Ra*+|tPTXWT@u)qjPrtWFr zjTc|(P(@_Xdl{djt&3|9j7kL3uhZ}WTa5VVT6!6*vQb)?lKvI!LXXxAWL=$3TP5y3 z3)_W<6p*F?+fF3B*-)?xcT}EvV@xlGCnU>QzgtVszWGW@=19-v(rI42l=xx-$8>uP z>X6SFBrQ4HqaqZ2oy3Iy7Abrh*92FmyVVDxW%XdQAmjcL33SwoDU zc4wOo#mUu;XlZ3YMkK2vAD1j1DuiMV`VB^Ey1k3!?RQ%uGF7oEO~Qy*vw{}mGr7Kr zF(y540R(iOHbNzeu-$_g_bPOpadIo=#Wus-`GrbK`pVyB9D5pFG(QnSBc+=>1fl_2 zVvj6A7;OAiveWQ`#Ic7?%QQS}K)vaLtyHpZ>H&I6We3sSha4vFJzx|h3_iJ3;li}k3jb@MQ z#GL~Eh3hQuB9&9tsfl*_^xNg64W8Ch%^f9~@wL~fPDOnrv<+en-Y+BYs6UQLm9F*? zreq0Xw^hODYL-@RFPNc;kEb(n+{`nOHN6B&wv7wtqr(3|p&5sv`XenhpP$b^v2qTG zyZhrz4EVE}h`s1g5w6BQbwWS?sKs?7?R1WrS^g-dDX-ISaIsWF+|^g_yAn=hSZkif zw1MyO+({*fWj&qmpHQedHyXQ0TQ-@lvhb!_MsFG323l>M4$8#An zS^6dMk^kigUMq!I$F6=WzQVtFKR~HR8%GxYC%#8WZ9p03!nV*kDD^b@q|T@7^tE)j z?GOVK$ml&$VQom}Jya5}3sk1-)oDWY+!0DxWlVU&msw8gYIrFXhn)BldKHpsg1h!~ zp$Aa@DtftSdeerm^jo;#vn(GW3Rwh?v@N+yyaDpx-fhlBN*TmhWQPkUT6E`yBy5(r0C z5@^eji8a2{^W2IXw^EHyzP?wwG#?!DydFR*YdT^Vo-QSRnvWYT{@B6oGuAU(#gjS_ zg;w#(>`{_$s9%c*gfikIHY;V!7kN?)blTD);Lkd&xy-oL(OGe9{bTlqpv=cGG7yZ1 zieHg(w&ekX+im!;P5?7H;@c@jWD6Wqs6y_ZlBcQO7q%_=nb=nNBf`<^ z*jAb9{+Z=P;l%b(BD>dd?2Jhjer;<84X1xh<96y_V|O;5cA#w>)5{_>EeENNJVg=N zi{BXT-OT&W{dqRq;eMJO+bWd$_rzwCNH&_tg{PSnzbQUNu-}fPAhmF4kh_fN6v0cn8+p&CRyF zgbPC-2{yq9Sd!X{Qpr@@4Ib@G;L&pX!{d`2LPR8c+V1F#y1)i}y!uupv%N)<4(9i~ z{ZZRwnHwCcbvV61$RPU+@=|`@hHuGZGlLkH3Zy@*-*R5=sPOKD@!k4T z|MZ_+SXj72^@m6HVQ_GD#gmhhJG;CDHXEEQa(%yGP`Y`V_HALmJvcb9_@i@ndWxN& zpKm&Ng@SDn-FAKLmXeavb$jc%1O{_koSQ}Q+mGIwStt1!!1Jdn5EB!3EidaYEiHBR z_DVCdu=Ik#28YMT_$Dn)OM`eFq}ak zuOI#VaZm_-hh0w$mvuaDr)5n7Q0V9*v9)eD&J&zx5;+B`3h9+vMi|cW~%9qLk!HA3#4*{x#;y;DLIg z8PSWo|Gg3h_FI4`MW8axUn~9BI8HEuVs_c$FU$W|B{DVa|6lN5l=^?ea2werNmy_L UX-FmXS15ptq=H1L7%1rf06$l3M*si- literal 0 HcmV?d00001 diff --git a/images/variables.png b/images/variables.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d20a531c6b0c2b021eeee639ed43eecd7b650e GIT binary patch literal 36339 zcmeFYga3JeSkx|F1-5)2Fi1e%UVMuh&=_0YY6fkCq{ z7ZFjA5)q+PaIiHow=#x-kqk>xMN<1bh@Y()9~(OX_e~Pe`nFXX@J$RW7K8H>jwC$` z2m#MiUD@uKIvh_MPtl3dZvhLnUab1IHz2%*=`fG}z3nHsUndOfeCu4UFP?iNzC&3} zw-_+#ty*C;6ti%-LR$2)p=icMg{EMsaTr)aSlL`mGp%e$S9nYetODX=`|x81jN;XN zCZ5(S>1$N(uEa@8rqe1gqdi>ydI&}!PuF+L#r-JWyXQeJwUL>k{{R=DGyyO z&DG0;Qx&p8I;O?ycJs5HbIs)O-5w|2+IMgasbZ~!RYV02(%i3${SKV!6L;E5b5Alxau!)^tAW}=%Lz1?qQSfGq8IN455&pbetBL`Rg~2^m zf>I`eXe5{!8C7*Jx)m!l0r-W#HNI;CVOJ}YdN4+HaT`D2Niuj1&OlyWG0%c2TM3z< zIG$oW8Mlw_-F8oeW7FI1r1OnoAvC=}a0i0JLQRKgEUIXQ_OR~>M!YZjFCEVfXlM~tf9LWv+mU!ZI{iNW)%z+YdEwI$%v?ZL&zPY^wMR#foF4iD?NKTmX2p+U z_%h20%`PE+=%Qa?`Uc9YC`zSSMp+jBG2K=BrYHT)V7r=5x=31#r|T04)rSlL5}mrg z)#K#q?206GUZL35w#I_kMuoiH#kJZJ1%p6-bb2ayAxp4|+~LpK_-yMvy*TDq8I}N( zS++A+C?-wzqY-OE^AqrdT|^J%gFo3wKbcz~3>I8hrz93qybv!TWN2lRJn9LUW@PAFqy<#re^ z0KE$Dzel9!a{jiPAu#?nX@=t@pQ=6F|dXWoLXd#Re~=&fAO0XNV!gn=7HzR&%R#tYO& zsQdM_=g-;n9mf;)T9hyC1acpOM1Y{bh~(QHED%r{c{k`dNF<2Oj@cP&4HzbhIGOw# z{?>q(C51bxF}2aZF=av2>g`9Wn^;L2k@&aoVsRz5;!&h%3+f713xEY>1sF<|>A%v` z(wjAcG(ytVtbb@UEiu(?Td2-vmtDuz4a^z&I*_KxXG`lyuZi2x=z?5hAL*BHHKi$O z!{TMqL`rjKl*SZJKChLQm1&kdmd24%Jge_Z)O@;;tfg%7p4+Iw zsKY3HdJ0E#?SKZSh85$FIY@u^=N_{?kvVC;kK=0%>A>TNkikC0Xn26nIpU@Bx3lTlhZ3w+sjfg`?_K29c z%DKGsf=GA>qd3#8YA1h3D$avf^elx5=dlaeiN@%>Mr33HkU1fMNOy_0|Rh?9#mhBYO_mc^Fi z^k-F_WPPe-_57AUZST}P>#{?V@lWH1q_kQ3vI7+k71xTvxwg4ae>mnC=P0bKtd*?s z7iN}QsyM247x0(o7Sz;#KC=auFqKB@>G# zAzjWymh+J_D1Kk8Ii_ry>=@@5b@`ScL?&`rE5##azPlpC6ixSIi}9VRD)YS8y!DUU z6{i*PU!%^JPM&{GHpUz)o!U=?FGJ5#cPBT_`=%#9Z!}F_))TB+CeFiEnp85ceOyyI z)i{--V90^wTz_ova`xW#CV0%ge0vxCFnYmvcssei+& zS42F9I|pVKP6k)Me)qFruuP@)DgG{r%U6m1MPW(C5M2=iZ=cziWRJOJy-n9kK_p8` zCiu(Y>L)@&&;fuk?5YP4){L`G7Yt&Q{gq;s@;RppATlxXm`K2|tG}Flnq|(?YH%TA+p1rd$knH1^6u%pA7m!CA;%pnH2@i1 zNxDxX>95$jF|x0jGj+aPXyIs4eZqQq?^8^vQ1$7IpAYOQb`z1=k(tDk)upH3R3+1c zUjb|#j2c=^e57J#vX#*B^|5$agR2V|3FtN;v(LV}5}gkF462tRrKOF(k$Oo`kv~ip zmuVQrTI5z2`Ns5A+D_Au@Ji#WjH|4yKEuajeBu9Y>2uF#CRyjyUuK7wTcKOJMVr%Z z)9J+-@;PkJlW231jBIgf>TDUN>SO7GWri+0M_G>aju(4Rob%2n;Z44yGFkK7>qaj} z_wqjBPo+ho`Jx&QmcktYvZ&|5dBGJC{P-2xS9OWH9^Xdl%3F>u4c4|$1)HC>&K+Ol zk7z4oT2pMa#I-;=E{^VJ7g-Fos<@SIH4ZaFzrKuoDJ*-@5YWHAcNo8rwWPP)v0P#> zcuzd1QK4ObbIH5;izMk=lIJ{0rEcv@H{wf38HotzoDJ)ua{a-y$>iR$CUwKimqq0y zTUr~&r3Wj`q55Q9FW=HNo7z^Z#}u+HvSU7=OZJbO(jRNaEtcl!8gDBPRs>vblLYiV zi7m1$8;*>R7?+W525(!RI4uapl}PD#ceB4s-P1kIudo^t}r>4StANBlyGQuFZRuF>m`-qgC?{)1#J6*6ioR))e% zfZo^asp`=6as9U5vw^}B_vZK1c2ECp_E~m|$9vC*Cc_uDrJoo3CgWwgjqTh^M3e5j zyQwK;l{A$PzocI#UJRcto9B^U(e5vmTs2(#Ne(hz8Y0$-+Lq5#_H{=E&IK^n30h7c z6_zX)nlJND`;+BMbFyz`Umy=!=e;j7+w;FGZy!+~9%;4Sxo)V!1fq|QA#NOFz?dDt zOl&qqv5LFnlVXXw`;ZB32;+Y7b8mIP;Qab>R}bbMT}`b5cfgx7v1MFn$xMriRq z&e*e&p{eAIM)ddbsjn#<4B%zlEAHm@*82D9YYjT0Cz4;0)DT&QXlzh5jg{B83uF?@Uo3=;Gg4m7ys!u?xq1V}FY zzolW~p=B__pGBmkpz&uz2V-L!M>AWe0s!1!N&t3}>W(ll__TimtdtVX8MOa-b7eIr zHCYI+p{+HOzLBkgF_W9M-QRv-_}zG+No!*#eM&cLD;q~%Hv#H@YVbnSf3umXDgUYB zWGO(cCaXXxV(VZ`$;kv}0#koPp`@hbcQ7*HRT35d*XGb)0@P+sPIkP^%&xAkOs;H9 zwhpGuEId3s%wSe#R#rx64MsW@PBUlpNjr_(=U$34kEVJ&@r7p{>Og(Yvcc1 z_^%E5ng34xKP|<-tn)v)(1rep!q5EgoAwcf!%iP+6vL33i^?lQVq!wJU3no^6hcTXgN?}~u(9lqIMIPW@=H;sUe%h<) z*u9*5Z>Es4P|pV*$uS;5hv?TAkJ7^W^^ud2laD&N;S{ze9v;6u+l~*;oWD5x^Ew}r zQsRjTVJjfu!v0T@KRw)=L~xkFH@a{?>Re=cxc?ziLr4TqhW{^xe_I6l;eaqGJxc%Q z=6`G8fHaW)X9E6GWrwBE)dMTajQ2m1_)lh+=%4?UK6*F|IO$YwKZMo~YK@d}i?Qyn zZO_6KlWzaag|r$O_nl(u&B>Ak(hWs+))6W$y-;vCZb57F?XKlW9rI9IPJ>5Fwbr`bx-RKm@OQ3C zA=&2nn)7~d_OJC7>qK|zTn172c%{Po7Lyy*6k|oJdC9lg$`ZHsVbNH*59ieCEebvh3TBw6(srAKaDNOx{^|S_GOABi)eYT9dd; zCf6;GzLM3NtckC8die*u`F+Qr@fo&zxF^B8`F48TRyHC`DG#D}$XcZiNnP(fqDWEP z+Zvs@?!xC}PPFVQc6`qJTnE}MRj*vSd5M>@H0w{J#mb^QT9!h+K?INFWqFw` z&)cZ1?Ycy%m6hduGR1nmad@tEcbe6F`nxsD?dMh@pMm)#Z_k?yA9p%y9qYs9`;WKW z&u$f*NyzQ(xK}K9(dSv^nzd;vqZ-V%raa7Fsu4K2ytVF^3avFU0&Fi2k87=#c$YDa z+=UQuN9hgv8SyNV@|2ROuQA8-b+aD-IB4#RIY}3y#~;)lsOG$%d1oCsH^R0Z7pLB@ zaX^eT==JlGKj{T?SGqpxrp#04l=pa9tX^(YhxagBm0Z6o;L2APBB)fT&y#WV@#hBD zP2ghC=@4Em5{E1wO4`+~*W>fXN-v(_0i&hM1U_5eQk4~|wMN=n{l@Qh_TsLPyO47B z^^+$-l_kgf;=lt5wjt5JoiwvQqi&gRj$wT=C@+RJr%T-qsAo=QLMDIz6lacl=_3tw zX}R>1^bD_hW8&3lAYRm}UGvHQkUbY55k>CLvIL0~Bal^-ZLU8FTiZ@((Yn1OyDCB6 zQAMap0(T-Hp%WS9rNvgH5}7Lm__=pQ9Rq-`WErm0x8w3C7ooPKPFS+hF|o{{L2?-A z$%$k89CbicjBY>sR`VxyFrd$fBKYITZMIxHPZJ{9|ETlvR*~JW(5#2OD;{mfM9k3@Yrw9eQZH}$xp7EsUk8;3QCa4L-0clNo8@8$L$Uh8Dov)2bRbCM@B zb5cy3MxCjK(dqpDWCN|3ce(uh)CE6W)8>GGi#)l(Q5!@OJq5rdDHUtuSvX32lOSBU zU$2y}*GG=;m(BzR1fwk6D81lk{@{N(UmN)lsOT;@!h`(aQp`miE29HvfY^=%s{D~# zQI}49g1+xjLG|)HphWlm)cCu#HLExFK>mrU*aHGqW{KsGTHaFf**|Kth{K#j&*aDp z(7^#adcWA2&Pfam@Z~26a;-Iajjh?!m**vHLxHt%hKS=gG<3r%%u@ZtaPyT+e*CYO zB(~I~&aGwYlyH;3>3&Ku|Lg&*%NL?=vFD08Uub{rL+LPHFx-w*8G(&9h+*O!j0`lu z8QF_aeh|cET;$}HT-{df-|D$Ih_kPVVD69WcXO8SleyuSe4XD7Fi~z2UNpm}BxsQg zbt&d3(5QGT8hF%?vx&lg7NwV&h!MArymV&!O2&5s*SWZzF0#EEWm0|{p+*mTkDUl6 zdbtwiE8?H~;8k7DX}D=`0{Kv=Q*1HwU4GRJs}GrwL1-ex4_TImO@e5}H-^^t!eLeB zs?9?ed*BbU5rh8JB`@1IM%~P+F0QS#F#qcBOO0NM-+GPE5^9utjt4l?XBTu|93>gL z$?PbZQ^1`lM!meoRxDsM9c~*uJa&Xn@ITYFJIh6dRmN8(w?C#^kDp7(X`G{}^h&GH z>#HQosA+NM%@?2@?#O!1P($D-cSrn^E|EIBmSFTMRsmTw5UlZt*sucWkRAD2QNzN0a2O!=#t1n?oIpq51z8pKaDxfU@;v?Y| z8cblwL6&Y~NrGt4FNA<0VEPtg_f z(U9N8Xxdn8u<-{M1^Df>p?Io#7xq)u61@n9LIM6^DQ7}x$H2CIxINwK_~7HAn#|ww zcUCsZNt;#9;|#Al^9>Pmd@D!?57Q*R9%6Mn)Id-w<(8{3iQ-7PlRj4Vuw$FEvlJ@sMovZ43*3L&CFfKZ-Df$A#tp~%r8qORC5 z@!I@+oy8@fr2miG2nCJb$ed!u^02EV;Nfg zfZM0OSav1PY1*PEWZ;JxeSbK^h%WJNqT?znHsQAX=<1!>U;VrD`P8vF*aMtUZs}9w z3GuV;qhTuPzFQSuN4j;!Rf$4tlQPaq>A7DP)I+R)2Gh)Zzw5r-<78=ro{!Od># zzOV@_HR*xpp1;p2%6>h~&cv!ykLEHD9#r(~-f%<$+8UGHf10g1eur)+?L$m?Q*{3p zkl+Rsj~8x&Z$HQDs zgF8EH59d+u;;eXvPEp@C=z#RiFejLVo_uu6sjJ^JjvQ27Aix2Z=ykf_t4C-v4sKsZ zBg3erGP6uB1X!b!HCdhI+t}F2!Lb2eried&q``L45>cu?+F`<7Uw`k@!q~zwI-rDf z&A``IQc~I>=szY*UI;h;L4gE=C$HH&9k%Iy?ctf%%H&5TCqYzkxGC#|ZDjPjXvocJ zw~IZptuz__$fmZ@lLY~MMCMMmZ&TK3yFvs7IwA1}quM++sri}QjmM;t4V*>HK}`e* zMmH3v5)c|=T}*UAb8?u3krUN=Dv)OG>bpVaG`d=*!hURg`D%Fa`!UL~o7m2C! z2VQNH3Ib+(8#h^`)!9@4mgG3YZ%(zsWMfuFQo@lbdcXWWF3AAJ4H8DUL)YKZ#RxwN zHbm+#nWmGi<$?`bjU;BSrS4$IhfA7eXfpm<`Gwv#=Vc)rTuiv~t<5gByutBM)+i z%N+WIgAG!8vtW5W268wX-=u`Z;<4)z!jmfu0jN|sHVLT7x-{N81ibx1w)l!bir=M$ z47YEn;OZilJSh*~=^av;1RiwnLTFRYJ%{uE-txyT?U{aqkLae6=mQTi>Rqy4Kc)lv zOV}PsR}e=uP1s;NPc%Q)Px2D{7(HS07AMjPIRFss8dsUo6bE@9ac8l_fotfh1L$wt|5dW zT!0^D)%^58C)X`dw1g;?hh<2TYHUYDTN>y^`&V0AsoC#w)&W7bW?Pl3(WYOex)8kI zco7J%1XmdWfFRsh(BnY2drj9mGQRMHN!LhDn7YnDcPi$y+%Eu-hYm(6@E-Z8P{=c> zovKBZuuGJQzR~1Kcu9bnbhm-5e)UpXz8mT@p=5wt{FDlwj*>!G-cXaFvb?FLa!^2u zxuDdXqN-u(lxC4H@9T#DF3$C2a8SaKf&8Aei=&9m zCqh*VIOxrmW2 zNO1kd3&LN&IIrT-F`;7iG``q#Q|w9;L9n&rL$-q}JRO1o#7=IyE|9PMV6Y>{1&u!3 zIlndx&;Uy@JIw zh?uSSmb5DfFv57o=mv1nw6DWx*$M`rF3*9M2?pC{{f|^Ah?~Z#eRUirDvC;W#ze>^xDUUYJRM}rhu#B+*_v}kKf14c z+WgGsaMn%S z=J`nV76fmmzIBHW7mv+s$Da_`*W)Pm0BS8F8SqnC967rUpfHxZ4_&^Jaa+OG_ZyW_ z-h2A?UmpC1Bb>)kWzat(T)c%dr-O977$_iZ4hku3MDsRRXQk$|1W1=3MFtdY;>o)h z5z-s(lOJuso5s$jt5os9Kv;Z;T?mstGDA->)l;S{wR|PF!_;BJ1&FVZLid&JaAejy z26`H}$lRkC@mV^Y#dxc_5dvHhHExO*v3JYvZLSI`-E&9D>aHvUM61hitR!}avMEY& zp*ID7>ahQr8@$eq{?^A+=d285VC6-VzE4mX$#|;^Syj_*piVb4Y$#-5z4=-R$HZqn zjvciF1ACzY9v?4vrk|J_K z5a35ELZiQz{a_eWeb%`j1UHaZ6;bvJr&Z;}xCRIAJH=XMaz;;SeR?R4x8LcRi|S6W zC0Z9q0Xp95)XeKIYgGF5jV?3DL2r~PRiXhF^S*;*hLO5VZnyh5vx&m=#Z3l-Da8J8 z@aMpR)48nLPoJ@A1ds)gLFy!MprtsTOQg!GC zKZTnVy7!_crr_NNsH>$+NP7-;cFyg9ps=+sFKamKU}t7Ua^aJ&2T&asK`umRs{$aBF3*M)$9hKyRv;oHJBoL*CNPxScFi9phgg&L~+ z$?fBSh;}0u#lBos{%#jqI9o^@-jhhZ+YMu3UV&>g%Cx$D%HBO&QMzs9_fST-;QPxd zJ3G^4iGA>&<#?w$rH5OLBtpay#}KP!8IL#@=Wv#LlG&F1-LXL{^d3B(+g@%Qni$^$ zu|QMZT*^-^^_ODgUlYK>J~i-t9BZiUbiBn*0C_kfwsISTBsL3GPdhGLCxwZivrAk5 zi-CuPRS=Kxnl2!LlD@ZZQ;PWzUPZ`V3Efk_MZ;jn!&|`*`47A7qjf!6;6wTFZhR z1bsL*u~<;5(J#1`6o`f;$AeuqMqD~EB(>>a$p2D4By-J*bgE_tS3lsXyS7ft6zZsh zN*aZ^BokE*$!~daS*AOue@sz~DUk0a^dx>e*D2+V>tPpX5PUP3@ z!CK+?oz5}7mUzZGxdJx#zv3kKH{Z^NlnxbCM{afMAS!xw1SA|6*&1%4`?%{3y^%@= zce;8Ed23q{TRB)T$3JziBU?IGOQCrsb@mgwG-lYe%^y)igv4tWKlZf~lAPrsrZ9fc z52!adsbmR%Y zF;fQ)ogBQX1E* zxXSmm49phj134hs3a5pVT?o_{F^42OT(rQr3948HPj;A#Oph2G50*W;p5d zeof5T6#oT-YAUD3oIt91C8y5;e=j==VM3Lp7Y~H|`7k>&VZ?pmWjq2Lr_oY=O}{L& zNI^FR?&Py;m8Fc@*BLle~Z#1t0i5Ldns&*qBlPn>6sbWRG zR*i!3T^g;RbA@~(h~{XPO>ZOCtWGIcTVZ;snyY6=6O5s1*)9X5!cGJO7yt(zH1R+t?^qe$~5 zXw_8)%H=!Q2?It!vIS@5DN-V==0m2^X=C~Q9N3o?6uMc`zXz%fV4UY%`kKf=>c2Ot z-k7@o+{Rh17-GNUAMp##*~~9Th0dfhNmP#EaJUa*c20hfoD1Ja>CD_<#V|tH*>_v8 z{1%8)o@_9yY@wsaVX{|JNGjlwsG*TBD-aLla`{0#so`(>ECMtqKl01sjdtFby?(qJ-OXrtE- z0@!w=TBCD+H1f}(L3^2|b=abu?lF3UK!W_X7TcjK-0gxSpp=XqGEv-t1RJq(9?&hF zk!ACXV&y=bmuml!+k`M7TL&pC1|I1s6-mFH)r?t-f_bHHAr$G=4I2cNJP;f>;6V@J zI{qObdTK@CuQe;#CL)&wb*`*j1e@m@ucC?!NqTk92sD)IS9ag{>I4BE+JLsldUbRQ z1+?m22+OWHPM$_@gGKksh1Z}8F9@;&LUs6BP8lTCa!!`g3+1=Am>uqaZXGvk1~l|c z^7;BG3*8~IrVEW#!x5-2o)myw5C!(%q~J9dEH?M?>$5z2&ISOP_*lv5_0BN9 zm~neRuQ_;p!LFcLyjB&TCQ^RIWCmYhPz4M8bMdH=8DLNF5xgGV<}S**ZP1OgF?d7xu$_ zqI*enVUGm#0ZZ^xob?TMzlF}m4ixP>kZ$xtM4J3)KA9O7SI7SBVDR(2r_7 z4R|z3|K>e6rlu}NPRRXhyT;KJyKik8tQ;1I$mtfo`?~T?8V9bVtY3R>sD4yZ#)7BO z{A;URe~)l{^g;;XGwKpB^p6^`#z(?-p(^d)ck(qBM1x6Q=2LIU8XnUE2U$W1^l|FZ z<9EfC_uflZ_?+sv5gHER|4?;-SuWw~*u47Gz)|>~@8U$s{n~!tfj@3M(3a z6~+$P;av9F$(Lo{pg1WuZVtYwv6_vaD+aWQA;*xVo^9?FzB7T^8_2%3feTT{#MzVq zlv?%RAV7AY33DGDmU*~u zuE0EBCenV!Egi-^7%WxK9KVG9gP42!Z5`RJoD5V3W(O7lK<}|!^9yi(1 zQpz9OAD^_PyLuRGTyUTYE>+|(s2|xOg_Ic`$gkQYtX`%V<;d+@XTrC~Pq!qHC@cmA z3*fws#qUBuw_fL?E|6FdPFVT5YFia|$FbEf>6}Z66c5H0Hl-Fjv7Ait)&PyjC|d+PnvA4qb)lfRFefs)7$wtpr)_jxaN=!W%wfX2}!@7 zQY8}20TpqZJ6Hj*R9*^=a5b<6MeHdeq~u3#-ky}dh4wnNu)g1{6R}~MWw=RA{GuDB zuKGmV0NioXuL(%9LPiGOoMHz-?<)K$_IF%3panQWO<0iylQkWhd!)v5IZTJ^oP-31 z3mxEA%coSDWdf<6s`IBvhBV89+7yAKd*Dgrgvm zWzGG~#(oVVZqv9086~-!OC{}`oNmQv;Q$=a`4Xko8_h+lLX5O)5fwJE@}TZSye^Zm z8njXzkXgbaHrIupNyYr!bz_QLT*5hck5zctERlomP^X5FcKY=m8$>U%Z8#br79-i( zxrKKtrVl+wKNOXwL5r?CK1N5_kM3 z2@I)%u}ob6u!$Fmbf?~>+&jQ7l(a|U6UH+-8zt|R@(x4}cdOJ2q$DP0VU?bgk=gdk zIc8n3;U2u{P%TJl2CPOAfYdMe!u5B@c_(g=64R^kxD<}QLoZK8=_=fNgV_U>5j{y3 zKf!MTrBYK6Dm-h*E;7`H!rIwMBt=s@Y)FA0%d*l%5;jHOx#AUo|MPGe>MXbOjHO^r-xcFGbK|6U(1$DoAZLklf~ zuIW4rGZ1tR-8?tw=IQg;T6ONEeQWG z$O;9jH+722)q3jtVn$UWla?YEKvFyWC&T(2`4Mr>>v^x>)Z$^Fk6*Ij;Q@@ez$7Ci z6#hG*`>H&6Mnt!^zW1nz)L1E3aY2CkkD7+{OuZX5k@hAiNgDW-Wc+rRS;Qa;EUWwh zzVwcJ+Imos9uj6Mt5h7uk(Mqpt4`i!uFG}URG6!-oDmi#!@VbljrNDjl(AOsR;Yt? z(c|kMgTe>}O*WR0-29Lt6jYVVP2WEGMDY1M7&Z<3%H?YsyT6$BUcstHw-;_yu7ey(oAE)zoD)9{<$}#w{ z)81ENj0t*K(c3~Far@fKrs6GWjG?I^^&$-LZyetTxyUR7TQR zv{-OZm?{ZE|BPCJ|6S?RHu;lcu5YlOrBmXoBsC=7Jl{X5+;c)jvjObl70msC@bV)0 z(joJpSbbCVmb(?)pW4=S)!9y{>!q`GgtFh)CJD5*Du-jaY`x2HVJ|HE z^>@rrUxyAcA92SbWrUXYy{(o0KwOD;58Xf8qQsBsQ7mJ0^|hOyHW;+#rdupjNY2WiG zQWo1zkkVnAd51imu)dZiw-7Lc2VrGdOxy})b}`#}iZ>6GPJCy=(HJYw|0-Bx8$2Wk z!I>6I^{eIC%Nr=b*$tIY+xGcI6B#14z?nV_b$>$j3KpV}K4O~LU;8OvbsImJroLcW zJM(uT^zhYs8f!B4D}>qgx{*gi(%fztd?)N)#HWN)X@-C=K41)4s7}T#Sc@*$$`h4) z-cRlO8RL>~&uI0MAt8hT?w-g$5dc)#cBX3%6G~{-Z9J?D%SQLq<&Ae5e3O>Ea`D*( zixla|eg87Um?+jTSbt<=QN3OmiMa_Ivpao=U1d~1Zx~O(A;{nE1#o%n#=6G zN+-{bf!p4yl-z>z1c=3fZ{=I2Sj=M&E}D)M7Skx!6C~7ci@aL>lI3(5Y?mDml(86M zkM7CfL1rol*siF{l;bqv+j5Q1E)wzAY?D11blw9QWEvMjXwkvd@jJ9?y@q(kUX}}Q z;5C7c+Gif(A@-{Ya>RuRTtq43yB!(6+acPPse@|P(KrHmkcqs%psKpSJ}w#;x%zXX zwMiszIiptDdUBz6KjNx`D;K{TjLiLHm9aYJHSEFJPN1K267G}QBQ0~wLSzs7&gV!> z2?z4#8CQ*nYuAK=E2js41Pe7#KEv8Y_$v^o94aH*P%ovz-Ln1KY+H%C{&=viwW;xx}5MIEI(66H>Bu zocg8IN4;!tTWm>~!FjKQmSvo78u6ILnP?q^Z{9+x@9565Dc0JDouGE-X7F{XG%_%@ zO=d${5G~W!g*5QScYx1|WOO&lIi~w5dWu2;3a!%psIyr!iah-)3{P;4%Q|Gnm3wOU z=B04MG(7l`MXR|nPa6gh$a4Hpm|?!zIIE5i!;@tc{S+l>4X$)@%dj?UF?brI=J>-s za*CXXq(K3NAV_LP4}&;b3l#1QE~ay&XZrJhZI1OA`eJ-AaiRW4`~NAiYpbu8@zI5Fp{{VffJV-Tzi)3YlI%p55so z_kSDZ{}J-vVbT9rDt`s$0yRBuMl0W5_ zka;0Z$q08{7@BhKNSdjdKCd-iC4RU#U&hpII~XgGx(=Ty)o08&>Ir5r+qU=E1Y>Wq$+VO#{770a)A7!1TQtIVrC> z=csxbk?fXaDbggt9Pr;y%D*u?a`0br_xi639Vy&`Lq57Q%RYJ7m2~aQ4REB_e`C;j z8Nxq(oTn((MQYE~jIbDXDoX2<^y5?;vqd$er4D#bP`TT)jxwYTB- z|If5;utD;x62Px*6yL#391c2fAxu6N;91Lg4ysHxpQrSX?i&w5=iE?(FH&@kdylrO z!1L0>$+EpCNJ@=b29VIAs9Kl!U!_L4kc}v%b&%9{zNca_8xtrNmB^T3;^cVQtb2&I z)}s@W{?e_G&Sk<*#$6@IWe{5hagPEYO!!iA2!Qh5`KMUU6w=|*D|Bqdtos`uhK?WE zcF%`JOQ+I&qIX>#mkE-}3O7E8lpD>5ap44gE(|BAn-?6{fOy^<|J+BNx5}jgno4Zb z@+x-GV1I(b_5M5T{|QSHRo`I|HAk@mpX}+PYI8huK8dqZn}|!!rZsII8A#CIj*%l1 zj6zUNGiUg$`Ktk5mq8zg@Vgc^3skLQ(gQ~YgyHT4>unE>b}uStfm`YK3ME*wFMDqvp7ZBRA88vD%5;h++gd%%x?*q5RtQeraI=ud)M7sF zJA7Yk5%^M~m{M<}W=J~vA|?2I%CnT-1lmihr^}M9(1%0`qg$T$WjcyUk8nOnO!I%(%u6C_iOJ7;(71E0(IMf(`LU__ zZM5~I=}H3J82S^y!dCuHGs5g8jRvt^VuOD>0 ziVRl#+Q32-5ut%Mq|jjET&jL8tz7Md$f({BR>Z6+a`s&F+5wBrc7yxTK$;jmj;Qb3 z$&MHUfS9JA?K=Hr-D~f+hgwRmX;Bk&@Zv5_h4M$9FIP0al2ImLf zov>!}sVYoHR!V%8ku?0Qi5$04Z<9|xNpu#L_#=7m(bIcZ9*@3dm@SorPJd~eJPevX zh-}U&2na@XRJdyNJ=J+Q+ROla9OzPuzA;J~V{pn8feBB*aJ4f2Olb|_P+!c(1BZ=B0 zaGaZ#jF^M`fd&+Y@u=ZEWqUIN`n zlV;0#Cf>^tw)}aIy#M1cyAwbSj)eB8R0$}kv*>yle+rf0mS&As0tdvz9}k9YiZic; zyWf4HtHJu9j}G(R21V z7^d_0bIhjgvLd7};O<_VoT500-YH}8zQsBo!)D<=pP)E2)FN&WhrnuI52Kaq!XdrQ%&_IB>2jo*TAzf-Ii+k_--fHWlYL z<}$P|ca9%+;&{j6T?g0_xwXg6^LH=@?yvCa6PX5Rc3*u@Z+kgcZb_zf)o;9!W8Ci7 zmwU(wx49J=EAeeJVNNHsM)hHl)NDAU6u~MLuf$z7=*$cvr;4 zfK9v2`w-BqU1`J8Y+|NLWUb~;c zVY~$7R_@1S`#R7ho$GluHMtyPuv>y?AlNr@XK6{p47rjaHl{H1EV(CYRW>)Cvh5oW zfh*Y{Et&H0$E($%X(qV$ESzdg}Lc<96Qj5fdc=Id+?fJIE5Fd1?O>0ica z74Z3B%MIVr=*wImtyoKmuxUoUFOC7c6zkk;Mamf-|6A*pf8g8lJlylWc)8| z5Zm*eMHT6{8_&?QoC2+-J?Qp+2>{y=WG**9S!hhtaGns?9skvV#~kIdc@>`p@4@RWc+2`q^QnH*ccnlwW)Bn!bs>8k zz(NCv+J>dMc_WAVSt}P$bc&_wH0u(ikW{XH@{dkSUc%~U22+c>7xPnjv-D!|KV|w1 z@&v0?*}sm*TuE z#_5EU*wpim@gp6Hp51fL%ETmTQ9;4!{^`w69+sKF)|)XimY*s;_Hn{{LosDurc%m` z!5A6W)@(D~NsW|{BlqJ*YSQLnk-+@9eqJ6dAqC8`V8Ft$74()w@9e?ZYxH^ovvY$= z433tHXmRXWb#J<=G!$IKkkB^FBp-}PE9h&DqswfnDTNb81_$v%zV-J^sr0jk;pngE zvcH3GWqgl6Gn{*Smw$S3nXUS2>!}i~E`=^=0|()Q5knD!gFwI7wfqC+6Ce{uFzU&t z>k>9RwGtQbmlP+yqL=eNpD9bbrTSdy>ko`eY61}g$*`~QTu%H%)w$^!eZv}0UQ4*x zG*v!daaA8+oRYpojKWP~#qPb!ZTvi`)9Yo8r;A(1sOM7>mi9bw%7O)><$`ojBl55oJ)a=j?}1Xd@eX0MSP7NAF5CnYFmtHKq%JlmK3M$y-=FImHRN|3O>^1`zTfIs{`Q}+Eq zxHiejD-8k1faF32EF3XvX-Li0-Qf*G}#G z>3)4fWX?IMGdFV_?Ms(xP{jOPdK+Q9#6eA(v*V5 zk@nf>Al3(CavF`+ISy-&Awm&8_lM(#N*X80%%7_iOrk#UPGzoJNh=0Szk7cZK=8PZ zu#dP$kb)!do|&*eM6im;WD}x)nL9_e!q)9W0i*s3e~;DSC&tA~dK!f!9{+Ru?O+IB zRqCyx@|v*OOQSb>Xver0sejB}>98A?(Bs1K^luL?nC*98t!HInV^E~(S+{-Pm^&w? zYS#7>E2BEfw1O%NA(Z4x|LPE-PR3;_k~tf|7O9)0&t?KdxNSP*V79C8W)K_))sU*! z+|LC|p0nZfw~i+ReoJPW?1rx$M9qa0v1n3wycy#Lo$*8J1L$HCcsa)Xh;4X#-^v_OoT z$CK0+wM09(^3l@y)p@zJPn>H6yemV$S`s`?uY{#UR&BjJS~VjnPx(Id-A{V2TFFoH z*2D+Ym0&xe{i@Y%p6XARphDqH0&i|VeCC2}YHhN1ul+^t4+lBz?mG}jdnN}02eNoP z7g&sU-)~xG0w$4hG~SyW$m-nwA**}ydo_z+N=t=;>c*SA+{PNq3`JOoMCwz-UQOr? zfj6-#n;#<4E|Fwz*vp)>uLujC2o z+^Q}3ST94_o;;2gcugiRRCS0v=klV+#sTOgbN_1LaM@$tmIbUbMo{yzJ{{7x|oo%z#Yf{N4Pi16|LQlk`PAr+0G*Su+=7*o`%@%cNAhlm( zFa8LVfV%wIQsKd*xAew-eUYq!>9JkKPlJbVk$ zZUwCg_@8&sGJ4_i^du5lYF2+w{Wv?cT)0$7jOccR4u0DHHnMvzV!bKysz!E+A1D>U z^Sc%RKJt4#pI48M_x{S2d}gb?K8&ZCeqx;@WcdMN&HbA@2_g4t79xyGw$osE6g}EtE)Z{Gz~kj@~Pg z>hMc*F|ZTvd_j)Dv-c!G6Id`#zjBbM+!&=7UOBvf= z4zjk1@7Eyk6?~cS3hQA((YzGhqnAB$Go}{lz210^98JUZ#W(crRfSNmOjH9Sh8?9! zZo8?991B&z{@W3N7}8g%(+bOuiJt%d52OSTy4$}o^zHpM>iMgKfKQKsgo@NzOqZ>X zaz4J}6;o#N%}$X^#w;b;(j$p9wuA-o8^3M`bRK-nSi&tx8}zT z$e^J6F&_5QxWL#6aM)O(>!-{aU=SO5eT4qGJxJ9pM<xgF3egae5UCZSE*oy z$qkVPBl^8MDYadQ5mE;OR{Ms2C9qIOiIL{oy*ped=}a3RvHRF%A#XiXgK<6JK8$71 z0{F4{R6we}ItQ%HITEbcww0uf-~{ znPtTaeo{*LVm}xtstHaOYXXZHg!AO)MrWbVYllt@SYCB91|OHtD;7#}yM8k-8R*1C z?LEoP%$F^9%kf%vY^V{4P*p9ncDG#UIIJE%$=jHJv-ZQz}n`zA`L`<4UgsI$# zp}L#TS83shE@ZV5O863&{GKk%q72>=HR7E-ajyD$tRJo;flb4F%ZjUFrUN^8$P4t= zHN3@>W9?T=$HotUN*uNIs&7l&?zKtousuv(5q7iM)F={q)2`eTksfA1$2d&4UmJcP zYKVVv3yjf>i{ClrV%M?rt%Ob|3fH$6CGkGOK!gK{WCp+ua_BC-w(?K|1hwT@jcR(XVpuCC zVbgY+-dlKJ{bh0so;56F;S~yKb{MNgTyuA_9JJ)IXRBB@N_d88h{7aV4Q0RDd}7+4?%}9N;c+8BT&$p|#bA($dt)dF*~2Jt9oUo7I8^TVSc7{O z0>PzwGZY2jZ?v-~`@TJDby82)b{R2`^|~5wLg|{rMJXy)tBkIF79o$48(;0H0^H?GT8q&Skw?iIJHBo zzu$g3H^RQ#Xl6RyZ<~`hky89UZoHF)UueL2J>720eacI+Zb{f0PDz^R8h`koiZ=vO zu-Pf}-u4p^tD85WZjZJG*bv9-?@TcokiYJTKm_%L-f!YTBfxQg+Q{}PG0T5q@PAKZ z1U)VtpRGwG_5V@&2S*qX0CApPGJ*dG=KMS1==Jz50N#6|(?tFcsQx!D*q{e$?`)hP zr_WLS89@JCu!rwR0JzTLb&^TYAARjV<$eePQDxgn0=-@gY5x&s{*(FG;s3r)%Zi}H z|7s2Yey{A`e?9|My`G<)tK;HcykKVgjie4!U>p=h-uKW6ioyCpBj8cjY1lXigT0Z} z$)zcjO$x?=l$u< zR;}sCoL3piKrGFIy^r?`*suSznLtNKK{zdtO)G$LS(APBv6_%W1&nmzK8*^rqXJN{{`4~XFz2iBHJ~zC-E|p_%6nQA{ z-g-14UH1@+iSGsUe{aigUp69uZmFhnVppWIzWxx{J-O?$-coegr$Qx{&3Va;LqEP( zSxc9k>-wmnk&*|>KJ63sz&whoeWp$oU-%LxFJL{z?6u{C&yR{WZFoRbf*+bKk#2JJ{lc{QOqtaMv_l)JZr<3toiZN!#baEsloPzIrw-ov zeiat-teEG4Z38LPT&;VLi}|Hb5RtdJJdrG^7t)^2N`o$%!!zn-@}oRX zrPFIz&@`+b&fnVx>6H_@rK4FHPLDAC&ECE#sbw9G2V@};;ohr~^E{KD1BQ7nbHu-{^dNod=((a$(2cv% z*3K_Le$(&TuU$o*@@O3L;GNRb+Hk?ffFWu3?mUlw>LXkkWV>oLt}K7@4Zi$SzhfVj z0#XC`k}GAdIS8pl;{#bawpO4leE6ipZZF<$R}{M!1La&f?&Mdi^TE)~gt?Qf_>0d2}XM^(_??W>k6BVX?NO$jc zv!ZFiR{dml{ah{1aZV#?qAKC|*{>hH(k=WYCWuj$D;@7d$F9qE(dHkEU_m(3kXm=C zv*81(VTVZR$7*ldV3M+9FcJjbwNmcNA=P19@57I4{uHA6f^2J$cuc#$^irJ!r;JwS zPYpVVubEDJNI+5uIx~gQNx-b_8QPNPNj$ufluXR|CPAyDsnFSIUKQO5wj~FqD8t$c zMYC(LVRd!ay^FRwGV3ih8PR5ac$)BD9(FZ*kmaMkYmmLi2{u{TN(L?&oxG~xyO<$M zQQ7`m79ycc4Fz-RGut`@Yeb%p+q=5fVf{qV0V9Lw>~y{IkvOcH#W~+sdXmL&?qoTT zoo^qcP?7APoL~>RokL551sij_#at3rS0z3xmgq|NlMR0$AFgp3v9)t@NS}W4CpUgg z*I;vxH?-(Ey5o^+-W;skuEz}oq}&6d$ocMUUHc9w<8>GC?iHy7Z4GaQ1y#YCPzBqfR4oA@3 z;jXtGg=0VE6q{NIZFe@az&X8oZi!SqR};rX3As74sdTl;c^gP!Ya-7t0Vw_&qtsNi zDqknC!v|DdR_yqre9Yy<IJtm>n9<1xnfVlMeV(z8K3GZkBUYri%m@ujqdu+HBphMTKA z;i(B4fOQ}(Vf(V-cDXXdFu@`+#JxQe0_$1W$vY4jSo_6I(Ru72pZGi3JZx8MZnaqPv%-97Ka(ZJrs% zJT84HjU>2XtwJOcdhtGS@;EIE(o4g07x)*UKYCu8%~KQLgad znjKR>HAUn-<3=L_+*=lrmQT86VfUX^dO6Ld^*{TCa%+23A&Y zTApKj4+n0F|MaLn4GlpS8Oci~rRpp0dkU|8lucv z>-Dpgh7fXln%VJMxAjt@sP#LmKrW;_;&ur?Av}zV_D73pXmstk0fx%cmbp*e3I~uG z{qXNHUMmDWj5(+26k6DQEC?T)MjH7|^upsS>MNrJ>;zyk)i{x`HqplrK<+Kn+6CnP z=Ms?{;x^>2^?3xytN!g*tp!vRlN-f$eD0kh^tX~EAx7a?EJ#c2Hmd;_-zYNfX2GrsJa$9d4elt}Q-or0uKM*f==u>WS-+F|>gor*z5D#%Sm$R8G#YjMTW$OAnnJ2? zpHHxtvOnAg+kBvg{rmr!l(i9@K)= z&!uE3x8O<^QiG#cL>oCQkIdFS2lqQOQ=NL87Sw1v=yB7}4t{SD)_#NpI!*X|#;v0W z?a;(V#-dulv17W-;z+EO%t5}Ft)_+29;~8`&kxFNe;L9s#fvSt--E26kl&>O$%z|= zK^@OzMVi`eys_4ow$S_$&@3_=-P^_`JUL8rA7IHrrN+38%4{EUOc@XWog6`g4!$mb zAI`2|eyXbJ6O@$q9#Pd+^l8T!IWg#vD)LOdPpJ^C`r~CI2sS=-VG&$%X*80Wk}I8J zW|=s4vpbPz`txht3S>-|%W6^k;X`;>5CgoBEygNIpOBg!QlKj(7ptTcU3|ICsDukg zJ`R?D#g}x{60=?rHU~qXI(2S11Q?N@G4TRumc$9e+pFtI{aAx;>~>E=OxAVc=cDPU)0Q0X7(*AzMKl5hBwI}6g_iAI`pQW)s_5~NNcZH5zO&3E>b9e^ zLkDuJUGSqIkaShto8U21n>ggFDhBNCjC79J6HV7IC5eS&VCr(fjR_>6NxGz^(JfO8 zX1!y|11qo>bE&HGsV(N^9DJl3zKvrmW3N=Aw{^D7g=tP4Xx$Z&A+KAO6g!;}^RVYHt~BF{$ljnQ#SlsKuhdOTFOM zX4v6JxBF`z=Ev3!XMlC1;f)+!6Sb$=2Tlh;I0WkP@A*b3A8&4tDxb11T0HFvO!=wn z?fdHVySMjcqRwv0xAfXW;^7(XR$V-IBwm!^jKxV?=uoN167^(7EHJg?5WdYl&TKUr zemBhUsYXqVy=*(VBwBfcjp0&u%vzwN%fl89R1HSTv!mgO3O_=tmv1Z@RI7{Q0o0Ax70=JZ z&iiu;r&+gs&CqxiL%&afpF68b8}A$bWlC?>Fzp)R%81igAU9#!;6O2-86fZ(CKf-L+Jq+1wLtQ2*rJ~ahv@yx|!Gg zvfImU4?b^o)|_efXVkZt5~|PXOE?|65B4oFBokvO_;9H(Am-&{u&o-_I?QFl2d3>` zDC2jwo6SD@^c6*Q*#9jRMB#k}hbb9F>YT1^UmF$IJECWnY!L%#EloS|zj!egz7GS5 z;l0R0Uzpwr6lx!jTm96-LX*eLi_C<*{gE`@#$=$^?baZ4pOed@LVm^nwG84FzuJ`& z>tnfvGYW5~dq`Z|p&TLtYT#WtqPo3ez>N)C2zy4(HvxYOhAR+- za#;@b%mGDvfZ`4+*;l1OR;j1hCoOgn+B`udk0VUdFq@kZKb9vu?b_Xaqn1c8(WJ3m zVBweA%;~kZI%tR!?@-pFQDHCh;1JbB@u#W7$7-C~KwYBuZUa0QK4O)&ATHDH1x@?ac9e4DP0WE#+h>4V%bWg zvq-DJ!L_tpc!9*NtG^%j|ZCKmZ>vLK$0(?}W;%$D8T)%TgFdwZMv zNA;ai!PXKm6a97f#Tf0d2$&WUf~Dx%-~>^o#+|fh!?fMN5+AWvw<}v{ssosapO`Pa;9=LJya55s&GnK zsR0A@v4H+O=`fA}O7<1d!3`j@Jwh5@ZR-{j*uJ!;S-3+cjo&$s-s!otjM4DFzoJPa zE!=i5!;d}e_U(}!YoIX%TeT{y!(hco_)#s|c%myzq;&z&X!+$G7iq5f?s0vvbc%LI zUmvM|3#YQiv3Hgr5)y9Wcztg2f@SyXwG)zNwoLKQ`$F#~{HN3xt)*e*02uuiK{IwZ zw#dQAjIP~ocG2Q|)F>hT2f^B)q^mI}xlmziw>H7FJV9QO71}5oD36(n zfP=MU(8KqFA92uNiE`UBB_usP1s^DtoLx@m=7R|@cXEDX^=M`n6E$?n3s>C70hG2Ruivcr_IQ?ox zyZt>@6i0XBMW*k-yc4$d4e!0kG+lL@S-R+$LczZMr^J$^zogw-3y5!suxy)3mrEKD<{ri+Aj|rb3o`fUk zDf@gHGnFs>7IO!L@lAc%W%C(pbFw}`Irwu*Lf?Awh$ek4C+C+sb4)LD-%ElX>%(hO z=&$(3MmC*F-)b`{N5g!%7jV(0o{YhcODk4ee~ z*$v~Gq0yDP*$zDELoKz%pE>5NuDa+H^MwuOJb@;A;!K@uMqT1EMroMLHFv}pekys( zZty!)B-q5fpI~fBDSDUJo%7b!h3#!Xhu#IIPMhDkV>xWwm%af3e4osbqRi`b6He2F zSUSPOK>rVzhOFz`4s*ptxVZ7l`Vhqpi2Kr%49IaNSTICnhf6mJw!H3`=zbyNpfxe1@2%Js5aj!X^ zGtnfuFtsy!hB)8s^*Yk%ELHZ~#qm`wqcc_4tov`_y6xc}r`zmyHg=e_&kTl??sYks zIkqY-OI2wdR|fp&@PN&%`s)1%?%i_=Vnc5w~6Sz!N@Vr*|br(%8!gWVf5g64p@4I3(9hrbcnxz% zy{WG=zQ4oo+L-oDAD5gfsG7WF0FS(cj5a35{K7b>Ot*c6vJ6psLh(j7Qa_`2zl~Z7 z(zs_IJ-FcLr;O`@h1VIR!cI}l2m}vW{>9Z%?3$k%giI!@X=bjjn|q%%g+%9)FeUr9 zhWQ0Ps>CiZkex_A-$3<8aOB{~ylu;t&k<*G*pc-Yc+#phH-?3q2S5pa%M9>mxEuMo*B zl)#&|U^r00_-%v^j6j9BcCB3?&pfzh2!~Yghs_aS{ZgT@c}AL3#!q|mZM@&==*(%o zvux+*-bxS^dG(!BqUuD1g#VjE!uWjW7AX|~GO}|Bm(EE&Yu8El`Rk79C@RXWf|3tn zAT5dW0EI>)6c%+wXBVxBjz^{GLB_=>9t({}3=Mmk<=I{1TeZ5wei%coTiz2W-ojx$ zBRB857j<$XD&+f7DXLFl$`E)@O|fXsbwftqu2Wh;U0M8UpGHq|l?1DCeA#-}uh1mr z8|%@?dX&2PBlQ_w&pk`bWKXheI6T%%6G3I-zt)l%UOtbm7?<@PSAd7c74L=W(852{ z>%r6i7Z>{y#f1}YR)~JpFW(j`?lEP&;I-|VijiBJpBLZR^X^uW=xsh6I+ycQ?~{Z3 z0Oe);7;}pc960W+x})H|-be^{NEp!@5i(0HOxbQG8Vdi9B??RzL}4vy3o`h;(aQvj zHF3I`BlYe372F}g(RhrDTN^*5O9L2-fZJzVr6Fsn{t_;5G+GyH^gVaizVL)^u+oGg z{^Yul6&6HiD##lWndztBiQ%C76&BI!&Tc$p8faLgKFGwukyOrhuzG~O-%i&XOsIxo zRhp-gPc@1D_HxJbMxmTKi%ZC0annVu%@kk==H?)LqmR{}zn`TFcn1I4(Y>)oAagY; z`@jNp2&J>_2>qBVd4$mP`|$kj14rR3&9H<4MygMbv`Sw3u%M|Tl{{~#H-##rkN4LF z9`{%C+}MA^7cX925dxVMiQ}Cl5wDO+|Go}nv3cB#)aJGaDFpdF(g6|DNKn{!`uQK) z^lG2XzP{ZRJvupiCh8FsnFvPp*tsYT6&~5Oj@H#LI4JilHRH^)$qQS@4C?9(oATp&_qUgo;c z2e3lHOmNp@pm z-JlR8%oHCk!!7D#eLRliCD<&%S=3_zRZfa;kjaoyLP%$viE2yDES81E7|Z9`R;E z@005cKP?==Kumiq1T>xx8kd#vK*^1U>p%F+)^%ogdZ{(b--z}a_`VMxORwuoorbX0 z!Y0*MblCkI46Mw8@}O-O5#KloV(t$zn&VtklawrGI3fq7?vkQ45v zxu~#o!t=}yKIGf?%ZD?W1<@bAD{W#HmOqA-Bu3v5v3^5~xWU4duG5#zzB%?T%$%@_ z%8w%EGMZHcs1+YI$6wJ08jE?PIW|t2q~NfLsOA874$8>txOa{k{+Do`YO(3iQV zzuQOKl%gq6rBHoBM8#tjpIo)YY>wY82L(i=0IbhgLx-^xzSQXBuQuNTv#G*)?2oKg z*7@+j=D=hOBFxlbxw&s!t4E*bQz3qTUYW-}Uz27vu#; zZd{5<>?+hx)F-t$+*;++gg1||vyZ#>bEhG~=TiAt>MuOpp7$**XtaRTVZ~_FtI~UW zXET-bkD>N`|6A((*(m+<$R~)B@FTs|2V5jo!^kxDw$8N;5}x!kXB(5@5&U;zYmHr3 z%g`?s+BT#P+O&@qZ#mhR^3JPbuGBI2XZe1L!KxIglub9;Oc$#OOytSbu8K+ijo^5R z@{R6a>flUP?22U0ztus^>+>2oQ0VIi!2|Xm*0 zV0=3G!Nm)%$nh z>ER4EoTv^=3=E;6Bv!I3M(;l}zqGGQFc5$iQ54x|o24x*Tx7E!Tnk%aX%qBc%7?Nw z)%U2-un&@*($xI?%Mx8uaW?dBi|s*J3CM>2^=I_(uVrO)N(J&lEx!P%!C_}KqZ5p! z{Q7Ua&UG?y8FUR-mYrwf7>h}1>F0vapXDl82B$? z$u?D05tisn^*2-xFyKuH(97|9Oc!iDXR^G^#V@ErGPTCC=#3}kWdF4}&LMN?yqc{88y z_WyW{&29Pg*wQti;P1q};Tr2Tla$KicA}h0Qx?t|GaMsy^mvj(@Ed7ZABfysi4kZr1g-0Rdvy}JuY%|@I%PsDrd z;FK;)_>}JzZh5imwfF&Yf{ImL^|7x5Sc}9-JwEjrYshGRF`YL*c6Jbz{={QN-O0z3 zV-(_c^}S(8)4QvV29I&%JMIYw&M}4n#2d*i$R|R@_Xw6@jkI7jYfWY zSFv6^AF-kK`s~0yAnJS*ip$mq5T0DPx)J#;0y2aPtC`t45ux^YEasPN{gfywQC5?^ z#S$kpx`vn@-XFJoFZz?#M=Y+7ibBF0&Gsy56!>VzaPd_rc_y}d zsRX>OUZ)Za6Wbm786Cg6N-lUB6%xplD6-UFCy^gZK4})PH-AZ z6C5!}Eug{DTBnK!w7WdYlsmZ^A|nc;#43mNK?bb7=n~O{YmPv%g5(79G8y&0SV;6V zMU+O3jCQNQL-_I&ms2V~Uf_PCVWajBu8p-FlgZ~DQ$M*^idmnRq%g}A6&ZA#`pK?- z(V*pNBYG0747jT5r}EAWFyJlNvsLGs%W=Rf^E zd<1Z4qUE}bx|@V{*B7z+J;;t{QE6UM2^Wq_@q`YB9rCUlgSWx*qxI;C-y&$iczX=S zAyRCrepm~|hQ;+#fnj;=)rsAEwXqk>&1LwGD1DT!BU={F!E+beWh)6Ei7-u{t_Se# zEEWdk%3HGBs3NzvieGVn*l|6zt3UYIgJRpz979~VV>caV1 zePZRqY~T03`chM5^h&fBaH`3uMBu8Vnv@Wr7>~J3?aEi+f z?Xv;vL56jrN(l3z+MvA|&$4^_29N`n^kZZ?Vdx)UCgyW>rm`m!lLD&q-QC@IS?g0_ z3JnpFPa;d`<8cwoOT<58y{P_gq0qg4lZ({ZCL26MH?|QrC92d1utB-TUt~g+SEObd z*pGt%^oXLB+H-bNXTM8r8Gn+)qQWfBWFnEnb0fRV(NKpL_vuTB1n}jKi_DRy8< zN}g*DD4C(#n+HV*3-sAv5LMJY-pmdI_{fPSu+DY&SowCAxmUu&%cj~sqj zpV4hu?^G(Ej2+icmuJQ17WT#BlgrHxRdsw(ltQfu9%U?dmizG1lp4B>%hA+(SMJGs zuN9BU;-2npe8ng{Os?>OkM><3%zgTLro_!Q!_;Qk9ClyZE~777UsVMh?|IHD>@ixB zCY*ng^MTvOS#2WGgdyW13NBp%lXoJ#>0gUczd&ck=<^v;bBF%zc^OL=#@J+Rnjwz! z-4Qcn`r(X}rlba_l@#FS-ghcdYOtVS+R{IgLTjqugoy79&V--um{f3NSw3usk^efH zq@*4xQ(#buk{w5w1`*|SG^A{sK5a;$Wd>-~(0l4d((@3mkl<{&Q1}5^TuUF59T@Z@ z;|xRT6-99#nG)_;%uG@f~m6xi( zKx8{W{K;##Zg4nXoi!>eFg|v}m6tXkCZ(h*Dd@m-iVQZgqVt>->FGp4cpE#2$1Z76 z5CsViHz&BwK#feiu=N4#TM~c9|ceSRBx5*>D z!eQy;M-Ig04$X4^1dSeqiT`KwG5l^mz>bpZGleYT4{bCOuD#W%}G{hgoP!&B~yIEwon6JrzKU@bmJMw$Sj#TMWY8%kb*1vMkaa_n1!W zTotg`f{xTn8Wu0Zkyt-#b8&ar9VcDJ0|8|QGRb7L;a{J+q-f=}(6$-scEBr+(KRlD zpKm|zj;GuUZ`%OAAYd{_4dKg8#WKs(rl0$*2BYh-pE3ZNgrq5#Nid4gY?yY7*h=xN z-bLbF*O`1Rc8=li+{WaLYLSoL6~@E``tO*PKnxX#Xi?PlP?w2~F-;YnSJJRvHZmYD zE#6gxVAN%(*aJtGcpJNE<&~ibjbAp23-3o{8N)mxzSK1|fMxHJZw*H>979YVZ{mVX z>lNtYZO*3DxcynhxQ3M53`h5fqluKTL#7^|HWVHQnPXEWVYW?jmx$F4<%3Vk_@4sP(xM52x@D>VW zu!edW7M{)!#!v2W_)%6JW@wvUx~=}CRcFi28slo#MN>&d%L_y$i4 zcvrIFEFYwl39(8$0Pg~dq+tGcSYExP`bUBiUOVZU^>aN5(c!3;lI#!q`whu;O8EMn zBNT0Z+|ksV6hY=5z{|okLKqLk25LeELR1^L}fHlGL0v z^@KBi>b_+(El)AoevOD7R13QZGMy11m_i#P)_050#e1ZLCs8>O>@jH-q zTAW31;2$o6IUp%h7^M1K05&(z{1me3x@shi!VN8Tq$+o+<3`=~7~MLew@Ic`397%S9cIy@vO1BFDorm3 zqEuH|Fk@Nvl+8(Mbmd7jUf-1(A>JOrv`-k_K0$=Ct`+Wu|0bCt%3%HoooME1g~+Rz(6%BzoV zlvKI}$~NCpP!f5@sQlL2@q5b=jSaO?FbQ4gVwcwed!45G?4)*{Zl-bj8d3;Xzb3c* z1YrEC_Dj4%k!)&irjSZx+QU#T0|@ta|GJLEVp{z?IL(+ZLeDjJ)g?W2qZ>o_>&+E3 zK4Rw2{F62AsP!yyk6I1aK&ewU5*b?Pn0VFoGGOYrx6Sl#R_|?%TtLQ~AZx{nt3RS> zk}*S|dsowmCdpzktLyLt^x%(6>#zSF(_TPFG5!wUKxdEM=DZ)l@k1u`E4qxW}ETui4|aM`+N&udZmyq&Ruw+hcBMQ9H&+mrh+QTxJ@UV@bI>e^;QUw z5okO+gYhTYlfIlsqn<52*dBJiY;b&vc1r6e`*^8VC$U`V@~KhAUY~_J_5y`8u->8a zw?1N4QhV8;NMh({YZtAJZ}93VH%rB84AM)U6mAfr+ulCdgf~QyQ&f4g;4V$|#4SXf zoZngc+x0F7$GaBQoV@PG%_&I(5al!R6lts^fG_+@fkRPxNSqlTtl}lRR5O+Nut3=eI z^}^AwDCN36R%Ut&tg80`E*-arW?GQglJHZgf>%l2=E@Z#w&{5Xb^pFKY|*cmm})pU zDc`qF5TVhdQt=O7>JJZYp2X9gMFO~hq(=3a{iOrom1K_*&}y;LPEqBOyJDhDOvb_a ze#ZvgjpqXw!bkmjPG3r}z_i)cDh{yHMP~V~uE=1zsxHc1n^^(edY^xw6d&JLH~*&g zj!xJ&R(}lnD7N37=wPW0PU-w^hQzt7icyXtEx{|9+tnqlj*BjETTn!}Gl@5dKY)w&5Rx}e*d;OG{mT2YEV`mTVCKX6B0czq%2g%C_jGC zi0G3~hjvV`5WO-rUzCb#4Vkt*8uf110Be7~*zT)naacmP&mGCSXlZC|9^0jPMTE#q*`|vMqj6G2vZZf- z6v3aaJOWD?5}VKIVV2>?QsqL^7N#BL&TA|{&omS z%BYsB3#8mJ$7<*kRHiVuGLkk(o5tqZtLZp;FU;zsU6 zN|UDu0h#G2dEvmxQ5NB+L!AAW2-OL zQM^g)zF0s(^ASYCQLC1JZEAXp$EH%IopZF*NOtz|2iM6N0>zb>k2%*rnt*gp^`dAp6BD8oUX2J)CwyL?4R-2?UfT?B+4*LS=O1j zO32#jPMB5Vzn~NO2r!UK#6Nw+8l4U|+I)O{4M@E_uBE@D|H0@sg+L$B#y5pT*ns{s zNdIfc`#R(WG~{~!zT5Oqg7YtHrv*TAcD@#kfA!~m{l>y4o~U1S&pbU=*#2=%&R0ZW z!OrXpIE6pP%)fpv(*bLJmdlPm=E3{{Xa4$G?hUNLKo3_;jc(^AWoKts07wT57ng9G4B|Kln%H^#$~r*stgPHZ;M1& literal 0 HcmV?d00001 diff --git a/membership/burn-points.php b/membership/burn-points.php new file mode 100644 index 0000000..0ca1499 --- /dev/null +++ b/membership/burn-points.php @@ -0,0 +1,43 @@ + $credentials + ]); + + // Set the Member body + //The points to use to should be from whatever point scheme is used on your card e.g. Points, TierPoints or SecondaryPoints + $memberPointsRequest = new \Members\EarnBurnPointsRequest(); + $memberPointsRequest->setId($memberId); + $memberPointsRequest->setPoints(2000); + $memberPointsRequest->setSecondaryPoints(1000); + $memberPointsRequest->setTierPoints(100); + + list($result, $status) = $client->burnPoints($memberPointsRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/create-program.php b/membership/create-program.php new file mode 100644 index 0000000..8b8c73b --- /dev/null +++ b/membership/create-program.php @@ -0,0 +1,36 @@ + $credentials + ]); + // Set the program body + $program = new Members\Program(); + $program->setName("Quickstart Program"); + $program->setStatus(1, 4); + + list($id, $status) = $client->createProgram($program)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + //You can use the programId displayed below for other membership methods + echo "ProgramId" . $program->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/create-tier.php b/membership/create-tier.php new file mode 100644 index 0000000..205e9e9 --- /dev/null +++ b/membership/create-tier.php @@ -0,0 +1,73 @@ + $credentials + ]); + + //Create templates client + $templatesclient = new Io\TemplatesClient('grpc.pub1.passkit.io:443', [ + 'credentials' => $credentials + ]); + + // Create the template for the card + // In order to create a tier, we need a pass template id which holds pass design data. Let's use the default pass template for now. + $defaultTemplateRequest = new Io\DefaultTemplateRequest(); + $defaultTemplateRequest->setProtocol(100); + $defaultTemplateRequest->setRevision(1); + $defaultPassTemplate = new Io\PassTemplate(); + + $defaultPassTemplate->$templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + // If you use the default template, you need to set name, description and timezone because these fields are mandatory. + $defaultPassTemplate->setName("Quickstart"); + $defaultPassTemplate->setDescription("quick start sample template"); + $defaultPassTemplate->setTimezone("America/New_York"); + + + list($id, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + + // Set the tier body + $tier = new Members\Tier(); + $tier->setName("Base Tier"); + $tier->setPassTemplateId($defaultPassTemplate->getId()); + $tier->setProgramId($programId); + $tier->setTierIndex(1); + $tier->setTimezone("UTC"); + + + list($id, $status) = $client->createTier($tier)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + //You can use the tierId displayed below for other membership methods + echo "TierId" . $tier->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/delete-member.php b/membership/delete-member.php new file mode 100644 index 0000000..904c522 --- /dev/null +++ b/membership/delete-member.php @@ -0,0 +1,36 @@ + $credentials + ]); + + // Set the Member body + $member = new Members\Member(); + $member->setId($memberId); + + list($result, $status) = $client->deleteMember($member)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } +} catch (Exception $e) { + echo $e; +} diff --git a/membership/earn-points.php b/membership/earn-points.php new file mode 100644 index 0000000..7a34b2c --- /dev/null +++ b/membership/earn-points.php @@ -0,0 +1,45 @@ + $credentials + ]); + + // Set the Member points body + //The points to add to should be whatever point scheme is used on your card e.g. Points, TierPoints or SecondaryPoints + $memberPointsRequest = new \Members\EarnBurnPointsRequest(); + $memberPointsRequest->setId($memberId); + $memberPointsRequest->setPoints(2000); + $memberPointsRequest->setSecondaryPoints(1000); + $memberPointsRequest->setTierPoints(100); + + + list($result, $status) = $client->earnPoints($memberPointsRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/enrol-member.php b/membership/enrol-member.php new file mode 100644 index 0000000..0a10878 --- /dev/null +++ b/membership/enrol-member.php @@ -0,0 +1,52 @@ + $credentials + ]); + + // Set the Member body + $member = new Members\Member(); + $member->setProgramId($programId); + $member->setTierId($tierId); + + $person = new Io\Person(); + $person->setDisplayName("Peter Pan"); + $dateOfBirth = new Io\Date(); + $dateOfBirth->setDay(22); + $dateOfBirth->setMonth(6); + $dateOfBirth->setYear(2020); + $person->setDateOfBirth($dateOfBirth); + $person->setEmailAddress($email); + $member->setPerson($person); + + list($id, $status) = $client->enrolMember($member)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + //You can use the memberId displayed below for other membership methods + echo "https://pub1.pskt.io/" . $id->getId() . "\n"; + echo "MemberId" . $member->getId() . "\n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/list-members.php b/membership/list-members.php new file mode 100644 index 0000000..60c1101 --- /dev/null +++ b/membership/list-members.php @@ -0,0 +1,36 @@ + $credentials + ]); + + // Set the Member body + $listRequest = new Members\ListRequest(); + $listRequest->setProgramId($programId); + + $call= $client->listMembers($listRequest); + $members = $call->responses(); + foreach ($members as $member) { + echo $member->getId() . "\n"; + } +} catch (Exception $e) { + echo $e; +} diff --git a/membership/set-points.php b/membership/set-points.php new file mode 100644 index 0000000..7ac44bd --- /dev/null +++ b/membership/set-points.php @@ -0,0 +1,42 @@ + $credentials + ]); + + // Set the Member body + $memberPointsRequest = new \Members\SetPointsRequest(); + $memberPointsRequest->setId($memberId); + $memberPointsRequest->setPoints(2000); + $memberPointsRequest->setSecondaryPoints(1000); + $memberPointsRequest->setTierPoints(100); + + list($result, $status) = $client->setPoints($memberPointsRequest)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/membership/update-member.php b/membership/update-member.php new file mode 100644 index 0000000..c4523f7 --- /dev/null +++ b/membership/update-member.php @@ -0,0 +1,42 @@ + $credentials + ]); + + // Set the Member body + $member = new Members\Member(); + $member->setId($memberId); + $member->setProgramId($programId); + $member->setTierId($tierId); + $member->setPoints(2000); + + list($result, $status) = $client->updateMember($member)->wait(); + if ($status->code !== 0) { + throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); + } + + echo $result->getId() . "/n"; +} catch (Exception $e) { + echo $e; +} diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 0000000..e15e65c --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,12 @@ +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'); + exit(0); + } +} + +include __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'; diff --git a/vendor/bin/yaml-lint b/vendor/bin/yaml-lint new file mode 100755 index 0000000..9e7a09c --- /dev/null +++ b/vendor/bin/yaml-lint @@ -0,0 +1,117 @@ +#!/usr/bin/env php +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); + exit(0); + } +} + +include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php new file mode 100644 index 0000000..afef3fa --- /dev/null +++ b/vendor/composer/ClassLoader.php @@ -0,0 +1,572 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..41bc143 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..0fb0a2c --- /dev/null +++ b/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php new file mode 100644 index 0000000..3f9c14a --- /dev/null +++ b/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', +); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Single_use_coupons\\' => array($baseDir . '/lib/Single_use_coupons', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), + 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'Protobuf\\' => array($vendorDir . '/protobuf-php/protobuf/src'), + 'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'), + 'Members\\' => array($baseDir . '/lib/Members', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Members'), + 'Io\\' => array($baseDir . '/lib/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Io'), + 'Grpc\\' => array($vendorDir . '/grpc/grpc/src/lib'), + 'Google\\Protobuf\\' => array($vendorDir . '/google/protobuf/src/Google/Protobuf'), + 'Google\\Api\\' => array($baseDir . '/lib/extra/google/api', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/extra/google/api'), + 'GPBMetadata\\Io\\' => array($baseDir . '/lib/GPBMetadata/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Io'), + 'GPBMetadata\\Google\\Protobuf\\' => array($vendorDir . '/google/protobuf/src/GPBMetadata/Google/Protobuf'), + 'GPBMetadata\\Google\\' => array($baseDir . '/lib/extra/GPBMetadata/Google', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google'), + 'Flights\\' => array($baseDir . '/lib/Flights', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Flights'), + 'Event_tickets\\' => array($baseDir . '/lib/Event_tickets', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets'), + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), + 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), + 'Cabin_codes\\' => array($baseDir . '/lib/Cabin_codes', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Cabin_codes'), + 'Analytics\\' => array($baseDir . '/lib/Analytics', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Analytics'), +); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php new file mode 100644 index 0000000..2cc5ea7 --- /dev/null +++ b/vendor/composer/autoload_real.php @@ -0,0 +1,57 @@ +register(true); + + $includeFiles = \Composer\Autoload\ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$files; + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire34096ee264e58ad06d3d18f45eda2b68($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire34096ee264e58ad06d3d18f45eda2b68($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php new file mode 100644 index 0000000..80c9df2 --- /dev/null +++ b/vendor/composer/autoload_static.php @@ -0,0 +1,185 @@ + __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\Finder\\' => 25, + 'Single_use_coupons\\' => 19, + ), + 'P' => + array ( + 'Psr\\Log\\' => 8, + 'Psr\\Cache\\' => 10, + 'Protobuf\\' => 9, + ), + 'O' => + array ( + 'OpenApi\\' => 8, + ), + 'M' => + array ( + 'Members\\' => 8, + ), + 'I' => + array ( + 'Io\\' => 3, + ), + 'G' => + array ( + 'Grpc\\' => 5, + 'Google\\Protobuf\\' => 16, + 'Google\\Api\\' => 11, + 'GPBMetadata\\Io\\' => 15, + 'GPBMetadata\\Google\\Protobuf\\' => 28, + 'GPBMetadata\\Google\\' => 19, + ), + 'F' => + array ( + 'Flights\\' => 8, + ), + 'E' => + array ( + 'Event_tickets\\' => 14, + ), + 'D' => + array ( + 'Doctrine\\Common\\Lexer\\' => 22, + 'Doctrine\\Common\\Annotations\\' => 28, + ), + 'C' => + array ( + 'Cabin_codes\\' => 12, + ), + 'A' => + array ( + 'Analytics\\' => 10, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'Single_use_coupons\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Single_use_coupons', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons', + ), + 'Psr\\Log\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/log/src', + ), + 'Psr\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/cache/src', + ), + 'Protobuf\\' => + array ( + 0 => __DIR__ . '/..' . '/protobuf-php/protobuf/src', + ), + 'OpenApi\\' => + array ( + 0 => __DIR__ . '/..' . '/zircote/swagger-php/src', + ), + 'Members\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Members', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Members', + ), + 'Io\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Io', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Io', + ), + 'Grpc\\' => + array ( + 0 => __DIR__ . '/..' . '/grpc/grpc/src/lib', + ), + 'Google\\Protobuf\\' => + array ( + 0 => __DIR__ . '/..' . '/google/protobuf/src/Google/Protobuf', + ), + 'Google\\Api\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/extra/google/api', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/extra/google/api', + ), + 'GPBMetadata\\Io\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/GPBMetadata/Io', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Io', + ), + 'GPBMetadata\\Google\\Protobuf\\' => + array ( + 0 => __DIR__ . '/..' . '/google/protobuf/src/GPBMetadata/Google/Protobuf', + ), + 'GPBMetadata\\Google\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/extra/GPBMetadata/Google', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google', + ), + 'Flights\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Flights', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Flights', + ), + 'Event_tickets\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Event_tickets', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets', + ), + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', + ), + 'Doctrine\\Common\\Annotations\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', + ), + 'Cabin_codes\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Cabin_codes', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Cabin_codes', + ), + 'Analytics\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/Analytics', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Analytics', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json new file mode 100644 index 0000000..0043877 --- /dev/null +++ b/vendor/composer/installed.json @@ -0,0 +1,790 @@ +{ + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.13.2", + "version_normalized": "1.13.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "time": "2021-08-05T19:00:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "install-path": "../doctrine/annotations" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "version_normalized": "1.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "time": "2022-02-28T11:07:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "install-path": "../doctrine/lexer" + }, + { + "name": "google/protobuf", + "version": "v3.21.1", + "version_normalized": "3.21.1.0", + "source": { + "type": "git", + "url": "https://github.com/protocolbuffers/protobuf-php.git", + "reference": "68f71264d8816f001177d68ce99d25b28e212d4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/68f71264d8816f001177d68ce99d25b28e212d4c", + "reference": "68f71264d8816f001177d68ce99d25b28e212d4c", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "time": "2022-05-27T22:57:31+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proto library for PHP", + "homepage": "https://developers.google.com/protocol-buffers/", + "keywords": [ + "proto" + ], + "support": { + "issues": "https://github.com/protocolbuffers/protobuf-php/issues", + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.1" + }, + "install-path": "../google/protobuf" + }, + { + "name": "grpc/grpc", + "version": "1.42.0", + "version_normalized": "1.42.0.0", + "source": { + "type": "git", + "url": "https://github.com/grpc/grpc-php.git", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grpc/grpc-php/zipball/9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "google/auth": "^v1.3.0" + }, + "suggest": { + "ext-protobuf": "For better performance, install the protobuf C extension.", + "google/protobuf": "To get started using grpc quickly, install the native protobuf library." + }, + "time": "2021-11-19T08:13:51+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Grpc\\": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "gRPC library for PHP", + "homepage": "https://grpc.io", + "keywords": [ + "rpc" + ], + "support": { + "source": "https://github.com/grpc/grpc-php/tree/v1.42.0" + }, + "install-path": "../grpc/grpc" + }, + { + "name": "passkit/passkit-php-grpc-sdk", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", + "reference": "b03c1020c50d27d5fd51ed20267ba10da73be94e" + }, + "require": { + "google/protobuf": "^v3.13.0", + "grpc/grpc": "^v1.30.0" + }, + "time": "2020-10-15T09:16:03+00:00", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "Analytics\\": "lib/Analytics", + "Cabin_codes\\": "lib/Cabin_codes", + "Event_tickets\\": "lib/Event_tickets", + "Flights\\": "lib/Flights", + "Io\\": "lib/Io", + "Members\\": "lib/Members", + "Single_use_coupons\\": "lib/Single_use_coupons", + "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", + "Google\\Api\\": "lib/extra/google/api" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PassKit Inc.", + "homepage": "https://passkit.com" + } + ], + "description": "PHP gRPC SDK for Apple Wallet and Google Pay Membership / Loyalty / Access Cards, Coupons, Flights & Event-Tickets.", + "homepage": "http://passkit.com", + "keywords": [ + "api", + "grpc", + "passkit", + "php", + "sdk" + ], + "install-path": "../passkit/passkit-php-grpc-sdk" + }, + { + "name": "protobuf-php/protobuf", + "version": "v0.1.3", + "version_normalized": "0.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/protobuf-php/protobuf.git", + "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protobuf-php/protobuf/zipball/c0da95f75ea418b39b02ff4528ca9926cc246a8c", + "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "instaclick/coding-standard": "^1.1", + "instaclick/object-calisthenics-sniffs": "dev-master", + "instaclick/symfony2-coding-standard": "dev-remaster", + "php-mock/php-mock-phpunit": "^0.2", + "phpunit/phpunit": "^4", + "protobuf-php/protobuf-plugin": ">=0.1", + "satooshi/php-coveralls": "^0.6", + "squizlabs/php_codesniffer": "^1.5" + }, + "time": "2016-09-21T23:47:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Protobuf\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabio B. Silva", + "email": "fabio.bat.silva@gmail.com", + "homepage": "https://github.com/FabioBatSilva" + }, + { + "name": "Iván -DrSlump- Montes", + "email": "drslump@pollinimini.net", + "homepage": "https://github.com/drslump" + } + ], + "description": "PHP implementation of Google's Protocol Buffers", + "homepage": "https://github.com/protobuf-php/protobuf", + "keywords": [ + "protobuf", + "protocol buffer", + "serializing" + ], + "support": { + "issues": "https://github.com/protobuf-php/protobuf/issues", + "source": "https://github.com/protobuf-php/protobuf/tree/master" + }, + "install-path": "../protobuf-php/protobuf" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-02-03T23:26:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "install-path": "../psr/cache" + }, + { + "name": "psr/log", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-07-14T16:46:02+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "install-path": "../psr/log" + }, + { + "name": "symfony/finder", + "version": "v6.1.0", + "version_normalized": "6.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "time": "2022-04-15T08:08:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "version_normalized": "1.26.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2022-05-24T11:49:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/yaml", + "version": "v6.1.0", + "version_normalized": "6.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2022-04-15T14:25:02+00:00", + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/yaml" + }, + { + "name": "zircote/swagger-php", + "version": "4.4.5", + "version_normalized": "4.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.7", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || 3.0", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "time": "2022-06-02T21:05:02+00:00", + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.4.5" + }, + "install-path": "../zircote/swagger-php" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 0000000..e2322b4 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,131 @@ + array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'name' => 'passkit/passkit-php-quickstart', + 'dev' => true, + ), + 'versions' => array( + 'doctrine/annotations' => array( + 'pretty_version' => '1.13.2', + 'version' => '1.13.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/annotations', + 'aliases' => array(), + 'reference' => '5b668aef16090008790395c02c893b1ba13f7e08', + 'dev_requirement' => false, + ), + 'doctrine/lexer' => array( + 'pretty_version' => '1.2.3', + 'version' => '1.2.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/lexer', + 'aliases' => array(), + 'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229', + 'dev_requirement' => false, + ), + 'google/protobuf' => array( + 'pretty_version' => 'v3.21.1', + 'version' => '3.21.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../google/protobuf', + 'aliases' => array(), + 'reference' => '68f71264d8816f001177d68ce99d25b28e212d4c', + 'dev_requirement' => false, + ), + 'grpc/grpc' => array( + 'pretty_version' => '1.42.0', + 'version' => '1.42.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../grpc/grpc', + 'aliases' => array(), + 'reference' => '9fa44f104cb92e924d4da547323a97f3d8aca6d4', + 'dev_requirement' => false, + ), + 'passkit/passkit-php-grpc-sdk' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../passkit/passkit-php-grpc-sdk', + 'aliases' => array(), + 'reference' => 'b03c1020c50d27d5fd51ed20267ba10da73be94e', + 'dev_requirement' => false, + ), + 'passkit/passkit-php-quickstart' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'dev_requirement' => false, + ), + 'protobuf-php/protobuf' => array( + 'pretty_version' => 'v0.1.3', + 'version' => '0.1.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../protobuf-php/protobuf', + 'aliases' => array(), + 'reference' => 'c0da95f75ea418b39b02ff4528ca9926cc246a8c', + 'dev_requirement' => false, + ), + 'psr/cache' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/cache', + 'aliases' => array(), + 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', + 'dev_requirement' => false, + ), + 'psr/log' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/log', + 'aliases' => array(), + 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', + 'dev_requirement' => false, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v6.1.0', + 'version' => '6.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'reference' => '45b8beb69d6eb3b05a65689ebfd4222326773f8f', + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.26.0', + 'version' => '1.26.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4', + 'dev_requirement' => false, + ), + 'symfony/yaml' => array( + 'pretty_version' => 'v6.1.0', + 'version' => '6.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/yaml', + 'aliases' => array(), + 'reference' => '84ce4f9d2d68f306f971a39d949d8f4b5550dba2', + 'dev_requirement' => false, + ), + 'zircote/swagger-php' => array( + 'pretty_version' => '4.4.5', + 'version' => '4.4.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../zircote/swagger-php', + 'aliases' => array(), + 'reference' => 'fd8f1eb8d0165c7a668f307fbccbf3adf33f4017', + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 0000000..4c3a5d6 --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 80100)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/vendor/doctrine/annotations/LICENSE b/vendor/doctrine/annotations/LICENSE new file mode 100644 index 0000000..5e781fc --- /dev/null +++ b/vendor/doctrine/annotations/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2013 Doctrine Project + +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/vendor/doctrine/annotations/README.md b/vendor/doctrine/annotations/README.md new file mode 100644 index 0000000..c2c7eb7 --- /dev/null +++ b/vendor/doctrine/annotations/README.md @@ -0,0 +1,18 @@ +# Doctrine Annotations + +[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) +[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) +[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) +[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) +[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) + +Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). + +## Documentation + +See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +## Contributing + +When making a pull request, make sure your changes follow the +[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/vendor/doctrine/annotations/composer.json b/vendor/doctrine/annotations/composer.json new file mode 100644 index 0000000..00d0231 --- /dev/null +++ b/vendor/doctrine/annotations/composer.json @@ -0,0 +1,44 @@ +{ + "name": "doctrine/annotations", + "type": "library", + "description": "Docblock Annotations Parser", + "keywords": ["annotations", "docblock", "parser"], + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, + {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": "^7.1 || ^8.0", + "ext-tokenizer": "*", + "doctrine/lexer": "1.*", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "config": { + "sort-packages": true + }, + "autoload": { + "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } + }, + "autoload-dev": { + "psr-4": { + "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", + "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" + }, + "files": [ + "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", + "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" + ] + } +} diff --git a/vendor/doctrine/annotations/docs/en/annotations.rst b/vendor/doctrine/annotations/docs/en/annotations.rst new file mode 100644 index 0000000..2c3c428 --- /dev/null +++ b/vendor/doctrine/annotations/docs/en/annotations.rst @@ -0,0 +1,252 @@ +Handling Annotations +==================== + +There are several different approaches to handling annotations in PHP. +Doctrine Annotations maps docblock annotations to PHP classes. Because +not all docblock annotations are used for metadata purposes a filter is +applied to ignore or skip classes that are not Doctrine annotations. + +Take a look at the following code snippet: + +.. code-block:: php + + namespace MyProject\Entities; + + use Doctrine\ORM\Mapping AS ORM; + use Symfony\Component\Validator\Constraints AS Assert; + + /** + * @author Benjamin Eberlei + * @ORM\Entity + * @MyProject\Annotations\Foobarable + */ + class User + { + /** + * @ORM\Id @ORM\Column @ORM\GeneratedValue + * @dummy + * @var int + */ + private $id; + + /** + * @ORM\Column(type="string") + * @Assert\NotEmpty + * @Assert\Email + * @var string + */ + private $email; + } + +In this snippet you can see a variety of different docblock annotations: + +- Documentation annotations such as ``@var`` and ``@author``. These + annotations are ignored and never considered for throwing an + exception due to wrongly used annotations. +- Annotations imported through use statements. The statement ``use + Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace + available as ``@ORM\ClassName``. Same goes for the import of + ``@Assert``. +- The ``@dummy`` annotation. It is not a documentation annotation and + not ignored. For Doctrine Annotations it is not entirely clear how + to handle this annotation. Depending on the configuration an exception + (unknown annotation) will be thrown when parsing this annotation. +- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. + This is transformed directly into the given class name. + +How are these annotations loaded? From looking at the code you could +guess that the ORM Mapping, Assert Validation and the fully qualified +annotation can just be loaded using +the defined PHP autoloaders. This is not the case however: For error +handling reasons every check for class existence inside the +``AnnotationReader`` sets the second parameter $autoload +of ``class_exists($name, $autoload)`` to false. To work flawlessly the +``AnnotationReader`` requires silent autoloaders which many autoloaders are +not. Silent autoloading is NOT part of the `PSR-0 specification +`_ +for autoloading. + +This is why Doctrine Annotations uses its own autoloading mechanism +through a global registry. If you are wondering about the annotation +registry being global, there is no other way to solve the architectural +problems of autoloading annotation classes in a straightforward fashion. +Additionally if you think about PHP autoloading then you recognize it is +a global as well. + +To anticipate the configuration section, making the above PHP class work +with Doctrine Annotations requires this setup: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); + AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); + AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); + + $reader = new AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('dummy'); + +The second block with the annotation registry calls registers all the +three different annotation namespaces that are used. +Doctrine Annotations saves all its annotations in a single file, that is +why ``AnnotationRegistry#registerFile`` is used in contrast to +``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 +compatible loading mechanism for class to file names. + +In the third block, we create the actual ``AnnotationReader`` instance. +Note that we also add ``dummy`` to the global list of ignored +annotations for which we do not throw exceptions. Setting this is +necessary in our example case, otherwise ``@dummy`` would trigger an +exception to be thrown during the parsing of the docblock of +``MyProject\Entities\User#id``. + +Setup and Configuration +----------------------- + +To use the annotations library is simple, you just need to create a new +``AnnotationReader`` instance: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + +This creates a simple annotation reader with no caching other than in +memory (in php arrays). Since parsing docblocks can be expensive you +should cache this process by using a caching reader. + +To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. +This reader decorates the original reader and stores all annotations in a PSR-6 +cache: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\PsrCachedReader; + + $cache = ... // instantiate a PSR-6 Cache pool + + $reader = new PsrCachedReader( + new AnnotationReader(), + $cache, + $debug = true + ); + +The ``debug`` flag is used here as well to invalidate the cache files +when the PHP class with annotations changed and should be used during +development. + +.. warning :: + + The ``AnnotationReader`` works and caches under the + assumption that all annotations of a doc-block are processed at + once. That means that annotation classes that do not exist and + aren't loaded and cannot be autoloaded (using the + AnnotationRegistry) would never be visible and not accessible if a + cache is used unless the cache is cleared and the annotations + requested again, this time with all annotations defined. + +By default the annotation reader returns a list of annotations with +numeric indexes. If you want your annotations to be indexed by their +class name you can wrap the reader in an ``IndexedReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\IndexedReader; + + $reader = new IndexedReader(new AnnotationReader()); + +.. warning:: + + You should never wrap the indexed reader inside a cached reader, + only the other way around. This way you can re-use the cache with + indexed or numeric keys, otherwise your code may experience failures + due to caching in a numerical or indexed format. + +Registering Annotations +~~~~~~~~~~~~~~~~~~~~~~~ + +As explained in the introduction, Doctrine Annotations uses its own +autoloading mechanism to determine if a given annotation has a +corresponding PHP class that can be autoloaded. For annotation +autoloading you have to configure the +``Doctrine\Common\Annotations\AnnotationRegistry``. There are three +different mechanisms to configure annotation autoloading: + +- Calling ``AnnotationRegistry#registerFile($file)`` to register a file + that contains one or more annotation classes. +- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = + null)`` to register that the given namespace contains annotations and + that their base directory is located at the given $dirs or in the + include path if ``NULL`` is passed. The given directories should *NOT* + be the directory where classes of the namespace are in, but the base + directory of the root namespace. The AnnotationRegistry uses a + namespace to directory separator approach to resolve the correct path. +- Calling ``AnnotationRegistry#registerLoader($callable)`` to register + an autoloader callback. The callback accepts the class as first and + only parameter and has to return ``true`` if the corresponding file + was found and included. + +.. note:: + + Loaders have to fail silently, if a class is not found even if it + matches for example the namespace prefix of that loader. Never is a + loader to throw a warning or exception if the loading failed + otherwise parsing doc block annotations will become a huge pain. + +A sample loader callback could look like: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationRegistry; + use Symfony\Component\ClassLoader\UniversalClassLoader; + + AnnotationRegistry::registerLoader(function($class) { + $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; + + if (file_exists("/my/base/path/" . $file)) { + // file_exists() makes sure that the loader fails silently + require "/my/base/path/" . $file; + } + }); + + $loader = new UniversalClassLoader(); + AnnotationRegistry::registerLoader(array($loader, "loadClass")); + + +Ignoring missing exceptions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default an exception is thrown from the ``AnnotationReader`` if an +annotation was found that: + +- is not part of the list of ignored "documentation annotations"; +- was not imported through a use statement; +- is not a fully qualified class that exists. + +You can disable this behavior for specific names if your docblocks do +not follow strict requirements: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('foo'); + +PHP Imports +~~~~~~~~~~~ + +By default the annotation reader parses the use-statement of a php file +to gain access to the import rules and register them for the annotation +processing. Only if you are using PHP Imports can you validate the +correct usage of annotations and throw exceptions if you misspelled an +annotation. This mechanism is enabled by default. + +To ease the upgrade path, we still allow you to disable this mechanism. +Note however that we will remove this in future versions: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setEnabledPhpImports(false); diff --git a/vendor/doctrine/annotations/docs/en/custom.rst b/vendor/doctrine/annotations/docs/en/custom.rst new file mode 100644 index 0000000..11fbe1a --- /dev/null +++ b/vendor/doctrine/annotations/docs/en/custom.rst @@ -0,0 +1,443 @@ +Custom Annotation Classes +========================= + +If you want to define your own annotations, you just have to group them +in a namespace and register this namespace in the ``AnnotationRegistry``. +Annotation classes have to contain a class-level docblock with the text +``@Annotation``: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** @Annotation */ + class Bar + { + // some code + } + +Inject annotation values +------------------------ + +The annotation parser checks if the annotation constructor has arguments, +if so then it will pass the value array, otherwise it will try to inject +values into public properties directly: + + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * + * Some Annotation using a constructor + */ + class Bar + { + private $foo; + + public function __construct(array $values) + { + $this->foo = $values['foo']; + } + } + + /** + * @Annotation + * + * Some Annotation without a constructor + */ + class Foo + { + public $bar; + } + +Optional: Constructors with Named Parameters +-------------------------------------------- + +Starting with Annotations v1.11 a new annotation instantiation strategy +is available that aims at compatibility of Annotation classes with the PHP 8 +attribute feature. You need to declare a constructor with regular parameter +names that match the named arguments in the annotation syntax. + +To enable this feature, you can tag your annotation class with +``@NamedArgumentConstructor`` (available from v1.12) or implement the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface +(available from v1.11 and deprecated as of v1.12). +When using the ``@NamedArgumentConstructor`` tag, the first argument of the +constructor is considered as the default one. + + +Usage with the ``@NamedArgumentContrustor`` tag + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(string $foo) + { + $this->foo = $foo; + } + } + + /** Usable with @Bar(foo="baz") */ + /** Usable with @Bar("baz") */ + +In combination with PHP 8's constructor property promotion feature +you can simplify this to: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + public function __construct(private string $foo) {} + } + + +Usage with the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` +interface (v1.11, deprecated as of v1.12): +.. code-block:: php + + namespace MyCompany\Annotations; + + use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; + + /** @Annotation */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(private string $foo) {} + } + + /** Usable with @Bar(foo="baz") */ + +Annotation Target +----------------- + +``@Target`` indicates the kinds of class elements to which an annotation +type is applicable. Then you could define one or more targets: + +- ``CLASS`` Allowed in class docblocks +- ``PROPERTY`` Allowed in property docblocks +- ``METHOD`` Allowed in the method docblocks +- ``FUNCTION`` Allowed in function dockblocks +- ``ALL`` Allowed in class, property, method and function docblocks +- ``ANNOTATION`` Allowed inside other annotations + +If the annotations is not allowed in the current context, an +``AnnotationException`` is thrown. + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + // some code + } + + /** + * @Annotation + * @Target("CLASS") + */ + class Foo + { + // some code + } + +Attribute types +--------------- + +The annotation parser checks the given parameters using the phpdoc +annotation ``@var``, The data type could be validated using the ``@var`` +annotation on the annotation properties or using the ``@Attributes`` and +``@Attribute`` annotations. + +If the data type does not match you get an ``AnnotationException`` + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + /** @var mixed */ + public $mixed; + + /** @var boolean */ + public $boolean; + + /** @var bool */ + public $bool; + + /** @var float */ + public $float; + + /** @var string */ + public $string; + + /** @var integer */ + public $integer; + + /** @var array */ + public $array; + + /** @var SomeAnnotationClass */ + public $annotation; + + /** @var array */ + public $arrayOfIntegers; + + /** @var array */ + public $arrayOfAnnotations; + } + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + * @Attributes({ + * @Attribute("stringProperty", type = "string"), + * @Attribute("annotProperty", type = "SomeAnnotationClass"), + * }) + */ + class Foo + { + public function __construct(array $values) + { + $this->stringProperty = $values['stringProperty']; + $this->annotProperty = $values['annotProperty']; + } + + // some code + } + +Annotation Required +------------------- + +``@Required`` indicates that the field must be specified when the +annotation is used. If it is not used you get an ``AnnotationException`` +stating that this value can not be null. + +Declaring a required field: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Foo + { + /** @Required */ + public $requiredField; + } + +Usage: + +.. code-block:: php + + /** @Foo(requiredField="value") */ + public $direction; // Valid + + /** @Foo */ + public $direction; // Required field missing, throws an AnnotationException + + +Enumerated values +----------------- + +- An annotation property marked with ``@Enum`` is a field that accepts a + fixed set of scalar values. +- You should use ``@Enum`` fields any time you need to represent fixed + values. +- The annotation parser checks the given value and throws an + ``AnnotationException`` if the value does not match. + + +Declaring an enumerated property: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Direction + { + /** + * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) + */ + public $value; + } + +Annotation usage: + +.. code-block:: php + + /** @Direction("NORTH") */ + public $direction; // Valid value + + /** @Direction("NORTHEAST") */ + public $direction; // Invalid value, throws an AnnotationException + + +Constants +--------- + +The use of constants and class constants is available on the annotations +parser. + +The following usages are allowed: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + use MyCompany\Entity\SomeClass; + + /** + * @Foo(PHP_EOL) + * @Bar(Bar::FOO) + * @Foo({SomeClass::FOO, SomeClass::BAR}) + * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) + */ + class User + { + } + + +Be careful with constants and the cache ! + +.. note:: + + The cached reader will not re-evaluate each time an annotation is + loaded from cache. When a constant is changed the cache must be + cleaned. + + +Usage +----- + +Using the library API is simple. Using the annotations described in the +previous section, you can now annotate other classes with your +annotations: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + + /** + * @Foo(bar="foo") + * @Bar(foo="bar") + */ + class User + { + } + +Now we can write a script to get the annotations above: + +.. code-block:: php + + $reflClass = new ReflectionClass('MyCompany\Entity\User'); + $classAnnotations = $reader->getClassAnnotations($reflClass); + + foreach ($classAnnotations AS $annot) { + if ($annot instanceof \MyCompany\Annotations\Foo) { + echo $annot->bar; // prints "foo"; + } else if ($annot instanceof \MyCompany\Annotations\Bar) { + echo $annot->foo; // prints "bar"; + } + } + +You have a complete API for retrieving annotation class instances from a +class, property or method docblock: + + +Reader API +~~~~~~~~~~ + +Access all annotations of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotations(\ReflectionClass $class); + +Access one annotation of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotation(\ReflectionClass $class, $annotationName); + +Access all annotations of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotations(\ReflectionMethod $method); + +Access one annotation of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); + +Access all annotations of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotations(\ReflectionProperty $property); + +Access one annotation of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); + +Access all annotations of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotations(\ReflectionFunction $property); + +Access one annotation of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/vendor/doctrine/annotations/docs/en/index.rst b/vendor/doctrine/annotations/docs/en/index.rst new file mode 100644 index 0000000..95476c3 --- /dev/null +++ b/vendor/doctrine/annotations/docs/en/index.rst @@ -0,0 +1,101 @@ +Introduction +============ + +Doctrine Annotations allows to implement custom annotation +functionality for PHP classes and functions. + +.. code-block:: php + + class Foo + { + /** + * @MyAnnotation(myProperty="value") + */ + private $bar; + } + +Annotations aren't implemented in PHP itself which is why this component +offers a way to use the PHP doc-blocks as a place for the well known +annotation syntax using the ``@`` char. + +Annotations in Doctrine are used for the ORM configuration to build the +class mapping, but it can be used in other projects for other purposes +too. + +Installation +============ + +You can install the Annotation component with composer: + +.. code-block:: + +   $ composer require doctrine/annotations + +Create an annotation class +========================== + +An annotation class is a representation of the later used annotation +configuration in classes. The annotation class of the previous example +looks like this: + +.. code-block:: php + + /** + * @Annotation + */ + final class MyAnnotation + { + public $myProperty; + } + +The annotation class is declared as an annotation by ``@Annotation``. + +:ref:`Read more about custom annotations. ` + +Reading annotations +=================== + +The access to the annotations happens by reflection of the class or function +containing them. There are multiple reader-classes implementing the +``Doctrine\Common\Annotations\Reader`` interface, that can access the +annotations of a class. A common one is +``Doctrine\Common\Annotations\AnnotationReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + // Deprecated and will be removed in 2.0 but currently needed + AnnotationRegistry::registerLoader('class_exists'); + + $reflectionClass = new ReflectionClass(Foo::class); + $property = $reflectionClass->getProperty('bar'); + + $reader = new AnnotationReader(); + $myAnnotation = $reader->getPropertyAnnotation( + $property, + MyAnnotation::class + ); + + echo $myAnnotation->myProperty; // result: "value" + +Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works +if you already have an autoloader configured (i.e. composer autoloader). +Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. + +A reader has multiple methods to access the annotations of a class or +function. + +:ref:`Read more about handling annotations. ` + +IDE Support +----------- + +Some IDEs already provide support for annotations: + +- Eclipse via the `Symfony2 Plugin `_ +- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ + +.. _Read more about handling annotations.: annotations +.. _Read more about custom annotations.: custom diff --git a/vendor/doctrine/annotations/docs/en/sidebar.rst b/vendor/doctrine/annotations/docs/en/sidebar.rst new file mode 100644 index 0000000..6f5d13c --- /dev/null +++ b/vendor/doctrine/annotations/docs/en/sidebar.rst @@ -0,0 +1,6 @@ +.. toctree:: + :depth: 3 + + index + annotations + custom diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php new file mode 100644 index 0000000..750270e --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php @@ -0,0 +1,59 @@ + $data Key-value for properties to be defined in this class. + */ + final public function __construct(array $data) + { + foreach ($data as $key => $value) { + $this->$key = $value; + } + } + + /** + * Error handler for unknown property accessor in Annotation class. + * + * @param string $name Unknown property name. + * + * @throws BadMethodCallException + */ + public function __get($name) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } + + /** + * Error handler for unknown property mutator in Annotation class. + * + * @param string $name Unknown property name. + * @param mixed $value Property value. + * + * @throws BadMethodCallException + */ + public function __set($name, $value) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php new file mode 100644 index 0000000..b1f8514 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php @@ -0,0 +1,21 @@ + */ + public $value; +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php new file mode 100644 index 0000000..35d6410 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php @@ -0,0 +1,69 @@ + */ + public $value; + + /** + * Literal target declaration. + * + * @var mixed[] + */ + public $literal; + + /** + * @throws InvalidArgumentException + * + * @phpstan-param array{literal?: mixed[], value: list} $values + */ + public function __construct(array $values) + { + if (! isset($values['literal'])) { + $values['literal'] = []; + } + + foreach ($values['value'] as $var) { + if (! is_scalar($var)) { + throw new InvalidArgumentException(sprintf( + '@Enum supports only scalar values "%s" given.', + is_object($var) ? get_class($var) : gettype($var) + )); + } + } + + foreach ($values['literal'] as $key => $var) { + if (! in_array($key, $values['value'])) { + throw new InvalidArgumentException(sprintf( + 'Undefined enumerator value "%s" for literal "%s".', + $key, + $var + )); + } + } + + $this->value = $values['value']; + $this->literal = $values['literal']; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php new file mode 100644 index 0000000..ae60f7d --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php @@ -0,0 +1,43 @@ + */ + public $names; + + /** + * @throws RuntimeException + * + * @phpstan-param array{value: string|list} $values + */ + public function __construct(array $values) + { + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new RuntimeException(sprintf( + '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', + json_encode($values['value']) + )); + } + + $this->names = $values['value']; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php new file mode 100644 index 0000000..1690601 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php @@ -0,0 +1,13 @@ + */ + private static $map = [ + 'ALL' => self::TARGET_ALL, + 'CLASS' => self::TARGET_CLASS, + 'METHOD' => self::TARGET_METHOD, + 'PROPERTY' => self::TARGET_PROPERTY, + 'FUNCTION' => self::TARGET_FUNCTION, + 'ANNOTATION' => self::TARGET_ANNOTATION, + ]; + + /** @phpstan-var list */ + public $value; + + /** + * Targets as bitmask. + * + * @var int + */ + public $targets; + + /** + * Literal target declaration. + * + * @var string + */ + public $literal; + + /** + * @throws InvalidArgumentException + * + * @phpstan-param array{value?: string|list} $values + */ + public function __construct(array $values) + { + if (! isset($values['value'])) { + $values['value'] = null; + } + + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new InvalidArgumentException( + sprintf( + '@Target expects either a string value, or an array of strings, "%s" given.', + is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) + ) + ); + } + + $bitmask = 0; + foreach ($values['value'] as $literal) { + if (! isset(self::$map[$literal])) { + throw new InvalidArgumentException( + sprintf( + 'Invalid Target "%s". Available targets: [%s]', + $literal, + implode(', ', array_keys(self::$map)) + ) + ); + } + + $bitmask |= self::$map[$literal]; + } + + $this->targets = $bitmask; + $this->value = $values['value']; + $this->literal = implode(', ', $this->value); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php new file mode 100644 index 0000000..b1ea64e --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php @@ -0,0 +1,171 @@ + $available + */ + public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) + { + return new self(sprintf( + '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', + $attributeName, + $annotationName, + $context, + implode(', ', $available), + is_object($given) ? get_class($given) : $given + )); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusSaveComments() + { + return new self( + 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' + ); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusLoadComments() + { + return new self( + 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' + ); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php new file mode 100644 index 0000000..1f538ee --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php @@ -0,0 +1,389 @@ + + */ + private static $globalImports = [ + 'ignoreannotation' => Annotation\IgnoreAnnotation::class, + ]; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNamespaces = []; + + /** + * Add a new annotation to the globally ignored annotation names with regard to exception handling. + * + * @param string $name + */ + public static function addGlobalIgnoredName($name) + { + self::$globalIgnoredNames[$name] = true; + } + + /** + * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. + * + * @param string $namespace + */ + public static function addGlobalIgnoredNamespace($namespace) + { + self::$globalIgnoredNamespaces[$namespace] = true; + } + + /** + * Annotations parser. + * + * @var DocParser + */ + private $parser; + + /** + * Annotations parser used to collect parsing metadata. + * + * @var DocParser + */ + private $preParser; + + /** + * PHP parser used to collect imports. + * + * @var PhpParser + */ + private $phpParser; + + /** + * In-memory cache mechanism to store imported annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $imports = []; + + /** + * In-memory cache mechanism to store ignored annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $ignoredAnnotationNames = []; + + /** + * Initializes a new AnnotationReader. + * + * @throws AnnotationException + */ + public function __construct(?DocParser $parser = null) + { + if ( + extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || + ini_get('opcache.save_comments') === '0') + ) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + // Make sure that the IgnoreAnnotation annotation is loaded + class_exists(IgnoreAnnotation::class); + + $this->parser = $parser ?: new DocParser(); + + $this->preParser = new DocParser(); + + $this->preParser->setImports(self::$globalImports); + $this->preParser->setIgnoreNotImportedAnnotations(true); + $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); + + $this->phpParser = new PhpParser(); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $this->parser->setTarget(Target::TARGET_CLASS); + $this->parser->setImports($this->getImports($class)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $context = 'property ' . $class->getName() . '::$' . $property->getName(); + + $this->parser->setTarget(Target::TARGET_PROPERTY); + $this->parser->setImports($this->getPropertyImports($property)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($property->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; + + $this->parser->setTarget(Target::TARGET_METHOD); + $this->parser->setImports($this->getMethodImports($method)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($method->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Gets the annotations applied to a function. + * + * @phpstan-return list An array of Annotations. + */ + public function getFunctionAnnotations(ReflectionFunction $function): array + { + $context = 'function ' . $function->getName(); + + $this->parser->setTarget(Target::TARGET_FUNCTION); + $this->parser->setImports($this->getImports($function)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($function->getDocComment(), $context); + } + + /** + * Gets a function annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) + { + $annotations = $this->getFunctionAnnotations($function); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Returns the ignored annotations for the given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getIgnoredAnnotationNames($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->ignoredAnnotationNames[$type][$name])) { + return $this->ignoredAnnotationNames[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->ignoredAnnotationNames[$type][$name]; + } + + /** + * Retrieves imports for a class or a function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getImports($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->imports[$type][$name])) { + return $this->imports[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->imports[$type][$name]; + } + + /** + * Retrieves imports for methods. + * + * @return array + */ + private function getMethodImports(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if ( + ! $trait->hasMethod($method->getName()) + || $trait->getFileName() !== $method->getFileName() + ) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Retrieves imports for properties. + * + * @return array + */ + private function getPropertyImports(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if (! $trait->hasProperty($property->getName())) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Collects parsing metadata for a given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + */ + private function collectParsingMetadata($reflection): void + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + $ignoredAnnotationNames = self::$globalIgnoredNames; + $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); + + foreach ($annotations as $annotation) { + if (! ($annotation instanceof IgnoreAnnotation)) { + continue; + } + + foreach ($annotation->names as $annot) { + $ignoredAnnotationNames[$annot] = true; + } + } + + $this->imports[$type][$name] = array_merge( + self::$globalImports, + $this->phpParser->parseUseStatements($reflection), + [ + '__NAMESPACE__' => $reflection->getNamespaceName(), + 'self' => $name, + ] + ); + + $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php new file mode 100644 index 0000000..259d497 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php @@ -0,0 +1,190 @@ +|null $dirs + */ + public static function registerAutoloadNamespace(string $namespace, $dirs = null): void + { + self::$autoloadNamespaces[$namespace] = $dirs; + } + + /** + * Registers multiple namespaces. + * + * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + * + * @param string[][]|string[]|null[] $namespaces indexed by namespace name + */ + public static function registerAutoloadNamespaces(array $namespaces): void + { + self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); + } + + /** + * Registers an autoloading callable for annotations, much like spl_autoload_register(). + * + * NOTE: These class loaders HAVE to be silent when a class was not found! + * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerLoader(callable $callable): void + { + // Reset our static cache now that we have a new loader to work with + self::$failedToAutoload = []; + self::$loaders[] = $callable; + } + + /** + * Registers an autoloading callable for annotations, if it is not already registered + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerUniqueLoader(callable $callable): void + { + if (in_array($callable, self::$loaders, true)) { + return; + } + + self::registerLoader($callable); + } + + /** + * Autoloads an annotation class silently. + */ + public static function loadAnnotationClass(string $class): bool + { + if (class_exists($class, false)) { + return true; + } + + if (array_key_exists($class, self::$failedToAutoload)) { + return false; + } + + foreach (self::$autoloadNamespaces as $namespace => $dirs) { + if (strpos($class, $namespace) !== 0) { + continue; + } + + $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; + + if ($dirs === null) { + $path = stream_resolve_include_path($file); + if ($path) { + require $path; + + return true; + } + } else { + foreach ((array) $dirs as $dir) { + if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { + require $dir . DIRECTORY_SEPARATOR . $file; + + return true; + } + } + } + } + + foreach (self::$loaders as $loader) { + if ($loader($class) === true) { + return true; + } + } + + if ( + self::$loaders === [] && + self::$autoloadNamespaces === [] && + self::$registerFileUsed === false && + class_exists($class) + ) { + return true; + } + + self::$failedToAutoload[$class] = null; + + return false; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php new file mode 100644 index 0000000..c036b2d --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php @@ -0,0 +1,268 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + /** + * @param bool $debug + */ + public function __construct(Reader $reader, Cache $cache, $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getClassAnnotations($class); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getPropertyAnnotations($property); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getMethodAnnotations($method); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** + * Fetches a value from the cache. + * + * @param string $cacheKey The cache key. + * + * @return mixed The cached value or false when the value is not in cache. + */ + private function fetchFromCache($cacheKey, ReflectionClass $class) + { + $data = $this->cache->fetch($cacheKey); + if ($data !== false) { + if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { + return $data; + } + } + + return false; + } + + /** + * Saves a value to the cache. + * + * @param string $cacheKey The cache key. + * @param mixed $value The value. + * + * @return void + */ + private function saveToCache($cacheKey, $value) + { + $this->cache->save($cacheKey, $value); + if (! $this->debug) { + return; + } + + $this->cache->save('[C]' . $cacheKey, time()); + } + + /** + * Checks if the cache is fresh. + * + * @param string $cacheKey + * + * @return bool + */ + private function isCacheFresh($cacheKey, ReflectionClass $class) + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php new file mode 100644 index 0000000..f6567c5 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php @@ -0,0 +1,129 @@ += 100 + public const T_IDENTIFIER = 100; + public const T_AT = 101; + public const T_CLOSE_CURLY_BRACES = 102; + public const T_CLOSE_PARENTHESIS = 103; + public const T_COMMA = 104; + public const T_EQUALS = 105; + public const T_FALSE = 106; + public const T_NAMESPACE_SEPARATOR = 107; + public const T_OPEN_CURLY_BRACES = 108; + public const T_OPEN_PARENTHESIS = 109; + public const T_TRUE = 110; + public const T_NULL = 111; + public const T_COLON = 112; + public const T_MINUS = 113; + + /** @var array */ + protected $noCase = [ + '@' => self::T_AT, + ',' => self::T_COMMA, + '(' => self::T_OPEN_PARENTHESIS, + ')' => self::T_CLOSE_PARENTHESIS, + '{' => self::T_OPEN_CURLY_BRACES, + '}' => self::T_CLOSE_CURLY_BRACES, + '=' => self::T_EQUALS, + ':' => self::T_COLON, + '-' => self::T_MINUS, + '\\' => self::T_NAMESPACE_SEPARATOR, + ]; + + /** @var array */ + protected $withCase = [ + 'true' => self::T_TRUE, + 'false' => self::T_FALSE, + 'null' => self::T_NULL, + ]; + + /** + * Whether the next token starts immediately, or if there were + * non-captured symbols before that + */ + public function nextTokenIsAdjacent(): bool + { + return $this->token === null + || ($this->lookahead !== null + && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); + } + + /** + * {@inheritdoc} + */ + protected function getCatchablePatterns() + { + return [ + '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', + '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', + '"(?:""|[^"])*+"', + ]; + } + + /** + * {@inheritdoc} + */ + protected function getNonCatchablePatterns() + { + return ['\s+', '\*+', '(.)']; + } + + /** + * {@inheritdoc} + */ + protected function getType(&$value) + { + $type = self::T_NONE; + + if ($value[0] === '"') { + $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); + + return self::T_STRING; + } + + if (isset($this->noCase[$value])) { + return $this->noCase[$value]; + } + + if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { + return self::T_IDENTIFIER; + } + + $lowerValue = strtolower($value); + + if (isset($this->withCase[$lowerValue])) { + return $this->withCase[$lowerValue]; + } + + // Checking numeric value + if (is_numeric($value)) { + return strpos($value, '.') !== false || stripos($value, 'e') !== false + ? self::T_FLOAT : self::T_INTEGER; + } + + return $type; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php new file mode 100644 index 0000000..ae530c5 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php @@ -0,0 +1,1459 @@ + + */ + private static $classIdentifiers = [ + DocLexer::T_IDENTIFIER, + DocLexer::T_TRUE, + DocLexer::T_FALSE, + DocLexer::T_NULL, + ]; + + /** + * The lexer. + * + * @var DocLexer + */ + private $lexer; + + /** + * Current target context. + * + * @var int + */ + private $target; + + /** + * Doc parser used to collect annotation target. + * + * @var DocParser + */ + private static $metadataParser; + + /** + * Flag to control if the current annotation is nested or not. + * + * @var bool + */ + private $isNestedAnnotation = false; + + /** + * Hashmap containing all use-statements that are to be used when parsing + * the given doc block. + * + * @var array + */ + private $imports = []; + + /** + * This hashmap is used internally to cache results of class_exists() + * look-ups. + * + * @var array + */ + private $classExists = []; + + /** + * Whether annotations that have not been imported should be ignored. + * + * @var bool + */ + private $ignoreNotImportedAnnotations = false; + + /** + * An array of default namespaces if operating in simple mode. + * + * @var string[] + */ + private $namespaces = []; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names must be the raw names as used in the class, not the fully qualified + * + * @var bool[] indexed by annotation name + */ + private $ignoredAnnotationNames = []; + + /** + * A list with annotations in namespaced format + * that are not causing exceptions when not resolved to an annotation class. + * + * @var bool[] indexed by namespace name + */ + private $ignoredAnnotationNamespaces = []; + + /** @var string */ + private $context = ''; + + /** + * Hash-map for caching annotation metadata. + * + * @var array + */ + private static $annotationMetadata = [ + Annotation\Target::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'properties' => [], + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'attribute_types' => [ + 'value' => [ + 'required' => false, + 'type' => 'array', + 'array_type' => 'string', + 'value' => 'array', + ], + ], + ], + Annotation\Attribute::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_ANNOTATION', + 'targets' => Target::TARGET_ANNOTATION, + 'default_property' => 'name', + 'properties' => [ + 'name' => 'name', + 'type' => 'type', + 'required' => 'required', + ], + 'attribute_types' => [ + 'value' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'type' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'required' => [ + 'required' => false, + 'type' => 'boolean', + 'value' => 'boolean', + ], + ], + ], + Annotation\Attributes::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + 'array_type' => Annotation\Attribute::class, + 'value' => 'array<' . Annotation\Attribute::class . '>', + ], + ], + ], + Annotation\Enum::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_PROPERTY', + 'targets' => Target::TARGET_PROPERTY, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + ], + 'literal' => [ + 'type' => 'array', + 'required' => false, + ], + ], + ], + Annotation\NamedArgumentConstructor::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => null, + 'properties' => [], + 'attribute_types' => [], + ], + ]; + + /** + * Hash-map for handle types declaration. + * + * @var array + */ + private static $typeMap = [ + 'float' => 'double', + 'bool' => 'boolean', + // allow uppercase Boolean in honor of George Boole + 'Boolean' => 'boolean', + 'int' => 'integer', + ]; + + /** + * Constructs a new DocParser. + */ + public function __construct() + { + $this->lexer = new DocLexer(); + } + + /** + * Sets the annotation names that are ignored during the parsing process. + * + * The names are supposed to be the raw names as used in the class, not the + * fully qualified class names. + * + * @param bool[] $names indexed by annotation name + * + * @return void + */ + public function setIgnoredAnnotationNames(array $names) + { + $this->ignoredAnnotationNames = $names; + } + + /** + * Sets the annotation namespaces that are ignored during the parsing process. + * + * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name + * + * @return void + */ + public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) + { + $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; + } + + /** + * Sets ignore on not-imported annotations. + * + * @param bool $bool + * + * @return void + */ + public function setIgnoreNotImportedAnnotations($bool) + { + $this->ignoreNotImportedAnnotations = (bool) $bool; + } + + /** + * Sets the default namespaces. + * + * @param string $namespace + * + * @return void + * + * @throws RuntimeException + */ + public function addNamespace($namespace) + { + if ($this->imports) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->namespaces[] = $namespace; + } + + /** + * Sets the imports. + * + * @param array $imports + * + * @return void + * + * @throws RuntimeException + */ + public function setImports(array $imports) + { + if ($this->namespaces) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->imports = $imports; + } + + /** + * Sets current target context as bitmask. + * + * @param int $target + * + * @return void + */ + public function setTarget($target) + { + $this->target = $target; + } + + /** + * Parses the given docblock string for annotations. + * + * @param string $input The docblock string to parse. + * @param string $context The parsing context. + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. + */ + public function parse($input, $context = '') + { + $pos = $this->findInitialTokenPosition($input); + if ($pos === null) { + return []; + } + + $this->context = $context; + + $this->lexer->setInput(trim(substr($input, $pos), '* /')); + $this->lexer->moveNext(); + + return $this->Annotations(); + } + + /** + * Finds the first valid annotation + * + * @param string $input The docblock string to parse + */ + private function findInitialTokenPosition($input): ?int + { + $pos = 0; + + // search for first valid annotation + while (($pos = strpos($input, '@', $pos)) !== false) { + $preceding = substr($input, $pos - 1, 1); + + // if the @ is preceded by a space, a tab or * it is valid + if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { + return $pos; + } + + $pos++; + } + + return null; + } + + /** + * Attempts to match the given token with the current lookahead token. + * If they match, updates the lookahead token; otherwise raises a syntax error. + * + * @param int $token Type of token. + * + * @return bool True if tokens match; false otherwise. + * + * @throws AnnotationException + */ + private function match(int $token): bool + { + if (! $this->lexer->isNextToken($token)) { + throw $this->syntaxError($this->lexer->getLiteral($token)); + } + + return $this->lexer->moveNext(); + } + + /** + * Attempts to match the current lookahead token with any of the given tokens. + * + * If any of them matches, this method updates the lookahead token; otherwise + * a syntax error is raised. + * + * @throws AnnotationException + * + * @phpstan-param list $tokens + */ + private function matchAny(array $tokens): bool + { + if (! $this->lexer->isNextTokenAny($tokens)) { + throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); + } + + return $this->lexer->moveNext(); + } + + /** + * Generates a new syntax error. + * + * @param string $expected Expected string. + * @param mixed[]|null $token Optional token. + */ + private function syntaxError(string $expected, ?array $token = null): AnnotationException + { + if ($token === null) { + $token = $this->lexer->lookahead; + } + + $message = sprintf('Expected %s, got ', $expected); + $message .= $this->lexer->lookahead === null + ? 'end of string' + : sprintf("'%s' at position %s", $token['value'], $token['position']); + + if (strlen($this->context)) { + $message .= ' in ' . $this->context; + } + + $message .= '.'; + + return AnnotationException::syntaxError($message); + } + + /** + * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism + * but uses the {@link AnnotationRegistry} to load classes. + * + * @param class-string $fqcn + */ + private function classExists(string $fqcn): bool + { + if (isset($this->classExists[$fqcn])) { + return $this->classExists[$fqcn]; + } + + // first check if the class already exists, maybe loaded through another AnnotationReader + if (class_exists($fqcn, false)) { + return $this->classExists[$fqcn] = true; + } + + // final check, does this class exist? + return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); + } + + /** + * Collects parsing metadata for a given annotation class + * + * @param class-string $name The annotation name + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function collectAnnotationMetadata(string $name): void + { + if (self::$metadataParser === null) { + self::$metadataParser = new self(); + + self::$metadataParser->setIgnoreNotImportedAnnotations(true); + self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); + self::$metadataParser->setImports([ + 'enum' => Enum::class, + 'target' => Target::class, + 'attribute' => Attribute::class, + 'attributes' => Attributes::class, + 'namedargumentconstructor' => NamedArgumentConstructor::class, + ]); + + // Make sure that annotations from metadata are loaded + class_exists(Enum::class); + class_exists(Target::class); + class_exists(Attribute::class); + class_exists(Attributes::class); + class_exists(NamedArgumentConstructor::class); + } + + $class = new ReflectionClass($name); + $docComment = $class->getDocComment(); + + // Sets default values for annotation metadata + $constructor = $class->getConstructor(); + $metadata = [ + 'default_property' => null, + 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, + 'constructor_args' => [], + 'properties' => [], + 'property_types' => [], + 'attribute_types' => [], + 'targets_literal' => null, + 'targets' => Target::TARGET_ALL, + 'is_annotation' => strpos($docComment, '@Annotation') !== false, + ]; + + $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] + && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); + + // verify that the class is really meant to be an annotation + if ($metadata['is_annotation']) { + self::$metadataParser->setTarget(Target::TARGET_CLASS); + + foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { + if ($annotation instanceof Target) { + $metadata['targets'] = $annotation->targets; + $metadata['targets_literal'] = $annotation->literal; + + continue; + } + + if ($annotation instanceof NamedArgumentConstructor) { + $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; + if ($metadata['has_named_argument_constructor']) { + // choose the first argument as the default property + $metadata['default_property'] = $constructor->getParameters()[0]->getName(); + } + } + + if (! ($annotation instanceof Attributes)) { + continue; + } + + foreach ($annotation->value as $attribute) { + $this->collectAttributeTypeMetadata($metadata, $attribute); + } + } + + // if not has a constructor will inject values into public properties + if ($metadata['has_constructor'] === false) { + // collect all public properties + foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { + $metadata['properties'][$property->name] = $property->name; + + $propertyComment = $property->getDocComment(); + if ($propertyComment === false) { + continue; + } + + $attribute = new Attribute(); + + $attribute->required = (strpos($propertyComment, '@Required') !== false); + $attribute->name = $property->name; + $attribute->type = (strpos($propertyComment, '@var') !== false && + preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) + ? $matches[1] + : 'mixed'; + + $this->collectAttributeTypeMetadata($metadata, $attribute); + + // checks if the property has @Enum + if (strpos($propertyComment, '@Enum') === false) { + continue; + } + + $context = 'property ' . $class->name . '::$' . $property->name; + + self::$metadataParser->setTarget(Target::TARGET_PROPERTY); + + foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { + if (! $annotation instanceof Enum) { + continue; + } + + $metadata['enum'][$property->name]['value'] = $annotation->value; + $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) + ? $annotation->literal + : $annotation->value; + } + } + + // choose the first property as default property + $metadata['default_property'] = reset($metadata['properties']); + } elseif ($metadata['has_named_argument_constructor']) { + foreach ($constructor->getParameters() as $parameter) { + $metadata['constructor_args'][$parameter->getName()] = [ + 'position' => $parameter->getPosition(), + 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, + ]; + } + } + } + + self::$annotationMetadata[$name] = $metadata; + } + + /** + * Collects parsing metadata for a given attribute. + * + * @param mixed[] $metadata + */ + private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void + { + // handle internal type declaration + $type = self::$typeMap[$attribute->type] ?? $attribute->type; + + // handle the case if the property type is mixed + if ($type === 'mixed') { + return; + } + + // Evaluate type + $pos = strpos($type, '<'); + if ($pos !== false) { + // Checks if the property has array + $arrayType = substr($type, $pos + 1, -1); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } else { + // Checks if the property has type[] + $pos = strrpos($type, '['); + if ($pos !== false) { + $arrayType = substr($type, 0, $pos); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } + } + + $metadata['attribute_types'][$attribute->name]['type'] = $type; + $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; + $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; + } + + /** + * Annotations ::= Annotation {[ "*" ]* [Annotation]}* + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return list + */ + private function Annotations(): array + { + $annotations = []; + + while ($this->lexer->lookahead !== null) { + if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is preceded by non-catchable pattern + if ( + $this->lexer->token !== null && + $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( + $this->lexer->token['value'] + ) + ) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is followed by either a namespace separator, or + // an identifier token + $peek = $this->lexer->glimpse(); + if ( + ($peek === null) + || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( + $peek['type'], + self::$classIdentifiers, + true + )) + || $peek['position'] !== $this->lexer->lookahead['position'] + 1 + ) { + $this->lexer->moveNext(); + continue; + } + + $this->isNestedAnnotation = false; + $annot = $this->Annotation(); + if ($annot === false) { + continue; + } + + $annotations[] = $annot; + } + + return $annotations; + } + + /** + * Annotation ::= "@" AnnotationName MethodCall + * AnnotationName ::= QualifiedName | SimpleName + * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName + * NameSpacePart ::= identifier | null | false | true + * SimpleName ::= identifier | null | false | true + * + * @return object|false False if it is not a valid annotation. + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Annotation() + { + $this->match(DocLexer::T_AT); + + // check if we have an annotation + $name = $this->Identifier(); + + if ( + $this->lexer->isNextToken(DocLexer::T_MINUS) + && $this->lexer->nextTokenIsAdjacent() + ) { + // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded + return false; + } + + // only process names which are not fully qualified, yet + // fully qualified names must start with a \ + $originalName = $name; + + if ($name[0] !== '\\') { + $pos = strpos($name, '\\'); + $alias = ($pos === false) ? $name : substr($name, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + if ($this->namespaces) { + foreach ($this->namespaces as $namespace) { + if ($this->classExists($namespace . '\\' . $name)) { + $name = $namespace . '\\' . $name; + $found = true; + break; + } + } + } elseif (isset($this->imports[$loweredAlias])) { + $namespace = ltrim($this->imports[$loweredAlias], '\\'); + $name = ($pos !== false) + ? $namespace . substr($name, $pos) + : $namespace; + $found = $this->classExists($name); + } elseif ( + ! isset($this->ignoredAnnotationNames[$name]) + && isset($this->imports['__NAMESPACE__']) + && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) + ) { + $name = $this->imports['__NAMESPACE__'] . '\\' . $name; + $found = true; + } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { + $found = true; + } + + if (! $found) { + if ($this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? +EXCEPTION + , + $name, + $this->context + )); + } + } + + $name = ltrim($name, '\\'); + + if (! $this->classExists($name)) { + throw AnnotationException::semanticalError(sprintf( + 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', + $name, + $this->context + )); + } + + // at this point, $name contains the fully qualified class name of the + // annotation, and it is also guaranteed that this class exists, and + // that it is loaded + + // collects the metadata annotation only if there is not yet + if (! isset(self::$annotationMetadata[$name])) { + $this->collectAnnotationMetadata($name); + } + + // verify that the class is really meant to be an annotation and not just any ordinary class + if (self::$annotationMetadata[$name]['is_annotation'] === false) { + if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The class "%s" is not annotated with @Annotation. +Are you sure this class can be used as annotation? +If so, then you need to add @Annotation to the _class_ doc comment of "%s". +If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. +EXCEPTION + , + $name, + $name, + $originalName, + $this->context + )); + } + + //if target is nested annotation + $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; + + // Next will be nested + $this->isNestedAnnotation = true; + + //if annotation does not support current target + if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { + throw AnnotationException::semanticalError( + sprintf( + <<<'EXCEPTION' +Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. +EXCEPTION + , + $originalName, + $this->context, + self::$annotationMetadata[$name]['targets_literal'] + ) + ); + } + + $arguments = $this->MethodCall(); + $values = $this->resolvePositionalValues($arguments, $name); + + if (isset(self::$annotationMetadata[$name]['enum'])) { + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { + // checks if the attribute is a valid enumerator + if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { + throw AnnotationException::enumeratorError( + $property, + $name, + $this->context, + $enum['literal'], + $values[$property] + ); + } + } + } + + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { + if ( + $property === self::$annotationMetadata[$name]['default_property'] + && ! isset($values[$property]) && isset($values['value']) + ) { + $property = 'value'; + } + + // handle a not given attribute or null value + if (! isset($values[$property])) { + if ($type['required']) { + throw AnnotationException::requiredError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'] + ); + } + + continue; + } + + if ($type['type'] === 'array') { + // handle the case of a single value + if (! is_array($values[$property])) { + $values[$property] = [$values[$property]]; + } + + // checks if the attribute has array type declaration, such as "array" + if (isset($type['array_type'])) { + foreach ($values[$property] as $item) { + if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', + $item + ); + } + } + } + } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'], + $values[$property] + ); + } + } + + if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { + if (PHP_VERSION_ID >= 80000) { + return new $name(...$values); + } + + $positionalValues = []; + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $positionalValues[$parameter['position']] = $parameter['default']; + } + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s" +that can be set through its named arguments constructor. +Available named arguments: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) + )); + } + + $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; + } + + return new $name(...$positionalValues); + } + + // check if the annotation expects values via the constructor, + // or directly injected into public properties + if (self::$annotationMetadata[$name]['has_constructor'] === true) { + return new $name($values); + } + + $instance = new $name(); + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { + if ($property !== 'value') { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s". +Available properties: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', self::$annotationMetadata[$name]['properties']) + )); + } + + // handle the case if the property has no annotations + $property = self::$annotationMetadata[$name]['default_property']; + if (! $property) { + throw AnnotationException::creationError(sprintf( + 'The annotation @%s declared on %s does not accept any values, but got %s.', + $originalName, + $this->context, + json_encode($values) + )); + } + } + + $instance->{$property} = $value; + } + + return $instance; + } + + /** + * MethodCall ::= ["(" [Values] ")"] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function MethodCall(): array + { + $values = []; + + if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { + return $values; + } + + $this->match(DocLexer::T_OPEN_PARENTHESIS); + + if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + $values = $this->Values(); + } + + $this->match(DocLexer::T_CLOSE_PARENTHESIS); + + return $values; + } + + /** + * Values ::= Array | Value {"," Value}* [","] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Values(): array + { + $values = [$this->Value()]; + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + break; + } + + $token = $this->lexer->lookahead; + $value = $this->Value(); + + $values[] = $value; + } + + $namedArguments = []; + $positionalArguments = []; + foreach ($values as $k => $value) { + if (is_object($value) && $value instanceof stdClass) { + $namedArguments[$value->name] = $value->value; + } else { + $positionalArguments[$k] = $value; + } + } + + return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; + } + + /** + * Constant ::= integer | string | float | boolean + * + * @return mixed + * + * @throws AnnotationException + */ + private function Constant() + { + $identifier = $this->Identifier(); + + if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { + [$className, $const] = explode('::', $identifier); + + $pos = strpos($className, '\\'); + $alias = ($pos === false) ? $className : substr($className, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + switch (true) { + case ! empty($this->namespaces): + foreach ($this->namespaces as $ns) { + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + break; + } + } + + break; + + case isset($this->imports[$loweredAlias]): + $found = true; + $className = ($pos !== false) + ? $this->imports[$loweredAlias] . substr($className, $pos) + : $this->imports[$loweredAlias]; + break; + + default: + if (isset($this->imports['__NAMESPACE__'])) { + $ns = $this->imports['__NAMESPACE__']; + + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + } + } + + break; + } + + if ($found) { + $identifier = $className . '::' . $const; + } + } + + /** + * Checks if identifier ends with ::class and remove the leading backslash if it exists. + */ + if ( + $this->identifierEndsWithClassConstant($identifier) && + ! $this->identifierStartsWithBackslash($identifier) + ) { + return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); + } + + if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { + return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); + } + + if (! defined($identifier)) { + throw AnnotationException::semanticalErrorConstants($identifier, $this->context); + } + + return constant($identifier); + } + + private function identifierStartsWithBackslash(string $identifier): bool + { + return $identifier[0] === '\\'; + } + + private function identifierEndsWithClassConstant(string $identifier): bool + { + return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); + } + + /** + * @return int|false + */ + private function getClassConstantPositionInIdentifier(string $identifier) + { + return stripos($identifier, '::class'); + } + + /** + * Identifier ::= string + * + * @throws AnnotationException + */ + private function Identifier(): string + { + // check if we have an annotation + if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { + throw $this->syntaxError('namespace separator or identifier'); + } + + $this->lexer->moveNext(); + + $className = $this->lexer->token['value']; + + while ( + $this->lexer->lookahead !== null && + $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + + strlen($this->lexer->token['value'])) && + $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) + ) { + $this->match(DocLexer::T_NAMESPACE_SEPARATOR); + $this->matchAny(self::$classIdentifiers); + + $className .= '\\' . $this->lexer->token['value']; + } + + return $className; + } + + /** + * Value ::= PlainValue | FieldAssignment + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Value() + { + $peek = $this->lexer->glimpse(); + + if ($peek['type'] === DocLexer::T_EQUALS) { + return $this->FieldAssignment(); + } + + return $this->PlainValue(); + } + + /** + * PlainValue ::= integer | string | float | boolean | Array | Annotation + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function PlainValue() + { + if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { + return $this->Arrayx(); + } + + if ($this->lexer->isNextToken(DocLexer::T_AT)) { + return $this->Annotation(); + } + + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + return $this->Constant(); + } + + switch ($this->lexer->lookahead['type']) { + case DocLexer::T_STRING: + $this->match(DocLexer::T_STRING); + + return $this->lexer->token['value']; + + case DocLexer::T_INTEGER: + $this->match(DocLexer::T_INTEGER); + + return (int) $this->lexer->token['value']; + + case DocLexer::T_FLOAT: + $this->match(DocLexer::T_FLOAT); + + return (float) $this->lexer->token['value']; + + case DocLexer::T_TRUE: + $this->match(DocLexer::T_TRUE); + + return true; + + case DocLexer::T_FALSE: + $this->match(DocLexer::T_FALSE); + + return false; + + case DocLexer::T_NULL: + $this->match(DocLexer::T_NULL); + + return null; + + default: + throw $this->syntaxError('PlainValue'); + } + } + + /** + * FieldAssignment ::= FieldName "=" PlainValue + * FieldName ::= identifier + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function FieldAssignment(): stdClass + { + $this->match(DocLexer::T_IDENTIFIER); + $fieldName = $this->lexer->token['value']; + + $this->match(DocLexer::T_EQUALS); + + $item = new stdClass(); + $item->name = $fieldName; + $item->value = $this->PlainValue(); + + return $item; + } + + /** + * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Arrayx(): array + { + $array = $values = []; + + $this->match(DocLexer::T_OPEN_CURLY_BRACES); + + // If the array is empty, stop parsing and return. + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + return $array; + } + + $values[] = $this->ArrayEntry(); + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + // optional trailing comma + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + break; + } + + $values[] = $this->ArrayEntry(); + } + + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + foreach ($values as $value) { + [$key, $val] = $value; + + if ($key !== null) { + $array[$key] = $val; + } else { + $array[] = $val; + } + } + + return $array; + } + + /** + * ArrayEntry ::= Value | KeyValuePair + * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant + * Key ::= string | integer | Constant + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return array{mixed, mixed} + */ + private function ArrayEntry(): array + { + $peek = $this->lexer->glimpse(); + + if ( + $peek['type'] === DocLexer::T_EQUALS + || $peek['type'] === DocLexer::T_COLON + ) { + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + $key = $this->Constant(); + } else { + $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); + $key = $this->lexer->token['value']; + } + + $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); + + return [$key, $this->PlainValue()]; + } + + return [null, $this->Value()]; + } + + /** + * Checks whether the given $name matches any ignored annotation name or namespace + */ + private function isIgnoredAnnotation(string $name): bool + { + if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { + return true; + } + + foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { + $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; + + if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { + return true; + } + } + + return false; + } + + /** + * Resolve positional arguments (without name) to named ones + * + * @param array $arguments + * + * @return array + */ + private function resolvePositionalValues(array $arguments, string $name): array + { + $positionalArguments = $arguments['positional_arguments'] ?? []; + $values = $arguments['named_arguments'] ?? []; + + if ( + self::$annotationMetadata[$name]['has_named_argument_constructor'] + && self::$annotationMetadata[$name]['default_property'] !== null + ) { + // We must ensure that we don't have positional arguments after named ones + $positions = array_keys($positionalArguments); + $lastPosition = null; + foreach ($positions as $position) { + if ( + ($lastPosition === null && $position !== 0) || + ($lastPosition !== null && $position !== $lastPosition + 1) + ) { + throw $this->syntaxError('Positional arguments after named arguments is not allowed'); + } + + $lastPosition = $position; + } + + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $position = $parameter['position']; + if (isset($values[$property]) || ! isset($positionalArguments[$position])) { + continue; + } + + $values[$property] = $positionalArguments[$position]; + } + } else { + if (count($positionalArguments) > 0 && ! isset($values['value'])) { + if (count($positionalArguments) === 1) { + $value = array_pop($positionalArguments); + } else { + $value = array_values($positionalArguments); + } + + $values['value'] = $value; + } + } + + return $values; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php new file mode 100644 index 0000000..6c6c22c --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php @@ -0,0 +1,315 @@ +> */ + private $loadedAnnotations = []; + + /** @var array */ + private $classNameHashes = []; + + /** @var int */ + private $umask; + + /** + * @param string $cacheDir + * @param bool $debug + * @param int $umask + * + * @throws InvalidArgumentException + */ + public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) + { + if (! is_int($umask)) { + throw new InvalidArgumentException(sprintf( + 'The parameter umask must be an integer, was: %s', + gettype($umask) + )); + } + + $this->reader = $reader; + $this->umask = $umask; + + if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { + throw new InvalidArgumentException(sprintf( + 'The directory "%s" does not exist and could not be created.', + $cacheDir + )); + } + + $this->dir = rtrim($cacheDir, '\\/'); + $this->debug = $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name]; + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * Saves the cache file. + * + * @param string $path + * @param mixed $data + * + * @return void + */ + private function saveCacheFile($path, $data) + { + if (! is_writable($this->dir)) { + throw new InvalidArgumentException(sprintf( + <<<'EXCEPTION' +The directory "%s" is not writable. Both the webserver and the console user need access. +You can manage access rights for multiple users with "chmod +a". +If your system does not support this, check out the acl package., +EXCEPTION + , + $this->dir + )); + } + + $tempfile = tempnam($this->dir, uniqid('', true)); + + if ($tempfile === false) { + throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); + } + + @chmod($tempfile, 0666 & (~$this->umask)); + + $written = file_put_contents( + $tempfile, + 'umask)); + + if (rename($tempfile, $path) === false) { + @unlink($tempfile); + + throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); + } + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php new file mode 100644 index 0000000..2efeb1d --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php @@ -0,0 +1,177 @@ + true, + 'Attribute' => true, + 'Attributes' => true, + /* Can we enable this? 'Enum' => true, */ + 'Required' => true, + 'Target' => true, + 'NamedArgumentConstructor' => true, + ]; + + private const WidelyUsedNonStandard = [ + 'fix' => true, + 'fixme' => true, + 'override' => true, + ]; + + private const PhpDocumentor1 = [ + 'abstract' => true, + 'access' => true, + 'code' => true, + 'deprec' => true, + 'endcode' => true, + 'exception' => true, + 'final' => true, + 'ingroup' => true, + 'inheritdoc' => true, + 'inheritDoc' => true, + 'magic' => true, + 'name' => true, + 'private' => true, + 'static' => true, + 'staticvar' => true, + 'staticVar' => true, + 'toc' => true, + 'tutorial' => true, + 'throw' => true, + ]; + + private const PhpDocumentor2 = [ + 'api' => true, + 'author' => true, + 'category' => true, + 'copyright' => true, + 'deprecated' => true, + 'example' => true, + 'filesource' => true, + 'global' => true, + 'ignore' => true, + /* Can we enable this? 'index' => true, */ + 'internal' => true, + 'license' => true, + 'link' => true, + 'method' => true, + 'package' => true, + 'param' => true, + 'property' => true, + 'property-read' => true, + 'property-write' => true, + 'return' => true, + 'see' => true, + 'since' => true, + 'source' => true, + 'subpackage' => true, + 'throws' => true, + 'todo' => true, + 'TODO' => true, + 'usedby' => true, + 'uses' => true, + 'var' => true, + 'version' => true, + ]; + + private const PHPUnit = [ + 'author' => true, + 'after' => true, + 'afterClass' => true, + 'backupGlobals' => true, + 'backupStaticAttributes' => true, + 'before' => true, + 'beforeClass' => true, + 'codeCoverageIgnore' => true, + 'codeCoverageIgnoreStart' => true, + 'codeCoverageIgnoreEnd' => true, + 'covers' => true, + 'coversDefaultClass' => true, + 'coversNothing' => true, + 'dataProvider' => true, + 'depends' => true, + 'doesNotPerformAssertions' => true, + 'expectedException' => true, + 'expectedExceptionCode' => true, + 'expectedExceptionMessage' => true, + 'expectedExceptionMessageRegExp' => true, + 'group' => true, + 'large' => true, + 'medium' => true, + 'preserveGlobalState' => true, + 'requires' => true, + 'runTestsInSeparateProcesses' => true, + 'runInSeparateProcess' => true, + 'small' => true, + 'test' => true, + 'testdox' => true, + 'testWith' => true, + 'ticket' => true, + 'uses' => true, + ]; + + private const PhpCheckStyle = ['SuppressWarnings' => true]; + + private const PhpStorm = ['noinspection' => true]; + + private const PEAR = ['package_version' => true]; + + private const PlainUML = [ + 'startuml' => true, + 'enduml' => true, + ]; + + private const Symfony = ['experimental' => true]; + + private const PhpCodeSniffer = [ + 'codingStandardsIgnoreStart' => true, + 'codingStandardsIgnoreEnd' => true, + ]; + + private const SlevomatCodingStandard = ['phpcsSuppress' => true]; + + private const Phan = ['suppress' => true]; + + private const Rector = ['noRector' => true]; + + private const StaticAnalysis = [ + // PHPStan, Psalm + 'extends' => true, + 'implements' => true, + 'template' => true, + 'use' => true, + + // Psalm + 'pure' => true, + 'immutable' => true, + ]; + + public const LIST = self::Reserved + + self::WidelyUsedNonStandard + + self::PhpDocumentor1 + + self::PhpDocumentor2 + + self::PHPUnit + + self::PhpCheckStyle + + self::PhpStorm + + self::PEAR + + self::PlainUML + + self::Symfony + + self::SlevomatCodingStandard + + self::PhpCodeSniffer + + self::Phan + + self::Rector + + self::StaticAnalysis; + + private function __construct() + { + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php new file mode 100644 index 0000000..42e7076 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php @@ -0,0 +1,100 @@ +delegate = $reader; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $annotations = []; + foreach ($this->delegate->getClassAnnotations($class) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotation) + { + return $this->delegate->getClassAnnotation($class, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $annotations = []; + foreach ($this->delegate->getMethodAnnotations($method) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotation) + { + return $this->delegate->getMethodAnnotation($method, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $annotations = []; + foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotation) + { + return $this->delegate->getPropertyAnnotation($property, $annotation); + } + + /** + * Proxies all methods to the delegate. + * + * @param string $method + * @param mixed[] $args + * + * @return mixed + */ + public function __call($method, $args) + { + return call_user_func_array([$this->delegate, $method], $args); + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php new file mode 100644 index 0000000..8af224c --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php @@ -0,0 +1,14 @@ +ReflectionClass object. + * + * @return array A list with use statements in the form (Alias => FQN). + */ + public function parseClass(ReflectionClass $class) + { + return $this->parseUseStatements($class); + } + + /** + * Parse a class or function for use statements. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @psalm-return array a list with use statements in the form (Alias => FQN). + */ + public function parseUseStatements($reflection): array + { + if (method_exists($reflection, 'getUseStatements')) { + return $reflection->getUseStatements(); + } + + $filename = $reflection->getFileName(); + + if ($filename === false) { + return []; + } + + $content = $this->getFileContent($filename, $reflection->getStartLine()); + + if ($content === null) { + return []; + } + + $namespace = preg_quote($reflection->getNamespaceName()); + $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); + $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); + } + + /** + * Gets the content of the file right up to the given line number. + * + * @param string $filename The name of the file to load. + * @param int $lineNumber The number of lines to read from file. + * + * @return string|null The content of the file or null if the file does not exist. + */ + private function getFileContent($filename, $lineNumber) + { + if (! is_file($filename)) { + return null; + } + + $content = ''; + $lineCnt = 0; + $file = new SplFileObject($filename); + while (! $file->eof()) { + if ($lineCnt++ === $lineNumber) { + break; + } + + $content .= $file->fgets(); + } + + return $content; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php new file mode 100644 index 0000000..a7099d5 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php @@ -0,0 +1,232 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + public function clearLoadedAnnotations(): void + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** @return mixed[] */ + private function fetchFromCache( + string $cacheKey, + ReflectionClass $class, + string $method, + Reflector $reflector + ): array { + $cacheKey = rawurlencode($cacheKey); + + $item = $this->cache->getItem($cacheKey); + if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { + $this->cache->save($item->set($this->delegate->{$method}($reflector))); + } + + return $item->get(); + } + + /** + * Used in debug mode to check if the cache is fresh. + * + * @return bool Returns true if the cache was fresh, or false if the class + * being read was modified since writing to the cache. + */ + private function refresh(string $cacheKey, ReflectionClass $class): bool + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + $item = $this->cache->getItem('[C]' . $cacheKey); + if ($item->isHit() && $item->get() >= $lastModification) { + return true; + } + + $this->cache->save($item->set(time())); + + return false; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php new file mode 100644 index 0000000..0663ffd --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php @@ -0,0 +1,80 @@ + An array of Annotations. + */ + public function getClassAnnotations(ReflectionClass $class); + + /** + * Gets a class annotation. + * + * @param ReflectionClass $class The ReflectionClass of the class from which + * the class annotations should be read. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName); + + /** + * Gets the annotations applied to a method. + * + * @param ReflectionMethod $method The ReflectionMethod of the method from which + * the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getMethodAnnotations(ReflectionMethod $method); + + /** + * Gets a method annotation. + * + * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName); + + /** + * Gets the annotations applied to a property. + * + * @param ReflectionProperty $property The ReflectionProperty of the property + * from which the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getPropertyAnnotations(ReflectionProperty $property); + + /** + * Gets a property annotation. + * + * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php new file mode 100644 index 0000000..8a78c11 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php @@ -0,0 +1,114 @@ +parser = new DocParser(); + $this->parser->setIgnoreNotImportedAnnotations(true); + } + + /** + * Adds a namespace in which we will look for annotations. + * + * @param string $namespace + * + * @return void + */ + public function addNamespace($namespace) + { + $this->parser->addNamespace($namespace); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + return $this->parser->parse( + $method->getDocComment(), + 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' + ); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + return $this->parser->parse( + $property->getDocComment(), + 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() + ); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } +} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php new file mode 100644 index 0000000..9605fb8 --- /dev/null +++ b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php @@ -0,0 +1,208 @@ + + */ + private $tokens; + + /** + * The number of tokens. + * + * @var int + */ + private $numTokens; + + /** + * The current array pointer. + * + * @var int + */ + private $pointer = 0; + + /** + * @param string $contents + */ + public function __construct($contents) + { + $this->tokens = token_get_all($contents); + + // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it + // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored + // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a + // docblock. If the first thing in the file is a class without a doc block this would cause calls to + // getDocBlock() on said class to return our long lost doc_comment. Argh. + // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least + // it's harmless to us. + token_get_all("numTokens = count($this->tokens); + } + + /** + * Gets the next non whitespace and non comment token. + * + * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. + * If FALSE then only whitespace and normal comments are skipped. + * + * @return mixed[]|string|null The token if exists, null otherwise. + */ + public function next($docCommentIsComment = true) + { + for ($i = $this->pointer; $i < $this->numTokens; $i++) { + $this->pointer++; + if ( + $this->tokens[$i][0] === T_WHITESPACE || + $this->tokens[$i][0] === T_COMMENT || + ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) + ) { + continue; + } + + return $this->tokens[$i]; + } + + return null; + } + + /** + * Parses a single use statement. + * + * @return array A list with all found class names for a use statement. + */ + public function parseUseStatement() + { + $groupRoot = ''; + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + while (($token = $this->next())) { + if (! $explicitAlias && $token[0] === T_STRING) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $token[0] === T_STRING) { + $alias = $token[1]; + } elseif ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + ) { + $class .= $token[1]; + + $classSplit = explode('\\', $token[1]); + $alias = $classSplit[count($classSplit) - 1]; + } elseif ($token[0] === T_NS_SEPARATOR) { + $class .= '\\'; + $alias = ''; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[strtolower($alias)] = $groupRoot . $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[strtolower($alias)] = $groupRoot . $class; + break; + } elseif ($token === '{') { + $groupRoot = $class; + $class = ''; + } elseif ($token === '}') { + continue; + } else { + break; + } + } + + return $statements; + } + + /** + * Gets all use statements. + * + * @param string $namespaceName The namespace name of the reflected class. + * + * @return array A list with all found use statements. + */ + public function parseUseStatements($namespaceName) + { + $statements = []; + while (($token = $this->next())) { + if ($token[0] === T_USE) { + $statements = array_merge($statements, $this->parseUseStatement()); + continue; + } + + if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { + continue; + } + + // Get fresh array for new namespace. This is to prevent the parser to collect the use statements + // for a previous namespace with the same name. This is the case if a namespace is defined twice + // or if a namespace with the same name is commented out. + $statements = []; + } + + return $statements; + } + + /** + * Gets the namespace. + * + * @return string The found namespace. + */ + public function parseNamespace() + { + $name = ''; + while ( + ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + )) + ) { + $name .= $token[1]; + } + + return $name; + } + + /** + * Gets the class name. + * + * @return string The found class name. + */ + public function parseClass() + { + // Namespaces and class names are tokenized the same: T_STRINGs + // separated by T_NS_SEPARATOR so we can use one function to provide + // both. + return $this->parseNamespace(); + } +} diff --git a/vendor/doctrine/lexer/LICENSE b/vendor/doctrine/lexer/LICENSE new file mode 100644 index 0000000..e8fdec4 --- /dev/null +++ b/vendor/doctrine/lexer/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2018 Doctrine Project + +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/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md new file mode 100644 index 0000000..784f2a2 --- /dev/null +++ b/vendor/doctrine/lexer/README.md @@ -0,0 +1,9 @@ +# Doctrine Lexer + +[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) + +Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. + +This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). + +https://www.doctrine-project.org/projects/lexer.html diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json new file mode 100644 index 0000000..c435647 --- /dev/null +++ b/vendor/doctrine/lexer/composer.json @@ -0,0 +1,41 @@ +{ + "name": "doctrine/lexer", + "type": "library", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "keywords": [ + "php", + "parser", + "lexer", + "annotations", + "docblock" + ], + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "autoload": { + "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } + }, + "autoload-dev": { + "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true + } +} diff --git a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php new file mode 100644 index 0000000..7e8a11d --- /dev/null +++ b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -0,0 +1,337 @@ + + */ + private $tokens = []; + + /** + * Current lexer position in input string. + * + * @var int + */ + private $position = 0; + + /** + * Current peek of current lexer position. + * + * @var int + */ + private $peek = 0; + + /** + * The next token in the input. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $lookahead; + + /** + * The last matched/seen token. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $token; + + /** + * Composed regex for input parsing. + * + * @var string|null + */ + private $regex; + + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = []; + + $this->reset(); + $this->scan($input); + } + + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } + + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } + + /** + * Resets the lexer position on the input to the given position. + * + * @param int $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } + + /** + * Retrieve the original lexer's input until a given position. + * + * @param int $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } + + /** + * Checks whether a given token matches the current lookahead. + * + * @param int|string $type + * + * @return bool + */ + public function isNextToken($type) + { + return $this->lookahead !== null && $this->lookahead['type'] === $type; + } + + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param list $types + * + * @return bool + */ + public function isNextTokenAny(array $types) + { + return $this->lookahead !== null && in_array($this->lookahead['type'], $types, true); + } + + /** + * Moves to the next token in the input string. + * + * @return bool + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = isset($this->tokens[$this->position]) + ? $this->tokens[$this->position++] : null; + + return $this->lookahead !== null; + } + + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } + + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param int|string $token + * + * @return bool + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } + + /** + * Moves the lookahead token forward. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } + + return null; + } + + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + + return $peek; + } + + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + if (! isset($this->regex)) { + $this->regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } + + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($this->regex, $input, -1, $flags); + + if ($matches === false) { + // Work around https://bugs.php.net/78122 + $matches = [[$input, 0]]; + } + + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); + + $this->tokens[] = [ + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ]; + } + } + + /** + * Gets the literal for a given token. + * + * @param int|string $token + * + * @return int|string + */ + public function getLiteral($token) + { + $className = static::class; + $reflClass = new ReflectionClass($className); + $constants = $reflClass->getConstants(); + + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } + + return $token; + } + + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } + + /** + * Lexical catchable patterns. + * + * @return string[] + */ + abstract protected function getCatchablePatterns(); + + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + abstract protected function getNonCatchablePatterns(); + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return int|string|null + */ + abstract protected function getType(&$value); +} diff --git a/vendor/doctrine/lexer/psalm.xml b/vendor/doctrine/lexer/psalm.xml new file mode 100644 index 0000000..f331e50 --- /dev/null +++ b/vendor/doctrine/lexer/psalm.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/vendor/google/protobuf/LICENSE b/vendor/google/protobuf/LICENSE new file mode 100644 index 0000000..ba32af4 --- /dev/null +++ b/vendor/google/protobuf/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, Protocol Buffers +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/google/protobuf/README.md b/vendor/google/protobuf/README.md new file mode 100644 index 0000000..3663050 --- /dev/null +++ b/vendor/google/protobuf/README.md @@ -0,0 +1,2 @@ +# protobuf-php +This repository contains only PHP files to support Composer installation. This repository is a mirror of [protobuf](https://github.com/protocolbuffers/protobuf). Any support requests, bug reports, or development contributions should be directed to that project. To install protobuf for PHP, please see https://github.com/protocolbuffers/protobuf/tree/master/php diff --git a/vendor/google/protobuf/composer.json b/vendor/google/protobuf/composer.json new file mode 100644 index 0000000..70af0a0 --- /dev/null +++ b/vendor/google/protobuf/composer.json @@ -0,0 +1,23 @@ +{ + "name": "google/protobuf", + "type": "library", + "description": "proto library for PHP", + "keywords": ["proto"], + "homepage": "https://developers.google.com/protocol-buffers/", + "license": "BSD-3-Clause", + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + } +} diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php new file mode 100644 index 0000000..fbce4bf --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php @@ -0,0 +1,30 @@ +internalAddGeneratedFile( + ' + +google/protobuf/any.protogoogle.protobuf"& +Any +type_url (  +value ( Bv +com.google.protobufBAnyProtoPZ,google.golang.org/protobuf/types/known/anypbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php new file mode 100644 index 0000000..75e0ec6 --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php @@ -0,0 +1,48 @@ +internalAddGeneratedFile( + ' + +google/protobuf/api.protogoogle.protobufgoogle/protobuf/type.proto" +Api +name ( ( +methods ( 2.google.protobuf.Method( +options ( 2.google.protobuf.Option +version ( 6 +source_context ( 2.google.protobuf.SourceContext& +mixins ( 2.google.protobuf.Mixin\' +syntax (2.google.protobuf.Syntax" +Method +name (  +request_type_url (  +request_streaming ( +response_type_url (  +response_streaming (( +options ( 2.google.protobuf.Option\' +syntax (2.google.protobuf.Syntax"# +Mixin +name (  +root ( Bv +com.google.protobufBApiProtoPZ,google.golang.org/protobuf/types/known/apipbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php new file mode 100644 index 0000000..5d8023e --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php @@ -0,0 +1,30 @@ +internalAddGeneratedFile( + ' + +google/protobuf/duration.protogoogle.protobuf"* +Duration +seconds ( +nanos (B +com.google.protobufB DurationProtoPZ1google.golang.org/protobuf/types/known/durationpbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php new file mode 100644 index 0000000..f31bcc0 --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php @@ -0,0 +1,29 @@ +internalAddGeneratedFile( + ' + + google/protobuf/field_mask.protogoogle.protobuf" + FieldMask +paths ( B +com.google.protobufBFieldMaskProtoPZ2google.golang.org/protobuf/types/known/fieldmaskpbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php new file mode 100644 index 0000000..5e42536 --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php @@ -0,0 +1,29 @@ +internalAddGeneratedFile( + ' + +google/protobuf/empty.protogoogle.protobuf" +EmptyB} +com.google.protobufB +EmptyProtoPZ.google.golang.org/protobuf/types/known/emptypbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php new file mode 100644 index 0000000..d71def9 --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php @@ -0,0 +1,279 @@ +addMessage('google.protobuf.internal.FileDescriptorSet', \Google\Protobuf\Internal\FileDescriptorSet::class) + ->repeated('file', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.FileDescriptorProto') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.FileDescriptorProto', \Google\Protobuf\Internal\FileDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('package', \Google\Protobuf\Internal\GPBType::STRING, 2) + ->repeated('dependency', \Google\Protobuf\Internal\GPBType::STRING, 3) + ->repeated('public_dependency', \Google\Protobuf\Internal\GPBType::INT32, 10) + ->repeated('weak_dependency', \Google\Protobuf\Internal\GPBType::INT32, 11) + ->repeated('message_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.DescriptorProto') + ->repeated('enum_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 5, 'google.protobuf.internal.EnumDescriptorProto') + ->repeated('service', \Google\Protobuf\Internal\GPBType::MESSAGE, 6, 'google.protobuf.internal.ServiceDescriptorProto') + ->repeated('extension', \Google\Protobuf\Internal\GPBType::MESSAGE, 7, 'google.protobuf.internal.FieldDescriptorProto') + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.FileOptions') + ->optional('source_code_info', \Google\Protobuf\Internal\GPBType::MESSAGE, 9, 'google.protobuf.internal.SourceCodeInfo') + ->optional('syntax', \Google\Protobuf\Internal\GPBType::STRING, 12) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.DescriptorProto', \Google\Protobuf\Internal\DescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->repeated('field', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.FieldDescriptorProto') + ->repeated('extension', \Google\Protobuf\Internal\GPBType::MESSAGE, 6, 'google.protobuf.internal.FieldDescriptorProto') + ->repeated('nested_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.DescriptorProto') + ->repeated('enum_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto') + ->repeated('extension_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 5, 'google.protobuf.internal.DescriptorProto.ExtensionRange') + ->repeated('oneof_decl', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.OneofDescriptorProto') + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 7, 'google.protobuf.internal.MessageOptions') + ->repeated('reserved_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 9, 'google.protobuf.internal.DescriptorProto.ReservedRange') + ->repeated('reserved_name', \Google\Protobuf\Internal\GPBType::STRING, 10) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.DescriptorProto.ExtensionRange', \Google\Protobuf\Internal\DescriptorProto\ExtensionRange::class) + ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) + ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.ExtensionRangeOptions') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.DescriptorProto.ReservedRange', \Google\Protobuf\Internal\DescriptorProto\ReservedRange::class) + ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) + ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.ExtensionRangeOptions', \Google\Protobuf\Internal\ExtensionRangeOptions::class) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.FieldDescriptorProto', \Google\Protobuf\Internal\FieldDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('number', \Google\Protobuf\Internal\GPBType::INT32, 3) + ->optional('label', \Google\Protobuf\Internal\GPBType::ENUM, 4, 'google.protobuf.internal.FieldDescriptorProto.Label') + ->optional('type', \Google\Protobuf\Internal\GPBType::ENUM, 5, 'google.protobuf.internal.FieldDescriptorProto.Type') + ->optional('type_name', \Google\Protobuf\Internal\GPBType::STRING, 6) + ->optional('extendee', \Google\Protobuf\Internal\GPBType::STRING, 2) + ->optional('default_value', \Google\Protobuf\Internal\GPBType::STRING, 7) + ->optional('oneof_index', \Google\Protobuf\Internal\GPBType::INT32, 9) + ->optional('json_name', \Google\Protobuf\Internal\GPBType::STRING, 10) + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.FieldOptions') + ->optional('proto3_optional', \Google\Protobuf\Internal\GPBType::BOOL, 17) + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Type', \Google\Protobuf\Internal\Type::class) + ->value("TYPE_DOUBLE", 1) + ->value("TYPE_FLOAT", 2) + ->value("TYPE_INT64", 3) + ->value("TYPE_UINT64", 4) + ->value("TYPE_INT32", 5) + ->value("TYPE_FIXED64", 6) + ->value("TYPE_FIXED32", 7) + ->value("TYPE_BOOL", 8) + ->value("TYPE_STRING", 9) + ->value("TYPE_GROUP", 10) + ->value("TYPE_MESSAGE", 11) + ->value("TYPE_BYTES", 12) + ->value("TYPE_UINT32", 13) + ->value("TYPE_ENUM", 14) + ->value("TYPE_SFIXED32", 15) + ->value("TYPE_SFIXED64", 16) + ->value("TYPE_SINT32", 17) + ->value("TYPE_SINT64", 18) + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Label', \Google\Protobuf\Internal\Label::class) + ->value("LABEL_OPTIONAL", 1) + ->value("LABEL_REQUIRED", 2) + ->value("LABEL_REPEATED", 3) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.OneofDescriptorProto', \Google\Protobuf\Internal\OneofDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.OneofOptions') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.EnumDescriptorProto', \Google\Protobuf\Internal\EnumDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->repeated('value', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.EnumValueDescriptorProto') + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumOptions') + ->repeated('reserved_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto.EnumReservedRange') + ->repeated('reserved_name', \Google\Protobuf\Internal\GPBType::STRING, 5) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.EnumDescriptorProto.EnumReservedRange', \Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange::class) + ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) + ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.EnumValueDescriptorProto', \Google\Protobuf\Internal\EnumValueDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('number', \Google\Protobuf\Internal\GPBType::INT32, 2) + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumValueOptions') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.ServiceDescriptorProto', \Google\Protobuf\Internal\ServiceDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->repeated('method', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.MethodDescriptorProto') + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.ServiceOptions') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.MethodDescriptorProto', \Google\Protobuf\Internal\MethodDescriptorProto::class) + ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('input_type', \Google\Protobuf\Internal\GPBType::STRING, 2) + ->optional('output_type', \Google\Protobuf\Internal\GPBType::STRING, 3) + ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.MethodOptions') + ->optional('client_streaming', \Google\Protobuf\Internal\GPBType::BOOL, 5) + ->optional('server_streaming', \Google\Protobuf\Internal\GPBType::BOOL, 6) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.FileOptions', \Google\Protobuf\Internal\FileOptions::class) + ->optional('java_package', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->optional('java_outer_classname', \Google\Protobuf\Internal\GPBType::STRING, 8) + ->optional('java_multiple_files', \Google\Protobuf\Internal\GPBType::BOOL, 10) + ->optional('java_generate_equals_and_hash', \Google\Protobuf\Internal\GPBType::BOOL, 20) + ->optional('java_string_check_utf8', \Google\Protobuf\Internal\GPBType::BOOL, 27) + ->optional('optimize_for', \Google\Protobuf\Internal\GPBType::ENUM, 9, 'google.protobuf.internal.FileOptions.OptimizeMode') + ->optional('go_package', \Google\Protobuf\Internal\GPBType::STRING, 11) + ->optional('cc_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 16) + ->optional('java_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 17) + ->optional('py_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 18) + ->optional('php_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 42) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 23) + ->optional('cc_enable_arenas', \Google\Protobuf\Internal\GPBType::BOOL, 31) + ->optional('objc_class_prefix', \Google\Protobuf\Internal\GPBType::STRING, 36) + ->optional('csharp_namespace', \Google\Protobuf\Internal\GPBType::STRING, 37) + ->optional('swift_prefix', \Google\Protobuf\Internal\GPBType::STRING, 39) + ->optional('php_class_prefix', \Google\Protobuf\Internal\GPBType::STRING, 40) + ->optional('php_namespace', \Google\Protobuf\Internal\GPBType::STRING, 41) + ->optional('php_metadata_namespace', \Google\Protobuf\Internal\GPBType::STRING, 44) + ->optional('ruby_package', \Google\Protobuf\Internal\GPBType::STRING, 45) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.FileOptions.OptimizeMode', \Google\Protobuf\Internal\OptimizeMode::class) + ->value("SPEED", 1) + ->value("CODE_SIZE", 2) + ->value("LITE_RUNTIME", 3) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.MessageOptions', \Google\Protobuf\Internal\MessageOptions::class) + ->optional('message_set_wire_format', \Google\Protobuf\Internal\GPBType::BOOL, 1) + ->optional('no_standard_descriptor_accessor', \Google\Protobuf\Internal\GPBType::BOOL, 2) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) + ->optional('map_entry', \Google\Protobuf\Internal\GPBType::BOOL, 7) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.FieldOptions', \Google\Protobuf\Internal\FieldOptions::class) + ->optional('ctype', \Google\Protobuf\Internal\GPBType::ENUM, 1, 'google.protobuf.internal.FieldOptions.CType') + ->optional('packed', \Google\Protobuf\Internal\GPBType::BOOL, 2) + ->optional('jstype', \Google\Protobuf\Internal\GPBType::ENUM, 6, 'google.protobuf.internal.FieldOptions.JSType') + ->optional('lazy', \Google\Protobuf\Internal\GPBType::BOOL, 5) + ->optional('unverified_lazy', \Google\Protobuf\Internal\GPBType::BOOL, 15) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) + ->optional('weak', \Google\Protobuf\Internal\GPBType::BOOL, 10) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.FieldOptions.CType', \Google\Protobuf\Internal\CType::class) + ->value("STRING", 0) + ->value("CORD", 1) + ->value("STRING_PIECE", 2) + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.FieldOptions.JSType', \Google\Protobuf\Internal\JSType::class) + ->value("JS_NORMAL", 0) + ->value("JS_STRING", 1) + ->value("JS_NUMBER", 2) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.OneofOptions', \Google\Protobuf\Internal\OneofOptions::class) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.EnumOptions', \Google\Protobuf\Internal\EnumOptions::class) + ->optional('allow_alias', \Google\Protobuf\Internal\GPBType::BOOL, 2) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.EnumValueOptions', \Google\Protobuf\Internal\EnumValueOptions::class) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 1) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.ServiceOptions', \Google\Protobuf\Internal\ServiceOptions::class) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 33) + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.MethodOptions', \Google\Protobuf\Internal\MethodOptions::class) + ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 33) + ->optional('idempotency_level', \Google\Protobuf\Internal\GPBType::ENUM, 34, 'google.protobuf.internal.MethodOptions.IdempotencyLevel') + ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') + ->finalizeToPool(); + + $pool->addEnum('google.protobuf.internal.MethodOptions.IdempotencyLevel', \Google\Protobuf\Internal\IdempotencyLevel::class) + ->value("IDEMPOTENCY_UNKNOWN", 0) + ->value("NO_SIDE_EFFECTS", 1) + ->value("IDEMPOTENT", 2) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.UninterpretedOption', \Google\Protobuf\Internal\UninterpretedOption::class) + ->repeated('name', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.UninterpretedOption.NamePart') + ->optional('identifier_value', \Google\Protobuf\Internal\GPBType::STRING, 3) + ->optional('positive_int_value', \Google\Protobuf\Internal\GPBType::UINT64, 4) + ->optional('negative_int_value', \Google\Protobuf\Internal\GPBType::INT64, 5) + ->optional('double_value', \Google\Protobuf\Internal\GPBType::DOUBLE, 6) + ->optional('string_value', \Google\Protobuf\Internal\GPBType::BYTES, 7) + ->optional('aggregate_value', \Google\Protobuf\Internal\GPBType::STRING, 8) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.UninterpretedOption.NamePart', \Google\Protobuf\Internal\UninterpretedOption\NamePart::class) + ->required('name_part', \Google\Protobuf\Internal\GPBType::STRING, 1) + ->required('is_extension', \Google\Protobuf\Internal\GPBType::BOOL, 2) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.SourceCodeInfo', \Google\Protobuf\Internal\SourceCodeInfo::class) + ->repeated('location', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.SourceCodeInfo.Location') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.SourceCodeInfo.Location', \Google\Protobuf\Internal\SourceCodeInfo\Location::class) + ->repeated('path', \Google\Protobuf\Internal\GPBType::INT32, 1) + ->repeated('span', \Google\Protobuf\Internal\GPBType::INT32, 2) + ->optional('leading_comments', \Google\Protobuf\Internal\GPBType::STRING, 3) + ->optional('trailing_comments', \Google\Protobuf\Internal\GPBType::STRING, 4) + ->repeated('leading_detached_comments', \Google\Protobuf\Internal\GPBType::STRING, 6) + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo', \Google\Protobuf\Internal\GeneratedCodeInfo::class) + ->repeated('annotation', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.GeneratedCodeInfo.Annotation') + ->finalizeToPool(); + + $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo.Annotation', \Google\Protobuf\Internal\GeneratedCodeInfo\Annotation::class) + ->repeated('path', \Google\Protobuf\Internal\GPBType::INT32, 1) + ->optional('source_file', \Google\Protobuf\Internal\GPBType::STRING, 2) + ->optional('begin', \Google\Protobuf\Internal\GPBType::INT32, 3) + ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 4) + ->finalizeToPool(); + + $pool->finish(); + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php new file mode 100644 index 0000000..797732d --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php @@ -0,0 +1,29 @@ +internalAddGeneratedFile( + ' + +$google/protobuf/source_context.protogoogle.protobuf"" + SourceContext + file_name ( B +com.google.protobufBSourceContextProtoPZ6google.golang.org/protobuf/types/known/sourcecontextpbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php new file mode 100644 index 0000000000000000000000000000000000000000..888a81adee4075a2c04ab9805212f7c132174f4e GIT binary patch literal 1162 zcmaJ=(M}UV6lGgzQ;!NdTewO7|)&oBt2tsL<2@T zz1BNs=#UyZ=vd95mo`JqCO{x)9FzA}3txfYCrW(50}>l*@N1RF$6Rv5so-DG?-m(R z5i^udaz}{_3|Eq*f&&?_+B(Tl^zZ{scC-*sSNFu~>rc4XX zHd!%tqM$^ayeYyfY}0eA4A1n^GxQ(&A>a|tP%-T@(oR9VVJwqj^3_Yd8e;GC7h{g3&sXog* zuaW=TaekD_n9`r62OXPF?;@Yx2PVYZl-*B-e#M4+W3AZ7r`eicO2xH_u*_`v&*2>4 EFWv=fg#Z8m literal 0 HcmV?d00001 diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php new file mode 100644 index 0000000..0943727 --- /dev/null +++ b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php @@ -0,0 +1,30 @@ +internalAddGeneratedFile( + ' + +google/protobuf/timestamp.protogoogle.protobuf"+ + Timestamp +seconds ( +nanos (B +com.google.protobufBTimestampProtoPZ2google.golang.org/protobuf/types/known/timestamppbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php new file mode 100644 index 0000000000000000000000000000000000000000..7d0bfbb533a2af7e63c43fd4b02e5bf41c61ac3c GIT binary patch literal 2205 zcmb7FTTkOw5N@vE2?S%dU5iSq(<~}sRe}_%trSYDgqSD-;xuu(%PLaj*e6*RV_UY< zlCJnEed%L=NuT;w^{@1?bB@<-+OO8cupGBp}rnclMJUMd`pSv zyP<2iHW^MvBkB{wz4k1d`Xxf@Dru=2QR+?Y3#10_#5ZV#j9qtZ(*sUK(m^=&Xo-IT zIQlgWJl&wA(XL(4P&f5Z?>9K3-)63maRgx4dJqr|neYw>{&|z3Z5bp8^$>q{tYBa{ zR%q$A^()4DOh&pLP$Vv6M-#^gE!QE8pgIOE?vcnQ!|r%4=5|aLW9T=Xkot~p_v|JQ${ zLj9^UtyJz4y5~R2>hcbqxR}~a_+dV;$NqQLUG`PejFUaZwin~@Sg^bB+Zt>?+;3?k z(na0J&Tj84f}^1s7*R|Su<%a;(yaH=8l>68$O)1t3euO59a+>i135`j#a#Kb(t`QY zDN{>%$hr=7M}eF|oFElp#r4<-1ag`apDqzqu9sdyem)>MgPwEcXG?^+QcC?@$Ocm< z)NkZ067uC`4_&S<{GEYJ6y+YIuPn#px#i2BFL~go(iuXeZy;yrzG>k&THzG4XD$j4 zFi!4~tP;-TdPse&M5369>zT$cK@wq=?dD+O+dOPR+JYRf94?nhZ{!tDLL<1bSJaeO z@q2Z)oWkSf+yvpLz;y<^hroS)3hO2v=@UB~{H)s(D(9HE@MjXzJXI0aw9B?K=(WyT z>Z_LciL?PZE~%@%+PNYoFe%`I({r_|iOKl8+0tHqEv8~ZFA}6@0f%KVgLy|jPMfcl zI#ROp62z=X>mYC^HB~(qS7V!9t=%~H62(g6=rQ5AG6fqYgYL}YQ71v@D zEG%@f9=lLly$dlfZNfVD*yUj%Vq-ysk&3aEZe(S1PJjrh5JGNt1fIgyNwrgNwyNh% z?Q*8BGCY}8sBNvOA_xn-py?<-^qL)|j-_7Gw3VucnpEL0Tv-KYEgrFGW%og#D2-Yj zZSD5b+%n#eY#3%oi>+?%1AFw~rm~s-Uz^HS`;krUf^Z+${6loVR%{hBA0Kw%2(otx z%v*d8nfEnfSv*;)5kB}YN|23S5jGgz%a&GsJ!p4SO)cY^EQk)pMC~1H;k8~gRTJ3L z%5QBu@n-+-2_3t(?u<*WKb}9_!NHZ|{^IZ>?hXGinternalAddGeneratedFile( + ' + +google/protobuf/wrappers.protogoogle.protobuf" + DoubleValue +value (" + +FloatValue +value (" + +Int64Value +value (" + UInt64Value +value (" + +Int32Value +value (" + UInt32Value +value ( " + BoolValue +value (" + StringValue +value ( " + +BytesValue +value ( B +com.google.protobufB WrappersProtoPZ1google.golang.org/protobuf/types/known/wrapperspbGPBGoogle.Protobuf.WellKnownTypesbproto3' + , true); + + static::$is_initialized = true; + } +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Any.php b/vendor/google/protobuf/src/Google/Protobuf/Any.php new file mode 100644 index 0000000..cc64bad --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Any.php @@ -0,0 +1,253 @@ +, + * "lastName": + * } + * If the embedded message type is well-known and has a custom JSON + * representation, that representation will be embedded adding a field + * `value` which holds the custom JSON in addition to the `@type` + * field. Example (for message [google.protobuf.Duration][]): + * { + * "@type": "type.googleapis.com/google.protobuf.Duration", + * "value": "1.212s" + * } + * + * Generated from protobuf message google.protobuf.Any + */ +class Any extends \Google\Protobuf\Internal\AnyBase +{ + /** + * A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * `path/google.protobuf.Duration`). The name should be in a canonical form + * (e.g., leading "." is not accepted). + * In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme `http`, `https`, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows: + * * If no scheme is provided, `https` is assumed. + * * An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error. + * * Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.) + * Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. + * Schemes other than `http`, `https` (or the empty scheme) might be + * used with implementation specific semantics. + * + * Generated from protobuf field string type_url = 1; + */ + protected $type_url = ''; + /** + * Must be a valid serialized protocol buffer of the above specified type. + * + * Generated from protobuf field bytes value = 2; + */ + protected $value = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $type_url + * A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * `path/google.protobuf.Duration`). The name should be in a canonical form + * (e.g., leading "." is not accepted). + * In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme `http`, `https`, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows: + * * If no scheme is provided, `https` is assumed. + * * An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error. + * * Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.) + * Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. + * Schemes other than `http`, `https` (or the empty scheme) might be + * used with implementation specific semantics. + * @type string $value + * Must be a valid serialized protocol buffer of the above specified type. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Any::initOnce(); + parent::__construct($data); + } + + /** + * A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * `path/google.protobuf.Duration`). The name should be in a canonical form + * (e.g., leading "." is not accepted). + * In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme `http`, `https`, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows: + * * If no scheme is provided, `https` is assumed. + * * An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error. + * * Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.) + * Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. + * Schemes other than `http`, `https` (or the empty scheme) might be + * used with implementation specific semantics. + * + * Generated from protobuf field string type_url = 1; + * @return string + */ + public function getTypeUrl() + { + return $this->type_url; + } + + /** + * A URL/resource name that uniquely identifies the type of the serialized + * protocol buffer message. This string must contain at least + * one "/" character. The last segment of the URL's path must represent + * the fully qualified name of the type (as in + * `path/google.protobuf.Duration`). The name should be in a canonical form + * (e.g., leading "." is not accepted). + * In practice, teams usually precompile into the binary all types that they + * expect it to use in the context of Any. However, for URLs which use the + * scheme `http`, `https`, or no scheme, one can optionally set up a type + * server that maps type URLs to message definitions as follows: + * * If no scheme is provided, `https` is assumed. + * * An HTTP GET on the URL must yield a [google.protobuf.Type][] + * value in binary format, or produce an error. + * * Applications are allowed to cache lookup results based on the + * URL, or have them precompiled into a binary to avoid any + * lookup. Therefore, binary compatibility needs to be preserved + * on changes to types. (Use versioned type names to manage + * breaking changes.) + * Note: this functionality is not currently available in the official + * protobuf release, and it is not used for type URLs beginning with + * type.googleapis.com. + * Schemes other than `http`, `https` (or the empty scheme) might be + * used with implementation specific semantics. + * + * Generated from protobuf field string type_url = 1; + * @param string $var + * @return $this + */ + public function setTypeUrl($var) + { + GPBUtil::checkString($var, True); + $this->type_url = $var; + + return $this; + } + + /** + * Must be a valid serialized protocol buffer of the above specified type. + * + * Generated from protobuf field bytes value = 2; + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * Must be a valid serialized protocol buffer of the above specified type. + * + * Generated from protobuf field bytes value = 2; + * @param string $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkString($var, False); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Api.php b/vendor/google/protobuf/src/Google/Protobuf/Api.php new file mode 100644 index 0000000..3784263 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Api.php @@ -0,0 +1,360 @@ +google.protobuf.Api + */ +class Api extends \Google\Protobuf\Internal\Message +{ + /** + * The fully qualified name of this interface, including package name + * followed by the interface's simple name. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * The methods of this interface, in unspecified order. + * + * Generated from protobuf field repeated .google.protobuf.Method methods = 2; + */ + private $methods; + /** + * Any metadata attached to the interface. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + */ + private $options; + /** + * A version string for this interface. If specified, must have the form + * `major-version.minor-version`, as in `1.10`. If the minor version is + * omitted, it defaults to zero. If the entire version field is empty, the + * major version is derived from the package name, as outlined below. If the + * field is not empty, the version in the package name will be verified to be + * consistent with what is provided here. + * The versioning schema uses [semantic + * versioning](http://semver.org) where the major version number + * indicates a breaking change and the minor version an additive, + * non-breaking change. Both version numbers are signals to users + * what to expect from different versions, and should be carefully + * chosen based on the product plan. + * The major version is also reflected in the package name of the + * interface, which must end in `v`, as in + * `google.feature.v1`. For major versions 0 and 1, the suffix can + * be omitted. Zero major versions must only be used for + * experimental, non-GA interfaces. + * + * Generated from protobuf field string version = 4; + */ + protected $version = ''; + /** + * Source context for the protocol buffer service represented by this + * message. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + */ + protected $source_context = null; + /** + * Included interfaces. See [Mixin][]. + * + * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; + */ + private $mixins; + /** + * The source syntax of the service. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + */ + protected $syntax = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * The fully qualified name of this interface, including package name + * followed by the interface's simple name. + * @type array<\Google\Protobuf\Method>|\Google\Protobuf\Internal\RepeatedField $methods + * The methods of this interface, in unspecified order. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * Any metadata attached to the interface. + * @type string $version + * A version string for this interface. If specified, must have the form + * `major-version.minor-version`, as in `1.10`. If the minor version is + * omitted, it defaults to zero. If the entire version field is empty, the + * major version is derived from the package name, as outlined below. If the + * field is not empty, the version in the package name will be verified to be + * consistent with what is provided here. + * The versioning schema uses [semantic + * versioning](http://semver.org) where the major version number + * indicates a breaking change and the minor version an additive, + * non-breaking change. Both version numbers are signals to users + * what to expect from different versions, and should be carefully + * chosen based on the product plan. + * The major version is also reflected in the package name of the + * interface, which must end in `v`, as in + * `google.feature.v1`. For major versions 0 and 1, the suffix can + * be omitted. Zero major versions must only be used for + * experimental, non-GA interfaces. + * @type \Google\Protobuf\SourceContext $source_context + * Source context for the protocol buffer service represented by this + * message. + * @type array<\Google\Protobuf\Mixin>|\Google\Protobuf\Internal\RepeatedField $mixins + * Included interfaces. See [Mixin][]. + * @type int $syntax + * The source syntax of the service. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Api::initOnce(); + parent::__construct($data); + } + + /** + * The fully qualified name of this interface, including package name + * followed by the interface's simple name. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The fully qualified name of this interface, including package name + * followed by the interface's simple name. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * The methods of this interface, in unspecified order. + * + * Generated from protobuf field repeated .google.protobuf.Method methods = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getMethods() + { + return $this->methods; + } + + /** + * The methods of this interface, in unspecified order. + * + * Generated from protobuf field repeated .google.protobuf.Method methods = 2; + * @param array<\Google\Protobuf\Method>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setMethods($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Method::class); + $this->methods = $arr; + + return $this; + } + + /** + * Any metadata attached to the interface. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * Any metadata attached to the interface. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + + /** + * A version string for this interface. If specified, must have the form + * `major-version.minor-version`, as in `1.10`. If the minor version is + * omitted, it defaults to zero. If the entire version field is empty, the + * major version is derived from the package name, as outlined below. If the + * field is not empty, the version in the package name will be verified to be + * consistent with what is provided here. + * The versioning schema uses [semantic + * versioning](http://semver.org) where the major version number + * indicates a breaking change and the minor version an additive, + * non-breaking change. Both version numbers are signals to users + * what to expect from different versions, and should be carefully + * chosen based on the product plan. + * The major version is also reflected in the package name of the + * interface, which must end in `v`, as in + * `google.feature.v1`. For major versions 0 and 1, the suffix can + * be omitted. Zero major versions must only be used for + * experimental, non-GA interfaces. + * + * Generated from protobuf field string version = 4; + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * A version string for this interface. If specified, must have the form + * `major-version.minor-version`, as in `1.10`. If the minor version is + * omitted, it defaults to zero. If the entire version field is empty, the + * major version is derived from the package name, as outlined below. If the + * field is not empty, the version in the package name will be verified to be + * consistent with what is provided here. + * The versioning schema uses [semantic + * versioning](http://semver.org) where the major version number + * indicates a breaking change and the minor version an additive, + * non-breaking change. Both version numbers are signals to users + * what to expect from different versions, and should be carefully + * chosen based on the product plan. + * The major version is also reflected in the package name of the + * interface, which must end in `v`, as in + * `google.feature.v1`. For major versions 0 and 1, the suffix can + * be omitted. Zero major versions must only be used for + * experimental, non-GA interfaces. + * + * Generated from protobuf field string version = 4; + * @param string $var + * @return $this + */ + public function setVersion($var) + { + GPBUtil::checkString($var, True); + $this->version = $var; + + return $this; + } + + /** + * Source context for the protocol buffer service represented by this + * message. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + * @return \Google\Protobuf\SourceContext|null + */ + public function getSourceContext() + { + return $this->source_context; + } + + public function hasSourceContext() + { + return isset($this->source_context); + } + + public function clearSourceContext() + { + unset($this->source_context); + } + + /** + * Source context for the protocol buffer service represented by this + * message. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + * @param \Google\Protobuf\SourceContext $var + * @return $this + */ + public function setSourceContext($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); + $this->source_context = $var; + + return $this; + } + + /** + * Included interfaces. See [Mixin][]. + * + * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getMixins() + { + return $this->mixins; + } + + /** + * Included interfaces. See [Mixin][]. + * + * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; + * @param array<\Google\Protobuf\Mixin>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setMixins($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Mixin::class); + $this->mixins = $arr; + + return $this; + } + + /** + * The source syntax of the service. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + * @return int + */ + public function getSyntax() + { + return $this->syntax; + } + + /** + * The source syntax of the service. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + * @param int $var + * @return $this + */ + public function setSyntax($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); + $this->syntax = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php b/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php new file mode 100644 index 0000000..ecdbf4d --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php @@ -0,0 +1,68 @@ +google.protobuf.BoolValue + */ +class BoolValue extends \Google\Protobuf\Internal\Message +{ + /** + * The bool value. + * + * Generated from protobuf field bool value = 1; + */ + protected $value = false; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $value + * The bool value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The bool value. + * + * Generated from protobuf field bool value = 1; + * @return bool + */ + public function getValue() + { + return $this->value; + } + + /** + * The bool value. + * + * Generated from protobuf field bool value = 1; + * @param bool $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkBool($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php b/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php new file mode 100644 index 0000000..1582e14 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php @@ -0,0 +1,68 @@ +google.protobuf.BytesValue + */ +class BytesValue extends \Google\Protobuf\Internal\Message +{ + /** + * The bytes value. + * + * Generated from protobuf field bytes value = 1; + */ + protected $value = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $value + * The bytes value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The bytes value. + * + * Generated from protobuf field bytes value = 1; + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * The bytes value. + * + * Generated from protobuf field bytes value = 1; + * @param string $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkString($var, False); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php new file mode 100644 index 0000000..36436e2 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php @@ -0,0 +1,108 @@ +internal_desc = $internal_desc; + } + + /** + * @return string Full protobuf message name + */ + public function getFullName() + { + return trim($this->internal_desc->getFullName(), "."); + } + + /** + * @return string PHP class name + */ + public function getClass() + { + return $this->internal_desc->getClass(); + } + + /** + * @param int $index Must be >= 0 and < getFieldCount() + * @return FieldDescriptor + */ + public function getField($index) + { + return $this->getPublicDescriptor($this->internal_desc->getFieldByIndex($index)); + } + + /** + * @return int Number of fields in message + */ + public function getFieldCount() + { + return count($this->internal_desc->getField()); + } + + /** + * @param int $index Must be >= 0 and < getOneofDeclCount() + * @return OneofDescriptor + */ + public function getOneofDecl($index) + { + return $this->getPublicDescriptor($this->internal_desc->getOneofDecl()[$index]); + } + + /** + * @return int Number of oneofs in message + */ + public function getOneofDeclCount() + { + return count($this->internal_desc->getOneofDecl()); + } + + /** + * @return int Number of real oneofs in message + */ + public function getRealOneofDeclCount() + { + return $this->internal_desc->getRealOneofDeclCount(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php b/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php new file mode 100644 index 0000000..119f0e2 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php @@ -0,0 +1,76 @@ +internal_pool = $internal_pool; + } + + /** + * @param string $className A fully qualified protobuf class name + * @return Descriptor + */ + public function getDescriptorByClassName($className) + { + $desc = $this->internal_pool->getDescriptorByClassName($className); + return is_null($desc) ? null : $desc->getPublicDescriptor(); + } + + /** + * @param string $className A fully qualified protobuf class name + * @return EnumDescriptor + */ + public function getEnumDescriptorByClassName($className) + { + $desc = $this->internal_pool->getEnumDescriptorByClassName($className); + return is_null($desc) ? null : $desc->getPublicDescriptor(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php b/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php new file mode 100644 index 0000000..b72399f --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php @@ -0,0 +1,68 @@ +google.protobuf.DoubleValue + */ +class DoubleValue extends \Google\Protobuf\Internal\Message +{ + /** + * The double value. + * + * Generated from protobuf field double value = 1; + */ + protected $value = 0.0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type float $value + * The double value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The double value. + * + * Generated from protobuf field double value = 1; + * @return float + */ + public function getValue() + { + return $this->value; + } + + /** + * The double value. + * + * Generated from protobuf field double value = 1; + * @param float $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkDouble($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Duration.php b/vendor/google/protobuf/src/Google/Protobuf/Duration.php new file mode 100644 index 0000000..531cd50 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Duration.php @@ -0,0 +1,173 @@ + 0) { + * duration.seconds += 1; + * duration.nanos -= 1000000000; + * } else if (duration.seconds > 0 && duration.nanos < 0) { + * duration.seconds -= 1; + * duration.nanos += 1000000000; + * } + * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. + * Timestamp start = ...; + * Duration duration = ...; + * Timestamp end = ...; + * end.seconds = start.seconds + duration.seconds; + * end.nanos = start.nanos + duration.nanos; + * if (end.nanos < 0) { + * end.seconds -= 1; + * end.nanos += 1000000000; + * } else if (end.nanos >= 1000000000) { + * end.seconds += 1; + * end.nanos -= 1000000000; + * } + * Example 3: Compute Duration from datetime.timedelta in Python. + * td = datetime.timedelta(days=3, minutes=10) + * duration = Duration() + * duration.FromTimedelta(td) + * # JSON Mapping + * In JSON format, the Duration type is encoded as a string rather than an + * object, where the string ends in the suffix "s" (indicating seconds) and + * is preceded by the number of seconds, with nanoseconds expressed as + * fractional seconds. For example, 3 seconds with 0 nanoseconds should be + * encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should + * be expressed in JSON format as "3.000000001s", and 3 seconds and 1 + * microsecond should be expressed in JSON format as "3.000001s". + * + * Generated from protobuf message google.protobuf.Duration + */ +class Duration extends \Google\Protobuf\Internal\Message +{ + /** + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + * + * Generated from protobuf field int64 seconds = 1; + */ + protected $seconds = 0; + /** + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + * + * Generated from protobuf field int32 nanos = 2; + */ + protected $nanos = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int|string $seconds + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + * @type int $nanos + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Duration::initOnce(); + parent::__construct($data); + } + + /** + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + * + * Generated from protobuf field int64 seconds = 1; + * @return int|string + */ + public function getSeconds() + { + return $this->seconds; + } + + /** + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. Note: these bounds are computed from: + * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + * + * Generated from protobuf field int64 seconds = 1; + * @param int|string $var + * @return $this + */ + public function setSeconds($var) + { + GPBUtil::checkInt64($var); + $this->seconds = $var; + + return $this; + } + + /** + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + * + * Generated from protobuf field int32 nanos = 2; + * @return int + */ + public function getNanos() + { + return $this->nanos; + } + + /** + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + * + * Generated from protobuf field int32 nanos = 2; + * @param int $var + * @return $this + */ + public function setNanos($var) + { + GPBUtil::checkInt32($var); + $this->nanos = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Enum.php b/vendor/google/protobuf/src/Google/Protobuf/Enum.php new file mode 100644 index 0000000..185e54e --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Enum.php @@ -0,0 +1,213 @@ +google.protobuf.Enum + */ +class Enum extends \Google\Protobuf\Internal\Message +{ + /** + * Enum type name. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * Enum value definitions. + * + * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; + */ + private $enumvalue; + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + */ + private $options; + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; + */ + protected $source_context = null; + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 5; + */ + protected $syntax = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * Enum type name. + * @type array<\Google\Protobuf\EnumValue>|\Google\Protobuf\Internal\RepeatedField $enumvalue + * Enum value definitions. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * Protocol buffer options. + * @type \Google\Protobuf\SourceContext $source_context + * The source context. + * @type int $syntax + * The source syntax. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Type::initOnce(); + parent::__construct($data); + } + + /** + * Enum type name. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Enum type name. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Enum value definitions. + * + * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getEnumvalue() + { + return $this->enumvalue; + } + + /** + * Enum value definitions. + * + * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; + * @param array<\Google\Protobuf\EnumValue>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setEnumvalue($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\EnumValue::class); + $this->enumvalue = $arr; + + return $this; + } + + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; + * @return \Google\Protobuf\SourceContext|null + */ + public function getSourceContext() + { + return $this->source_context; + } + + public function hasSourceContext() + { + return isset($this->source_context); + } + + public function clearSourceContext() + { + unset($this->source_context); + } + + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; + * @param \Google\Protobuf\SourceContext $var + * @return $this + */ + public function setSourceContext($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); + $this->source_context = $var; + + return $this; + } + + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 5; + * @return int + */ + public function getSyntax() + { + return $this->syntax; + } + + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 5; + * @param int $var + * @return $this + */ + public function setSyntax($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); + $this->syntax = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php new file mode 100644 index 0000000..a8b56c0 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php @@ -0,0 +1,79 @@ +internal_desc = $internal_desc; + } + + /** + * @return string Full protobuf message name + */ + public function getFullName() + { + return $this->internal_desc->getFullName(); + } + + /** + * @return string PHP class name + */ + public function getClass() + { + return $this->internal_desc->getClass(); + } + + /** + * @param int $index Must be >= 0 and < getValueCount() + * @return EnumValueDescriptor + */ + public function getValue($index) + { + return $this->internal_desc->getValueDescriptorByIndex($index); + } + + /** + * @return int Number of values in enum + */ + public function getValueCount() + { + return $this->internal_desc->getValueCount(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php b/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php new file mode 100644 index 0000000..93c20f9 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php @@ -0,0 +1,135 @@ +google.protobuf.EnumValue + */ +class EnumValue extends \Google\Protobuf\Internal\Message +{ + /** + * Enum value name. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * Enum value number. + * + * Generated from protobuf field int32 number = 2; + */ + protected $number = 0; + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + */ + private $options; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * Enum value name. + * @type int $number + * Enum value number. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * Protocol buffer options. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Type::initOnce(); + parent::__construct($data); + } + + /** + * Enum value name. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Enum value name. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Enum value number. + * + * Generated from protobuf field int32 number = 2; + * @return int + */ + public function getNumber() + { + return $this->number; + } + + /** + * Enum value number. + * + * Generated from protobuf field int32 number = 2; + * @param int $var + * @return $this + */ + public function setNumber($var) + { + GPBUtil::checkInt32($var); + $this->number = $var; + + return $this; + } + + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * Protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 3; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php new file mode 100644 index 0000000..e76e199 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php @@ -0,0 +1,64 @@ +name = $name; + $this->number = $number; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @return int + */ + public function getNumber() + { + return $this->number; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field.php b/vendor/google/protobuf/src/Google/Protobuf/Field.php new file mode 100644 index 0000000..ddae570 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Field.php @@ -0,0 +1,381 @@ +google.protobuf.Field + */ +class Field extends \Google\Protobuf\Internal\Message +{ + /** + * The field type. + * + * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; + */ + protected $kind = 0; + /** + * The field cardinality. + * + * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; + */ + protected $cardinality = 0; + /** + * The field number. + * + * Generated from protobuf field int32 number = 3; + */ + protected $number = 0; + /** + * The field name. + * + * Generated from protobuf field string name = 4; + */ + protected $name = ''; + /** + * The field type URL, without the scheme, for message or enumeration + * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + * + * Generated from protobuf field string type_url = 6; + */ + protected $type_url = ''; + /** + * The index of the field type in `Type.oneofs`, for message or enumeration + * types. The first type has index 1; zero means the type is not in the list. + * + * Generated from protobuf field int32 oneof_index = 7; + */ + protected $oneof_index = 0; + /** + * Whether to use alternative packed wire representation. + * + * Generated from protobuf field bool packed = 8; + */ + protected $packed = false; + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 9; + */ + private $options; + /** + * The field JSON name. + * + * Generated from protobuf field string json_name = 10; + */ + protected $json_name = ''; + /** + * The string value of the default value of this field. Proto2 syntax only. + * + * Generated from protobuf field string default_value = 11; + */ + protected $default_value = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $kind + * The field type. + * @type int $cardinality + * The field cardinality. + * @type int $number + * The field number. + * @type string $name + * The field name. + * @type string $type_url + * The field type URL, without the scheme, for message or enumeration + * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + * @type int $oneof_index + * The index of the field type in `Type.oneofs`, for message or enumeration + * types. The first type has index 1; zero means the type is not in the list. + * @type bool $packed + * Whether to use alternative packed wire representation. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * The protocol buffer options. + * @type string $json_name + * The field JSON name. + * @type string $default_value + * The string value of the default value of this field. Proto2 syntax only. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Type::initOnce(); + parent::__construct($data); + } + + /** + * The field type. + * + * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; + * @return int + */ + public function getKind() + { + return $this->kind; + } + + /** + * The field type. + * + * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; + * @param int $var + * @return $this + */ + public function setKind($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Field\Kind::class); + $this->kind = $var; + + return $this; + } + + /** + * The field cardinality. + * + * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; + * @return int + */ + public function getCardinality() + { + return $this->cardinality; + } + + /** + * The field cardinality. + * + * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; + * @param int $var + * @return $this + */ + public function setCardinality($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Field\Cardinality::class); + $this->cardinality = $var; + + return $this; + } + + /** + * The field number. + * + * Generated from protobuf field int32 number = 3; + * @return int + */ + public function getNumber() + { + return $this->number; + } + + /** + * The field number. + * + * Generated from protobuf field int32 number = 3; + * @param int $var + * @return $this + */ + public function setNumber($var) + { + GPBUtil::checkInt32($var); + $this->number = $var; + + return $this; + } + + /** + * The field name. + * + * Generated from protobuf field string name = 4; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The field name. + * + * Generated from protobuf field string name = 4; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * The field type URL, without the scheme, for message or enumeration + * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + * + * Generated from protobuf field string type_url = 6; + * @return string + */ + public function getTypeUrl() + { + return $this->type_url; + } + + /** + * The field type URL, without the scheme, for message or enumeration + * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + * + * Generated from protobuf field string type_url = 6; + * @param string $var + * @return $this + */ + public function setTypeUrl($var) + { + GPBUtil::checkString($var, True); + $this->type_url = $var; + + return $this; + } + + /** + * The index of the field type in `Type.oneofs`, for message or enumeration + * types. The first type has index 1; zero means the type is not in the list. + * + * Generated from protobuf field int32 oneof_index = 7; + * @return int + */ + public function getOneofIndex() + { + return $this->oneof_index; + } + + /** + * The index of the field type in `Type.oneofs`, for message or enumeration + * types. The first type has index 1; zero means the type is not in the list. + * + * Generated from protobuf field int32 oneof_index = 7; + * @param int $var + * @return $this + */ + public function setOneofIndex($var) + { + GPBUtil::checkInt32($var); + $this->oneof_index = $var; + + return $this; + } + + /** + * Whether to use alternative packed wire representation. + * + * Generated from protobuf field bool packed = 8; + * @return bool + */ + public function getPacked() + { + return $this->packed; + } + + /** + * Whether to use alternative packed wire representation. + * + * Generated from protobuf field bool packed = 8; + * @param bool $var + * @return $this + */ + public function setPacked($var) + { + GPBUtil::checkBool($var); + $this->packed = $var; + + return $this; + } + + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 9; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 9; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + + /** + * The field JSON name. + * + * Generated from protobuf field string json_name = 10; + * @return string + */ + public function getJsonName() + { + return $this->json_name; + } + + /** + * The field JSON name. + * + * Generated from protobuf field string json_name = 10; + * @param string $var + * @return $this + */ + public function setJsonName($var) + { + GPBUtil::checkString($var, True); + $this->json_name = $var; + + return $this; + } + + /** + * The string value of the default value of this field. Proto2 syntax only. + * + * Generated from protobuf field string default_value = 11; + * @return string + */ + public function getDefaultValue() + { + return $this->default_value; + } + + /** + * The string value of the default value of this field. Proto2 syntax only. + * + * Generated from protobuf field string default_value = 11; + * @param string $var + * @return $this + */ + public function setDefaultValue($var) + { + GPBUtil::checkString($var, True); + $this->default_value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php b/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php new file mode 100644 index 0000000..a422199 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php @@ -0,0 +1,71 @@ +google.protobuf.Field.Cardinality + */ +class Cardinality +{ + /** + * For fields with unknown cardinality. + * + * Generated from protobuf enum CARDINALITY_UNKNOWN = 0; + */ + const CARDINALITY_UNKNOWN = 0; + /** + * For optional fields. + * + * Generated from protobuf enum CARDINALITY_OPTIONAL = 1; + */ + const CARDINALITY_OPTIONAL = 1; + /** + * For required fields. Proto2 syntax only. + * + * Generated from protobuf enum CARDINALITY_REQUIRED = 2; + */ + const CARDINALITY_REQUIRED = 2; + /** + * For repeated fields. + * + * Generated from protobuf enum CARDINALITY_REPEATED = 3; + */ + const CARDINALITY_REPEATED = 3; + + private static $valueToName = [ + self::CARDINALITY_UNKNOWN => 'CARDINALITY_UNKNOWN', + self::CARDINALITY_OPTIONAL => 'CARDINALITY_OPTIONAL', + self::CARDINALITY_REQUIRED => 'CARDINALITY_REQUIRED', + self::CARDINALITY_REPEATED => 'CARDINALITY_REPEATED', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Cardinality::class, \Google\Protobuf\Field_Cardinality::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php b/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php new file mode 100644 index 0000000..2d8dd77 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php @@ -0,0 +1,176 @@ +google.protobuf.Field.Kind + */ +class Kind +{ + /** + * Field type unknown. + * + * Generated from protobuf enum TYPE_UNKNOWN = 0; + */ + const TYPE_UNKNOWN = 0; + /** + * Field type double. + * + * Generated from protobuf enum TYPE_DOUBLE = 1; + */ + const TYPE_DOUBLE = 1; + /** + * Field type float. + * + * Generated from protobuf enum TYPE_FLOAT = 2; + */ + const TYPE_FLOAT = 2; + /** + * Field type int64. + * + * Generated from protobuf enum TYPE_INT64 = 3; + */ + const TYPE_INT64 = 3; + /** + * Field type uint64. + * + * Generated from protobuf enum TYPE_UINT64 = 4; + */ + const TYPE_UINT64 = 4; + /** + * Field type int32. + * + * Generated from protobuf enum TYPE_INT32 = 5; + */ + const TYPE_INT32 = 5; + /** + * Field type fixed64. + * + * Generated from protobuf enum TYPE_FIXED64 = 6; + */ + const TYPE_FIXED64 = 6; + /** + * Field type fixed32. + * + * Generated from protobuf enum TYPE_FIXED32 = 7; + */ + const TYPE_FIXED32 = 7; + /** + * Field type bool. + * + * Generated from protobuf enum TYPE_BOOL = 8; + */ + const TYPE_BOOL = 8; + /** + * Field type string. + * + * Generated from protobuf enum TYPE_STRING = 9; + */ + const TYPE_STRING = 9; + /** + * Field type group. Proto2 syntax only, and deprecated. + * + * Generated from protobuf enum TYPE_GROUP = 10; + */ + const TYPE_GROUP = 10; + /** + * Field type message. + * + * Generated from protobuf enum TYPE_MESSAGE = 11; + */ + const TYPE_MESSAGE = 11; + /** + * Field type bytes. + * + * Generated from protobuf enum TYPE_BYTES = 12; + */ + const TYPE_BYTES = 12; + /** + * Field type uint32. + * + * Generated from protobuf enum TYPE_UINT32 = 13; + */ + const TYPE_UINT32 = 13; + /** + * Field type enum. + * + * Generated from protobuf enum TYPE_ENUM = 14; + */ + const TYPE_ENUM = 14; + /** + * Field type sfixed32. + * + * Generated from protobuf enum TYPE_SFIXED32 = 15; + */ + const TYPE_SFIXED32 = 15; + /** + * Field type sfixed64. + * + * Generated from protobuf enum TYPE_SFIXED64 = 16; + */ + const TYPE_SFIXED64 = 16; + /** + * Field type sint32. + * + * Generated from protobuf enum TYPE_SINT32 = 17; + */ + const TYPE_SINT32 = 17; + /** + * Field type sint64. + * + * Generated from protobuf enum TYPE_SINT64 = 18; + */ + const TYPE_SINT64 = 18; + + private static $valueToName = [ + self::TYPE_UNKNOWN => 'TYPE_UNKNOWN', + self::TYPE_DOUBLE => 'TYPE_DOUBLE', + self::TYPE_FLOAT => 'TYPE_FLOAT', + self::TYPE_INT64 => 'TYPE_INT64', + self::TYPE_UINT64 => 'TYPE_UINT64', + self::TYPE_INT32 => 'TYPE_INT32', + self::TYPE_FIXED64 => 'TYPE_FIXED64', + self::TYPE_FIXED32 => 'TYPE_FIXED32', + self::TYPE_BOOL => 'TYPE_BOOL', + self::TYPE_STRING => 'TYPE_STRING', + self::TYPE_GROUP => 'TYPE_GROUP', + self::TYPE_MESSAGE => 'TYPE_MESSAGE', + self::TYPE_BYTES => 'TYPE_BYTES', + self::TYPE_UINT32 => 'TYPE_UINT32', + self::TYPE_ENUM => 'TYPE_ENUM', + self::TYPE_SFIXED32 => 'TYPE_SFIXED32', + self::TYPE_SFIXED64 => 'TYPE_SFIXED64', + self::TYPE_SINT32 => 'TYPE_SINT32', + self::TYPE_SINT64 => 'TYPE_SINT64', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Kind::class, \Google\Protobuf\Field_Kind::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php new file mode 100644 index 0000000..6d08cea --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php @@ -0,0 +1,125 @@ +internal_desc = $internal_desc; + } + + /** + * @return string Field name + */ + public function getName() + { + return $this->internal_desc->getName(); + } + + /** + * @return int Protobuf field number + */ + public function getNumber() + { + return $this->internal_desc->getNumber(); + } + + /** + * @return int + */ + public function getLabel() + { + return $this->internal_desc->getLabel(); + } + + /** + * @return int + */ + public function getType() + { + return $this->internal_desc->getType(); + } + + /** + * @return Descriptor Returns a descriptor for the field type if the field type is a message, otherwise throws \Exception + * @throws \Exception + */ + public function getMessageType() + { + if ($this->getType() == GPBType::MESSAGE) { + return $this->getPublicDescriptor($this->internal_desc->getMessageType()); + } else { + throw new \Exception("Cannot get message type for non-message field '" . $this->getName() . "'"); + } + } + + /** + * @return EnumDescriptor Returns an enum descriptor if the field type is an enum, otherwise throws \Exception + * @throws \Exception + */ + public function getEnumType() + { + if ($this->getType() == GPBType::ENUM) { + return $this->getPublicDescriptor($this->internal_desc->getEnumType()); + } else { + throw new \Exception("Cannot get enum type for non-enum field '" . $this->getName() . "'"); + } + } + + /** + * @return boolean + */ + public function isMap() + { + return $this->internal_desc->isMap(); + } + + /** + * @return boolean + */ + public function hasOptionalKeyword() + { + return $this->internal_desc->hasOptionalKeyword(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php b/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php new file mode 100644 index 0000000..a8e5243 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php @@ -0,0 +1,217 @@ +google.protobuf.FieldMask + */ +class FieldMask extends \Google\Protobuf\Internal\Message +{ + /** + * The set of field mask paths. + * + * Generated from protobuf field repeated string paths = 1; + */ + private $paths; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array|\Google\Protobuf\Internal\RepeatedField $paths + * The set of field mask paths. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\FieldMask::initOnce(); + parent::__construct($data); + } + + /** + * The set of field mask paths. + * + * Generated from protobuf field repeated string paths = 1; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getPaths() + { + return $this->paths; + } + + /** + * The set of field mask paths. + * + * Generated from protobuf field repeated string paths = 1; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setPaths($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->paths = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php b/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php new file mode 100644 index 0000000..dff8f89 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php @@ -0,0 +1,16 @@ +google.protobuf.FloatValue + */ +class FloatValue extends \Google\Protobuf\Internal\Message +{ + /** + * The float value. + * + * Generated from protobuf field float value = 1; + */ + protected $value = 0.0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type float $value + * The float value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The float value. + * + * Generated from protobuf field float value = 1; + * @return float + */ + public function getValue() + { + return $this->value; + } + + /** + * The float value. + * + * Generated from protobuf field float value = 1; + * @param float $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkFloat($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php b/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php new file mode 100644 index 0000000..4db6923 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php @@ -0,0 +1,38 @@ +google.protobuf.Empty + */ +class GPBEmpty extends \Google\Protobuf\Internal\Message +{ + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\GPBEmpty::initOnce(); + parent::__construct($data); + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php b/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php new file mode 100644 index 0000000..cfd73cd --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php @@ -0,0 +1,68 @@ +google.protobuf.Int32Value + */ +class Int32Value extends \Google\Protobuf\Internal\Message +{ + /** + * The int32 value. + * + * Generated from protobuf field int32 value = 1; + */ + protected $value = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $value + * The int32 value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The int32 value. + * + * Generated from protobuf field int32 value = 1; + * @return int + */ + public function getValue() + { + return $this->value; + } + + /** + * The int32 value. + * + * Generated from protobuf field int32 value = 1; + * @param int $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkInt32($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php b/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php new file mode 100644 index 0000000..143474f --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php @@ -0,0 +1,68 @@ +google.protobuf.Int64Value + */ +class Int64Value extends \Google\Protobuf\Internal\Message +{ + /** + * The int64 value. + * + * Generated from protobuf field int64 value = 1; + */ + protected $value = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int|string $value + * The int64 value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The int64 value. + * + * Generated from protobuf field int64 value = 1; + * @return int|string + */ + public function getValue() + { + return $this->value; + } + + /** + * The int64 value. + * + * Generated from protobuf field int64 value = 1; + * @param int|string $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkInt64($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php new file mode 100644 index 0000000..cba922d --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php @@ -0,0 +1,86 @@ +type_url, 0, $url_prifix_len) != + GPBUtil::TYPE_URL_PREFIX) { + throw new \Exception( + "Type url needs to be type.googleapis.com/fully-qulified"); + } + $fully_qualifed_name = + substr($this->type_url, $url_prifix_len); + + // Create message according to fully qualified name. + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + $desc = $pool->getDescriptorByProtoName($fully_qualifed_name); + if (is_null($desc)) { + throw new \Exception("Class ".$fully_qualifed_name + ." hasn't been added to descriptor pool"); + } + $klass = $desc->getClass(); + $msg = new $klass(); + + // Merge data into message. + $msg->mergeFromString($this->value); + return $msg; + } + + /** + * The type_url will be created according to the given message’s type and + * the value is encoded data from the given message.. + * @param message: A proto message. + */ + public function pack($msg) + { + if (!$msg instanceof Message) { + trigger_error("Given parameter is not a message instance.", + E_USER_ERROR); + return; + } + + // Set value using serialized message. + $this->value = $msg->serializeToString(); + + // Set type url. + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + $desc = $pool->getDescriptorByClassName(get_class($msg)); + $fully_qualifed_name = $desc->getFullName(); + $this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; + } + + /** + * This method returns whether the type_url in any_message is corresponded + * to the given class. + * @param klass: The fully qualified PHP class name of a proto message type. + */ + public function is($klass) + { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + $desc = $pool->getDescriptorByClassName($klass); + $fully_qualifed_name = $desc->getFullName(); + $type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; + return $this->type_url === $type_url; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php new file mode 100644 index 0000000..2ed2dfd --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php @@ -0,0 +1,382 @@ +buffer = $buffer; + $this->buffer_size_after_limit = 0; + $this->buffer_end = $end; + $this->current = $start; + $this->current_limit = $end; + $this->legitimate_message_end = false; + $this->recursion_budget = self::DEFAULT_RECURSION_LIMIT; + $this->recursion_limit = self::DEFAULT_RECURSION_LIMIT; + $this->total_bytes_limit = self::DEFAULT_TOTAL_BYTES_LIMIT; + $this->total_bytes_read = $end - $start; + } + + private function advance($amount) + { + $this->current += $amount; + } + + public function bufferSize() + { + return $this->buffer_end - $this->current; + } + + public function current() + { + return $this->total_bytes_read - + ($this->buffer_end - $this->current + + $this->buffer_size_after_limit); + } + + public function substr($start, $end) + { + return substr($this->buffer, $start, $end - $start); + } + + private function recomputeBufferLimits() + { + $this->buffer_end += $this->buffer_size_after_limit; + $closest_limit = min($this->current_limit, $this->total_bytes_limit); + if ($closest_limit < $this->total_bytes_read) { + // The limit position is in the current buffer. We must adjust the + // buffer size accordingly. + $this->buffer_size_after_limit = $this->total_bytes_read - + $closest_limit; + $this->buffer_end -= $this->buffer_size_after_limit; + } else { + $this->buffer_size_after_limit = 0; + } + } + + private function consumedEntireMessage() + { + return $this->legitimate_message_end; + } + + /** + * Read uint32 into $var. Advance buffer with consumed bytes. If the + * contained varint is larger than 32 bits, discard the high order bits. + * @param $var. + */ + public function readVarint32(&$var) + { + if (!$this->readVarint64($var)) { + return false; + } + + if (PHP_INT_SIZE == 4) { + $var = bcmod($var, 4294967296); + } else { + $var &= 0xFFFFFFFF; + } + + // Convert large uint32 to int32. + if ($var > 0x7FFFFFFF) { + if (PHP_INT_SIZE === 8) { + $var = $var | (0xFFFFFFFF << 32); + } else { + $var = bcsub($var, 4294967296); + } + } + + $var = intval($var); + return true; + } + + /** + * Read Uint64 into $var. Advance buffer with consumed bytes. + * @param $var. + */ + public function readVarint64(&$var) + { + $count = 0; + + if (PHP_INT_SIZE == 4) { + $high = 0; + $low = 0; + $b = 0; + + do { + if ($this->current === $this->buffer_end) { + return false; + } + if ($count === self::MAX_VARINT_BYTES) { + return false; + } + $b = ord($this->buffer[$this->current]); + $bits = 7 * $count; + if ($bits >= 32) { + $high |= (($b & 0x7F) << ($bits - 32)); + } else if ($bits > 25){ + // $bits is 28 in this case. + $low |= (($b & 0x7F) << 28); + $high = ($b & 0x7F) >> 4; + } else { + $low |= (($b & 0x7F) << $bits); + } + + $this->advance(1); + $count += 1; + } while ($b & 0x80); + + $var = GPBUtil::combineInt32ToInt64($high, $low); + if (bccomp($var, 0) < 0) { + $var = bcadd($var, "18446744073709551616"); + } + } else { + $result = 0; + $shift = 0; + + do { + if ($this->current === $this->buffer_end) { + return false; + } + if ($count === self::MAX_VARINT_BYTES) { + return false; + } + + $byte = ord($this->buffer[$this->current]); + $result |= ($byte & 0x7f) << $shift; + $shift += 7; + $this->advance(1); + $count += 1; + } while ($byte > 0x7f); + + $var = $result; + } + + return true; + } + + /** + * Read int into $var. If the result is larger than the largest integer, $var + * will be -1. Advance buffer with consumed bytes. + * @param $var. + */ + public function readVarintSizeAsInt(&$var) + { + if (!$this->readVarint64($var)) { + return false; + } + $var = (int)$var; + return true; + } + + /** + * Read 32-bit unsigned integer to $var. If the buffer has less than 4 bytes, + * return false. Advance buffer with consumed bytes. + * @param $var. + */ + public function readLittleEndian32(&$var) + { + $data = null; + if (!$this->readRaw(4, $data)) { + return false; + } + $var = unpack('V', $data); + $var = $var[1]; + return true; + } + + /** + * Read 64-bit unsigned integer to $var. If the buffer has less than 8 bytes, + * return false. Advance buffer with consumed bytes. + * @param $var. + */ + public function readLittleEndian64(&$var) + { + $data = null; + if (!$this->readRaw(4, $data)) { + return false; + } + $low = unpack('V', $data)[1]; + if (!$this->readRaw(4, $data)) { + return false; + } + $high = unpack('V', $data)[1]; + if (PHP_INT_SIZE == 4) { + $var = GPBUtil::combineInt32ToInt64($high, $low); + } else { + $var = ($high << 32) | $low; + } + return true; + } + + /** + * Read tag into $var. Advance buffer with consumed bytes. + * @param $var. + */ + public function readTag() + { + if ($this->current === $this->buffer_end) { + // Make sure that it failed due to EOF, not because we hit + // total_bytes_limit, which, unlike normal limits, is not a valid + // place to end a message. + $current_position = $this->total_bytes_read - + $this->buffer_size_after_limit; + if ($current_position >= $this->total_bytes_limit) { + // Hit total_bytes_limit_. But if we also hit the normal limit, + // we're still OK. + $this->legitimate_message_end = + ($this->current_limit === $this->total_bytes_limit); + } else { + $this->legitimate_message_end = true; + } + return 0; + } + + $result = 0; + // The largest tag is 2^29 - 1, which can be represented by int32. + $success = $this->readVarint32($result); + if ($success) { + return $result; + } else { + return 0; + } + } + + public function readRaw($size, &$buffer) + { + $current_buffer_size = 0; + if ($this->bufferSize() < $size) { + return false; + } + + if ($size === 0) { + $buffer = ""; + } else { + $buffer = substr($this->buffer, $this->current, $size); + $this->advance($size); + } + + return true; + } + + /* Places a limit on the number of bytes that the stream may read, starting + * from the current position. Once the stream hits this limit, it will act + * like the end of the input has been reached until popLimit() is called. + * + * As the names imply, the stream conceptually has a stack of limits. The + * shortest limit on the stack is always enforced, even if it is not the top + * limit. + * + * The value returned by pushLimit() is opaque to the caller, and must be + * passed unchanged to the corresponding call to popLimit(). + * + * @param integer $byte_limit + * @throws \Exception Fail to push limit. + */ + public function pushLimit($byte_limit) + { + // Current position relative to the beginning of the stream. + $current_position = $this->current(); + $old_limit = $this->current_limit; + + // security: byte_limit is possibly evil, so check for negative values + // and overflow. + if ($byte_limit >= 0 && + $byte_limit <= PHP_INT_MAX - $current_position && + $byte_limit <= $this->current_limit - $current_position) { + $this->current_limit = $current_position + $byte_limit; + $this->recomputeBufferLimits(); + } else { + throw new GPBDecodeException("Fail to push limit."); + } + + return $old_limit; + } + + /* The limit passed in is actually the *old* limit, which we returned from + * PushLimit(). + * + * @param integer $byte_limit + */ + public function popLimit($byte_limit) + { + $this->current_limit = $byte_limit; + $this->recomputeBufferLimits(); + // We may no longer be at a legitimate message end. ReadTag() needs to + // be called again to find out. + $this->legitimate_message_end = false; + } + + public function incrementRecursionDepthAndPushLimit( + $byte_limit, &$old_limit, &$recursion_budget) + { + $old_limit = $this->pushLimit($byte_limit); + $recursion_limit = --$this->recursion_limit; + } + + public function decrementRecursionDepthAndPopLimit($byte_limit) + { + $result = $this->consumedEntireMessage(); + $this->popLimit($byte_limit); + ++$this->recursion_budget; + return $result; + } + + public function bytesUntilLimit() + { + if ($this->current_limit === PHP_INT_MAX) { + return -1; + } + return $this->current_limit - $this->current; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php new file mode 100644 index 0000000..f75e9c6 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php @@ -0,0 +1,159 @@ +current = 0; + $this->buffer_size = $size; + $this->buffer = str_repeat(chr(0), $this->buffer_size); + } + + public function getData() + { + return $this->buffer; + } + + public function writeVarint32($value, $trim) + { + $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES); + $size = self::writeVarintToArray($value, $bytes, $trim); + return $this->writeRaw($bytes, $size); + } + + public function writeVarint64($value) + { + $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES); + $size = self::writeVarintToArray($value, $bytes); + return $this->writeRaw($bytes, $size); + } + + public function writeLittleEndian32($value) + { + $bytes = str_repeat(chr(0), 4); + $size = self::writeLittleEndian32ToArray($value, $bytes); + return $this->writeRaw($bytes, $size); + } + + public function writeLittleEndian64($value) + { + $bytes = str_repeat(chr(0), 8); + $size = self::writeLittleEndian64ToArray($value, $bytes); + return $this->writeRaw($bytes, $size); + } + + public function writeTag($tag) + { + return $this->writeVarint32($tag, true); + } + + public function writeRaw($data, $size) + { + if ($this->buffer_size < $size) { + trigger_error("Output stream doesn't have enough buffer."); + return false; + } + + for ($i = 0; $i < $size; $i++) { + $this->buffer[$this->current] = $data[$i]; + $this->current++; + $this->buffer_size--; + } + return true; + } + + public static function writeVarintToArray($value, &$buffer, $trim = false) + { + $current = 0; + + $high = 0; + $low = 0; + if (PHP_INT_SIZE == 4) { + GPBUtil::divideInt64ToInt32($value, $high, $low, $trim); + } else { + $low = $value; + } + + while (($low >= 0x80 || $low < 0) || $high != 0) { + $buffer[$current] = chr($low | 0x80); + $value = ($value >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)); + $carry = ($high & 0x7F) << ((PHP_INT_SIZE << 3) - 7); + $high = ($high >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)); + $low = (($low >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)) | $carry); + $current++; + } + $buffer[$current] = chr($low); + return $current + 1; + } + + private static function writeLittleEndian32ToArray($value, &$buffer) + { + $buffer[0] = chr($value & 0x000000FF); + $buffer[1] = chr(($value >> 8) & 0x000000FF); + $buffer[2] = chr(($value >> 16) & 0x000000FF); + $buffer[3] = chr(($value >> 24) & 0x000000FF); + return 4; + } + + private static function writeLittleEndian64ToArray($value, &$buffer) + { + $high = 0; + $low = 0; + if (PHP_INT_SIZE == 4) { + GPBUtil::divideInt64ToInt32($value, $high, $low); + } else { + $low = $value & 0xFFFFFFFF; + $high = ($value >> 32) & 0xFFFFFFFF; + } + + $buffer[0] = chr($low & 0x000000FF); + $buffer[1] = chr(($low >> 8) & 0x000000FF); + $buffer[2] = chr(($low >> 16) & 0x000000FF); + $buffer[3] = chr(($low >> 24) & 0x000000FF); + $buffer[4] = chr($high & 0x000000FF); + $buffer[5] = chr(($high >> 8) & 0x000000FF); + $buffer[6] = chr(($high >> 16) & 0x000000FF); + $buffer[7] = chr(($high >> 24) & 0x000000FF); + return 8; + } + +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php new file mode 100644 index 0000000..a7f80d5 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php @@ -0,0 +1,222 @@ +public_desc = new \Google\Protobuf\Descriptor($this); + } + + public function addOneofDecl($oneof) + { + $this->oneof_decl[] = $oneof; + } + + public function getOneofDecl() + { + return $this->oneof_decl; + } + + public function setFullName($full_name) + { + $this->full_name = $full_name; + } + + public function getFullName() + { + return $this->full_name; + } + + public function addField($field) + { + $this->field[$field->getNumber()] = $field; + $this->json_to_field[$field->getJsonName()] = $field; + $this->name_to_field[$field->getName()] = $field; + $this->index_to_field[] = $field; + } + + public function getField() + { + return $this->field; + } + + public function addNestedType($desc) + { + $this->nested_type[] = $desc; + } + + public function getNestedType() + { + return $this->nested_type; + } + + public function addEnumType($desc) + { + $this->enum_type[] = $desc; + } + + public function getEnumType() + { + return $this->enum_type; + } + + public function getFieldByNumber($number) + { + if (!isset($this->field[$number])) { + return NULL; + } else { + return $this->field[$number]; + } + } + + public function getFieldByJsonName($json_name) + { + if (!isset($this->json_to_field[$json_name])) { + return NULL; + } else { + return $this->json_to_field[$json_name]; + } + } + + public function getFieldByName($name) + { + if (!isset($this->name_to_field[$name])) { + return NULL; + } else { + return $this->name_to_field[$name]; + } + } + + public function getFieldByIndex($index) + { + if (count($this->index_to_field) <= $index) { + return NULL; + } else { + return $this->index_to_field[$index]; + } + } + + public function setClass($klass) + { + $this->klass = $klass; + } + + public function getClass() + { + return $this->klass; + } + + public function setLegacyClass($klass) + { + $this->legacy_klass = $klass; + } + + public function getLegacyClass() + { + return $this->legacy_klass; + } + + public function setOptions($options) + { + $this->options = $options; + } + + public function getOptions() + { + return $this->options; + } + + public static function buildFromProto($proto, $file_proto, $containing) + { + $desc = new Descriptor(); + + $message_name_without_package = ""; + $classname = ""; + $legacy_classname = ""; + $fullname = ""; + GPBUtil::getFullClassName( + $proto, + $containing, + $file_proto, + $message_name_without_package, + $classname, + $legacy_classname, + $fullname); + $desc->setFullName($fullname); + $desc->setClass($classname); + $desc->setLegacyClass($legacy_classname); + $desc->setOptions($proto->getOptions()); + + foreach ($proto->getField() as $field_proto) { + $desc->addField(FieldDescriptor::buildFromProto($field_proto)); + } + + // Handle nested types. + foreach ($proto->getNestedType() as $nested_proto) { + $desc->addNestedType(Descriptor::buildFromProto( + $nested_proto, $file_proto, $message_name_without_package)); + } + + // Handle nested enum. + foreach ($proto->getEnumType() as $enum_proto) { + $desc->addEnumType(EnumDescriptor::buildFromProto( + $enum_proto, $file_proto, $message_name_without_package)); + } + + // Handle oneof fields. + $index = 0; + foreach ($proto->getOneofDecl() as $oneof_proto) { + $desc->addOneofDecl( + OneofDescriptor::buildFromProto($oneof_proto, $desc, $index)); + $index++; + } + + return $desc; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php new file mode 100644 index 0000000..1468a02 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php @@ -0,0 +1,193 @@ +mergeFromString($data); + + foreach($files->getFile() as $file_proto) { + $file = FileDescriptor::buildFromProto($file_proto); + + foreach ($file->getMessageType() as $desc) { + $this->addDescriptor($desc); + } + unset($desc); + + foreach ($file->getEnumType() as $desc) { + $this->addEnumDescriptor($desc); + } + unset($desc); + + foreach ($file->getMessageType() as $desc) { + $this->crossLink($desc); + } + unset($desc); + } + } + + public function addMessage($name, $klass) + { + return new MessageBuilderContext($name, $klass, $this); + } + + public function addEnum($name, $klass) + { + return new EnumBuilderContext($name, $klass, $this); + } + + public function addDescriptor($descriptor) + { + $this->proto_to_class[$descriptor->getFullName()] = + $descriptor->getClass(); + $this->class_to_desc[$descriptor->getClass()] = $descriptor; + $this->class_to_desc[$descriptor->getLegacyClass()] = $descriptor; + foreach ($descriptor->getNestedType() as $nested_type) { + $this->addDescriptor($nested_type); + } + foreach ($descriptor->getEnumType() as $enum_type) { + $this->addEnumDescriptor($enum_type); + } + } + + public function addEnumDescriptor($descriptor) + { + $this->proto_to_class[$descriptor->getFullName()] = + $descriptor->getClass(); + $this->class_to_enum_desc[$descriptor->getClass()] = $descriptor; + $this->class_to_enum_desc[$descriptor->getLegacyClass()] = $descriptor; + } + + public function getDescriptorByClassName($klass) + { + if (isset($this->class_to_desc[$klass])) { + return $this->class_to_desc[$klass]; + } else { + return null; + } + } + + public function getEnumDescriptorByClassName($klass) + { + if (isset($this->class_to_enum_desc[$klass])) { + return $this->class_to_enum_desc[$klass]; + } else { + return null; + } + } + + public function getDescriptorByProtoName($proto) + { + if (isset($this->proto_to_class[$proto])) { + $klass = $this->proto_to_class[$proto]; + return $this->class_to_desc[$klass]; + } else { + return null; + } + } + + public function getEnumDescriptorByProtoName($proto) + { + $klass = $this->proto_to_class[$proto]; + return $this->class_to_enum_desc[$klass]; + } + + private function crossLink(Descriptor $desc) + { + foreach ($desc->getField() as $field) { + switch ($field->getType()) { + case GPBType::MESSAGE: + $proto = $field->getMessageType(); + if ($proto[0] == '.') { + $proto = substr($proto, 1); + } + $subdesc = $this->getDescriptorByProtoName($proto); + if (is_null($subdesc)) { + trigger_error( + 'proto not added: ' . $proto + . " for " . $desc->getFullName(), E_USER_ERROR); + } + $field->setMessageType($subdesc); + break; + case GPBType::ENUM: + $proto = $field->getEnumType(); + if ($proto[0] == '.') { + $proto = substr($proto, 1); + } + $field->setEnumType( + $this->getEnumDescriptorByProtoName($proto)); + break; + default: + break; + } + } + unset($field); + + foreach ($desc->getNestedType() as $nested_type) { + $this->crossLink($nested_type); + } + unset($nested_type); + } + + public function finish() + { + foreach ($this->class_to_desc as $klass => $desc) { + $this->crossLink($desc); + } + unset($desc); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php new file mode 100644 index 0000000..2937c5a --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php @@ -0,0 +1,336 @@ +google.protobuf.DescriptorProto + */ +class DescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; + */ + private $field; + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; + */ + private $extension; + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; + */ + private $nested_type; + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + */ + private $enum_type; + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + */ + private $extension_range; + /** + * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + */ + private $oneof_decl; + /** + * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; + */ + protected $options = null; + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + */ + private $reserved_range; + /** + * Reserved field names, which may not be used by fields in the same message. + * A given name may only be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 10; + */ + private $reserved_name; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $field + * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $extension + * @type array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $nested_type + * @type array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $enum_type + * @type array<\Google\Protobuf\Internal\DescriptorProto\ExtensionRange>|\Google\Protobuf\Internal\RepeatedField $extension_range + * @type array<\Google\Protobuf\Internal\OneofDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $oneof_decl + * @type \Google\Protobuf\Internal\MessageOptions $options + * @type array<\Google\Protobuf\Internal\DescriptorProto\ReservedRange>|\Google\Protobuf\Internal\RepeatedField $reserved_range + * @type array|\Google\Protobuf\Internal\RepeatedField $reserved_name + * Reserved field names, which may not be used by fields in the same message. + * A given name may only be reserved once. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getField() + { + return $this->field; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; + * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setField($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); + $this->field = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getExtension() + { + return $this->extension; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; + * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setExtension($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); + $this->extension = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getNestedType() + { + return $this->nested_type; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; + * @param array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setNestedType($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto::class); + $this->nested_type = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getEnumType() + { + return $this->enum_type; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + * @param array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setEnumType($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto::class); + $this->enum_type = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getExtensionRange() + { + return $this->extension_range; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + * @param array<\Google\Protobuf\Internal\DescriptorProto\ExtensionRange>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setExtensionRange($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto\ExtensionRange::class); + $this->extension_range = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOneofDecl() + { + return $this->oneof_decl; + } + + /** + * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + * @param array<\Google\Protobuf\Internal\OneofDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOneofDecl($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\OneofDescriptorProto::class); + $this->oneof_decl = $arr; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; + * @return \Google\Protobuf\Internal\MessageOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; + * @param \Google\Protobuf\Internal\MessageOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\MessageOptions::class); + $this->options = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getReservedRange() + { + return $this->reserved_range; + } + + /** + * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + * @param array<\Google\Protobuf\Internal\DescriptorProto\ReservedRange>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setReservedRange($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto\ReservedRange::class); + $this->reserved_range = $arr; + + return $this; + } + + /** + * Reserved field names, which may not be used by fields in the same message. + * A given name may only be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 10; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getReservedName() + { + return $this->reserved_name; + } + + /** + * Reserved field names, which may not be used by fields in the same message. + * A given name may only be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 10; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setReservedName($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->reserved_name = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php new file mode 100644 index 0000000..43c33c4 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php @@ -0,0 +1,161 @@ +google.protobuf.DescriptorProto.ExtensionRange + */ +class ExtensionRange extends \Google\Protobuf\Internal\Message +{ + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + */ + protected $start = null; + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + */ + protected $end = null; + /** + * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; + */ + protected $options = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $start + * Inclusive. + * @type int $end + * Exclusive. + * @type \Google\Protobuf\Internal\ExtensionRangeOptions $options + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @return int + */ + public function getStart() + { + return isset($this->start) ? $this->start : 0; + } + + public function hasStart() + { + return isset($this->start); + } + + public function clearStart() + { + unset($this->start); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @param int $var + * @return $this + */ + public function setStart($var) + { + GPBUtil::checkInt32($var); + $this->start = $var; + + return $this; + } + + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @return int + */ + public function getEnd() + { + return isset($this->end) ? $this->end : 0; + } + + public function hasEnd() + { + return isset($this->end); + } + + public function clearEnd() + { + unset($this->end); + } + + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @param int $var + * @return $this + */ + public function setEnd($var) + { + GPBUtil::checkInt32($var); + $this->end = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; + * @return \Google\Protobuf\Internal\ExtensionRangeOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; + * @param \Google\Protobuf\Internal\ExtensionRangeOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\ExtensionRangeOptions::class); + $this->options = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(ExtensionRange::class, \Google\Protobuf\Internal\DescriptorProto_ExtensionRange::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php new file mode 100644 index 0000000..f099cc3 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php @@ -0,0 +1,128 @@ +google.protobuf.DescriptorProto.ReservedRange + */ +class ReservedRange extends \Google\Protobuf\Internal\Message +{ + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + */ + protected $start = null; + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + */ + protected $end = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $start + * Inclusive. + * @type int $end + * Exclusive. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @return int + */ + public function getStart() + { + return isset($this->start) ? $this->start : 0; + } + + public function hasStart() + { + return isset($this->start); + } + + public function clearStart() + { + unset($this->start); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @param int $var + * @return $this + */ + public function setStart($var) + { + GPBUtil::checkInt32($var); + $this->start = $var; + + return $this; + } + + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @return int + */ + public function getEnd() + { + return isset($this->end) ? $this->end : 0; + } + + public function hasEnd() + { + return isset($this->end); + } + + public function clearEnd() + { + unset($this->end); + } + + /** + * Exclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @param int $var + * @return $this + */ + public function setEnd($var) + { + GPBUtil::checkInt32($var); + $this->end = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(ReservedRange::class, \Google\Protobuf\Internal\DescriptorProto_ReservedRange::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php new file mode 100644 index 0000000..c928fbe --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php @@ -0,0 +1,16 @@ +descriptor = new EnumDescriptor(); + $this->descriptor->setFullName($full_name); + $this->descriptor->setClass($klass); + $this->pool = $pool; + } + + public function value($name, $number) + { + $value = new EnumValueDescriptor($name, $number); + $this->descriptor->addValue($number, $value); + return $this; + } + + public function finalizeToPool() + { + $this->pool->addEnumDescriptor($this->descriptor); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php new file mode 100644 index 0000000..7af4f84 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php @@ -0,0 +1,115 @@ +public_desc = new \Google\Protobuf\EnumDescriptor($this); + } + + public function setFullName($full_name) + { + $this->full_name = $full_name; + } + + public function getFullName() + { + return $this->full_name; + } + + public function addValue($number, $value) + { + $this->value[$number] = $value; + $this->name_to_value[$value->getName()] = $value; + $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number); + } + + public function getValueByNumber($number) + { + if (isset($this->value[$number])) { + return $this->value[$number]; + } + return null; + } + + public function getValueByName($name) + { + if (isset($this->name_to_value[$name])) { + return $this->name_to_value[$name]; + } + return null; + } + + public function getValueDescriptorByIndex($index) + { + if (isset($this->value_descriptor[$index])) { + return $this->value_descriptor[$index]; + } + return null; + } + + public function getValueCount() + { + return count($this->value); + } + + public function setClass($klass) + { + $this->klass = $klass; + } + + public function getClass() + { + return $this->klass; + } + + public function setLegacyClass($klass) + { + $this->legacy_klass = $klass; + } + + public function getLegacyClass() + { + return $this->legacy_klass; + } + + public static function buildFromProto($proto, $file_proto, $containing) + { + $desc = new EnumDescriptor(); + + $enum_name_without_package = ""; + $classname = ""; + $legacy_classname = ""; + $fullname = ""; + GPBUtil::getFullClassName( + $proto, + $containing, + $file_proto, + $enum_name_without_package, + $classname, + $legacy_classname, + $fullname); + $desc->setFullName($fullname); + $desc->setClass($classname); + $desc->setLegacyClass($legacy_classname); + $values = $proto->getValue(); + foreach ($values as $value) { + $desc->addValue($value->getNumber(), $value); + } + + return $desc; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php new file mode 100644 index 0000000..cb2a42a --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php @@ -0,0 +1,216 @@ +google.protobuf.EnumDescriptorProto + */ +class EnumDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; + */ + private $value; + /** + * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; + */ + protected $options = null; + /** + * Range of reserved numeric values. Reserved numeric values may not be used + * by enum values in the same enum declaration. Reserved ranges may not + * overlap. + * + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; + */ + private $reserved_range; + /** + * Reserved enum value names, which may not be reused. A given name may only + * be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 5; + */ + private $reserved_name; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type array<\Google\Protobuf\Internal\EnumValueDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $value + * @type \Google\Protobuf\Internal\EnumOptions $options + * @type array<\Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange>|\Google\Protobuf\Internal\RepeatedField $reserved_range + * Range of reserved numeric values. Reserved numeric values may not be used + * by enum values in the same enum declaration. Reserved ranges may not + * overlap. + * @type array|\Google\Protobuf\Internal\RepeatedField $reserved_name + * Reserved enum value names, which may not be reused. A given name may only + * be reserved once. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getValue() + { + return $this->value; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; + * @param array<\Google\Protobuf\Internal\EnumValueDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setValue($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumValueDescriptorProto::class); + $this->value = $arr; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; + * @return \Google\Protobuf\Internal\EnumOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; + * @param \Google\Protobuf\Internal\EnumOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\EnumOptions::class); + $this->options = $var; + + return $this; + } + + /** + * Range of reserved numeric values. Reserved numeric values may not be used + * by enum values in the same enum declaration. Reserved ranges may not + * overlap. + * + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getReservedRange() + { + return $this->reserved_range; + } + + /** + * Range of reserved numeric values. Reserved numeric values may not be used + * by enum values in the same enum declaration. Reserved ranges may not + * overlap. + * + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; + * @param array<\Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setReservedRange($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange::class); + $this->reserved_range = $arr; + + return $this; + } + + /** + * Reserved enum value names, which may not be reused. A given name may only + * be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 5; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getReservedName() + { + return $this->reserved_name; + } + + /** + * Reserved enum value names, which may not be reused. A given name may only + * be reserved once. + * + * Generated from protobuf field repeated string reserved_name = 5; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setReservedName($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->reserved_name = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php new file mode 100644 index 0000000..7282fcc --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php @@ -0,0 +1,130 @@ +google.protobuf.EnumDescriptorProto.EnumReservedRange + */ +class EnumReservedRange extends \Google\Protobuf\Internal\Message +{ + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + */ + protected $start = null; + /** + * Inclusive. + * + * Generated from protobuf field optional int32 end = 2; + */ + protected $end = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $start + * Inclusive. + * @type int $end + * Inclusive. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @return int + */ + public function getStart() + { + return isset($this->start) ? $this->start : 0; + } + + public function hasStart() + { + return isset($this->start); + } + + public function clearStart() + { + unset($this->start); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 start = 1; + * @param int $var + * @return $this + */ + public function setStart($var) + { + GPBUtil::checkInt32($var); + $this->start = $var; + + return $this; + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @return int + */ + public function getEnd() + { + return isset($this->end) ? $this->end : 0; + } + + public function hasEnd() + { + return isset($this->end); + } + + public function clearEnd() + { + unset($this->end); + } + + /** + * Inclusive. + * + * Generated from protobuf field optional int32 end = 2; + * @param int $var + * @return $this + */ + public function setEnd($var) + { + GPBUtil::checkInt32($var); + $this->end = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(EnumReservedRange::class, \Google\Protobuf\Internal\EnumDescriptorProto_EnumReservedRange::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php new file mode 100644 index 0000000..b1b59ed --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php @@ -0,0 +1,16 @@ +google.protobuf.EnumOptions + */ +class EnumOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Set this option to true to allow mapping different tag names to the same + * value. + * + * Generated from protobuf field optional bool allow_alias = 2; + */ + protected $allow_alias = null; + /** + * Is this enum deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum, or it will be completely ignored; in the very least, this + * is a formalization for deprecating enums. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + */ + protected $deprecated = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $allow_alias + * Set this option to true to allow mapping different tag names to the same + * value. + * @type bool $deprecated + * Is this enum deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum, or it will be completely ignored; in the very least, this + * is a formalization for deprecating enums. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Set this option to true to allow mapping different tag names to the same + * value. + * + * Generated from protobuf field optional bool allow_alias = 2; + * @return bool + */ + public function getAllowAlias() + { + return isset($this->allow_alias) ? $this->allow_alias : false; + } + + public function hasAllowAlias() + { + return isset($this->allow_alias); + } + + public function clearAllowAlias() + { + unset($this->allow_alias); + } + + /** + * Set this option to true to allow mapping different tag names to the same + * value. + * + * Generated from protobuf field optional bool allow_alias = 2; + * @param bool $var + * @return $this + */ + public function setAllowAlias($var) + { + GPBUtil::checkBool($var); + $this->allow_alias = $var; + + return $this; + } + + /** + * Is this enum deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum, or it will be completely ignored; in the very least, this + * is a formalization for deprecating enums. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this enum deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum, or it will be completely ignored; in the very least, this + * is a formalization for deprecating enums. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php new file mode 100644 index 0000000..0feaea6 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php @@ -0,0 +1,146 @@ +google.protobuf.EnumValueDescriptorProto + */ +class EnumValueDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field optional int32 number = 2; + */ + protected $number = null; + /** + * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; + */ + protected $options = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type int $number + * @type \Google\Protobuf\Internal\EnumValueOptions $options + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field optional int32 number = 2; + * @return int + */ + public function getNumber() + { + return isset($this->number) ? $this->number : 0; + } + + public function hasNumber() + { + return isset($this->number); + } + + public function clearNumber() + { + unset($this->number); + } + + /** + * Generated from protobuf field optional int32 number = 2; + * @param int $var + * @return $this + */ + public function setNumber($var) + { + GPBUtil::checkInt32($var); + $this->number = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; + * @return \Google\Protobuf\Internal\EnumValueOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; + * @param \Google\Protobuf\Internal\EnumValueOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\EnumValueOptions::class); + $this->options = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php new file mode 100644 index 0000000..2db7fce --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php @@ -0,0 +1,123 @@ +google.protobuf.EnumValueOptions + */ +class EnumValueOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Is this enum value deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum value, or it will be completely ignored; in the very least, + * this is a formalization for deprecating enum values. + * + * Generated from protobuf field optional bool deprecated = 1 [default = false]; + */ + protected $deprecated = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $deprecated + * Is this enum value deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum value, or it will be completely ignored; in the very least, + * this is a formalization for deprecating enum values. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Is this enum value deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum value, or it will be completely ignored; in the very least, + * this is a formalization for deprecating enum values. + * + * Generated from protobuf field optional bool deprecated = 1 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this enum value deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the enum value, or it will be completely ignored; in the very least, + * this is a formalization for deprecating enum values. + * + * Generated from protobuf field optional bool deprecated = 1 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php new file mode 100644 index 0000000..245173c --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php @@ -0,0 +1,67 @@ +google.protobuf.ExtensionRangeOptions + */ +class ExtensionRangeOptions extends \Google\Protobuf\Internal\Message +{ + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php new file mode 100644 index 0000000..ce83f63 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php @@ -0,0 +1,294 @@ +public_desc = new \Google\Protobuf\FieldDescriptor($this); + } + + public function setOneofIndex($index) + { + $this->oneof_index = $index; + } + + public function getOneofIndex() + { + return $this->oneof_index; + } + + public function setName($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } + + public function setJsonName($json_name) + { + $this->json_name = $json_name; + } + + public function getJsonName() + { + return $this->json_name; + } + + public function setSetter($setter) + { + $this->setter = $setter; + } + + public function getSetter() + { + return $this->setter; + } + + public function setGetter($getter) + { + $this->getter = $getter; + } + + public function getGetter() + { + return $this->getter; + } + + public function setNumber($number) + { + $this->number = $number; + } + + public function getNumber() + { + return $this->number; + } + + public function setLabel($label) + { + $this->label = $label; + } + + public function getLabel() + { + return $this->label; + } + + public function isRepeated() + { + return $this->label === GPBLabel::REPEATED; + } + + public function setType($type) + { + $this->type = $type; + } + + public function getType() + { + return $this->type; + } + + public function setMessageType($message_type) + { + $this->message_type = $message_type; + } + + public function getMessageType() + { + return $this->message_type; + } + + public function setEnumType($enum_type) + { + $this->enum_type = $enum_type; + } + + public function getEnumType() + { + return $this->enum_type; + } + + public function setPacked($packed) + { + $this->packed = $packed; + } + + public function getPacked() + { + return $this->packed; + } + + public function isPackable() + { + return $this->isRepeated() && self::isTypePackable($this->type); + } + + public function isMap() + { + return $this->getType() == GPBType::MESSAGE && + !is_null($this->getMessageType()->getOptions()) && + $this->getMessageType()->getOptions()->getMapEntry(); + } + + public function isTimestamp() + { + return $this->getType() == GPBType::MESSAGE && + $this->getMessageType()->getClass() === "Google\Protobuf\Timestamp"; + } + + public function isWrapperType() + { + if ($this->getType() == GPBType::MESSAGE) { + $class = $this->getMessageType()->getClass(); + return in_array($class, [ + "Google\Protobuf\DoubleValue", + "Google\Protobuf\FloatValue", + "Google\Protobuf\Int64Value", + "Google\Protobuf\UInt64Value", + "Google\Protobuf\Int32Value", + "Google\Protobuf\UInt32Value", + "Google\Protobuf\BoolValue", + "Google\Protobuf\StringValue", + "Google\Protobuf\BytesValue", + ]); + } + return false; + } + + private static function isTypePackable($field_type) + { + return ($field_type !== GPBType::STRING && + $field_type !== GPBType::GROUP && + $field_type !== GPBType::MESSAGE && + $field_type !== GPBType::BYTES); + } + + public static function getFieldDescriptor($proto) + { + $type_name = null; + $type = $proto->getType(); + switch ($type) { + case GPBType::MESSAGE: + case GPBType::GROUP: + case GPBType::ENUM: + $type_name = $proto->getTypeName(); + break; + default: + break; + } + + $oneof_index = $proto->hasOneofIndex() ? $proto->getOneofIndex() : -1; + // TODO: once proto2 is supported, this default should be false + // for proto2. + if ($proto->getLabel() === GPBLabel::REPEATED && + $proto->getType() !== GPBType::MESSAGE && + $proto->getType() !== GPBType::GROUP && + $proto->getType() !== GPBType::STRING && + $proto->getType() !== GPBType::BYTES) { + $packed = true; + } else { + $packed = false; + } + $options = $proto->getOptions(); + if ($options !== null) { + $packed = $options->getPacked(); + } + + $field = new FieldDescriptor(); + $field->setName($proto->getName()); + + $json_name = $proto->hasJsonName() ? $proto->getJsonName() : + lcfirst(implode('', array_map('ucwords', explode('_', $proto->getName())))); + if ($proto->hasJsonName()) { + $json_name = $proto->getJsonName(); + } else { + $proto_name = $proto->getName(); + $json_name = implode('', array_map('ucwords', explode('_', $proto_name))); + if ($proto_name[0] !== "_" && !ctype_upper($proto_name[0])) { + $json_name = lcfirst($json_name); + } + } + $field->setJsonName($json_name); + + $camel_name = implode('', array_map('ucwords', explode('_', $proto->getName()))); + $field->setGetter('get' . $camel_name); + $field->setSetter('set' . $camel_name); + $field->setType($proto->getType()); + $field->setNumber($proto->getNumber()); + $field->setLabel($proto->getLabel()); + $field->setPacked($packed); + $field->setOneofIndex($oneof_index); + + // At this time, the message/enum type may have not been added to pool. + // So we use the type name as place holder and will replace it with the + // actual descriptor in cross building. + switch ($type) { + case GPBType::MESSAGE: + $field->setMessageType($type_name); + break; + case GPBType::ENUM: + $field->setEnumType($type_name); + break; + default: + break; + } + + return $field; + } + + public static function buildFromProto($proto) + { + return FieldDescriptor::getFieldDescriptor($proto); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php new file mode 100644 index 0000000..5e99bff --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php @@ -0,0 +1,611 @@ +google.protobuf.FieldDescriptorProto + */ +class FieldDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field optional int32 number = 3; + */ + protected $number = null; + /** + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; + */ + protected $label = null; + /** + * If type_name is set, this need not be set. If both this and type_name + * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + * + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; + */ + protected $type = null; + /** + * For message and enum types, this is the name of the type. If the name + * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + * rules are used to find the type (i.e. first the nested types within this + * message are searched, then within the parent, on up to the root + * namespace). + * + * Generated from protobuf field optional string type_name = 6; + */ + protected $type_name = null; + /** + * For extensions, this is the name of the type being extended. It is + * resolved in the same manner as type_name. + * + * Generated from protobuf field optional string extendee = 2; + */ + protected $extendee = null; + /** + * For numeric types, contains the original text representation of the value. + * For booleans, "true" or "false". + * For strings, contains the default text contents (not escaped in any way). + * For bytes, contains the C escaped value. All bytes >= 128 are escaped. + * + * Generated from protobuf field optional string default_value = 7; + */ + protected $default_value = null; + /** + * If set, gives the index of a oneof in the containing type's oneof_decl + * list. This field is a member of that oneof. + * + * Generated from protobuf field optional int32 oneof_index = 9; + */ + protected $oneof_index = null; + /** + * JSON name of this field. The value is set by protocol compiler. If the + * user has set a "json_name" option on this field, that option's value + * will be used. Otherwise, it's deduced from the field's name by converting + * it to camelCase. + * + * Generated from protobuf field optional string json_name = 10; + */ + protected $json_name = null; + /** + * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; + */ + protected $options = null; + /** + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. + * + * Generated from protobuf field optional bool proto3_optional = 17; + */ + protected $proto3_optional = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type int $number + * @type int $label + * @type int $type + * If type_name is set, this need not be set. If both this and type_name + * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + * @type string $type_name + * For message and enum types, this is the name of the type. If the name + * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + * rules are used to find the type (i.e. first the nested types within this + * message are searched, then within the parent, on up to the root + * namespace). + * @type string $extendee + * For extensions, this is the name of the type being extended. It is + * resolved in the same manner as type_name. + * @type string $default_value + * For numeric types, contains the original text representation of the value. + * For booleans, "true" or "false". + * For strings, contains the default text contents (not escaped in any way). + * For bytes, contains the C escaped value. All bytes >= 128 are escaped. + * @type int $oneof_index + * If set, gives the index of a oneof in the containing type's oneof_decl + * list. This field is a member of that oneof. + * @type string $json_name + * JSON name of this field. The value is set by protocol compiler. If the + * user has set a "json_name" option on this field, that option's value + * will be used. Otherwise, it's deduced from the field's name by converting + * it to camelCase. + * @type \Google\Protobuf\Internal\FieldOptions $options + * @type bool $proto3_optional + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field optional int32 number = 3; + * @return int + */ + public function getNumber() + { + return isset($this->number) ? $this->number : 0; + } + + public function hasNumber() + { + return isset($this->number); + } + + public function clearNumber() + { + unset($this->number); + } + + /** + * Generated from protobuf field optional int32 number = 3; + * @param int $var + * @return $this + */ + public function setNumber($var) + { + GPBUtil::checkInt32($var); + $this->number = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; + * @return int + */ + public function getLabel() + { + return isset($this->label) ? $this->label : 0; + } + + public function hasLabel() + { + return isset($this->label); + } + + public function clearLabel() + { + unset($this->label); + } + + /** + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; + * @param int $var + * @return $this + */ + public function setLabel($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldDescriptorProto\Label::class); + $this->label = $var; + + return $this; + } + + /** + * If type_name is set, this need not be set. If both this and type_name + * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + * + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; + * @return int + */ + public function getType() + { + return isset($this->type) ? $this->type : 0; + } + + public function hasType() + { + return isset($this->type); + } + + public function clearType() + { + unset($this->type); + } + + /** + * If type_name is set, this need not be set. If both this and type_name + * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + * + * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; + * @param int $var + * @return $this + */ + public function setType($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldDescriptorProto\Type::class); + $this->type = $var; + + return $this; + } + + /** + * For message and enum types, this is the name of the type. If the name + * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + * rules are used to find the type (i.e. first the nested types within this + * message are searched, then within the parent, on up to the root + * namespace). + * + * Generated from protobuf field optional string type_name = 6; + * @return string + */ + public function getTypeName() + { + return isset($this->type_name) ? $this->type_name : ''; + } + + public function hasTypeName() + { + return isset($this->type_name); + } + + public function clearTypeName() + { + unset($this->type_name); + } + + /** + * For message and enum types, this is the name of the type. If the name + * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + * rules are used to find the type (i.e. first the nested types within this + * message are searched, then within the parent, on up to the root + * namespace). + * + * Generated from protobuf field optional string type_name = 6; + * @param string $var + * @return $this + */ + public function setTypeName($var) + { + GPBUtil::checkString($var, True); + $this->type_name = $var; + + return $this; + } + + /** + * For extensions, this is the name of the type being extended. It is + * resolved in the same manner as type_name. + * + * Generated from protobuf field optional string extendee = 2; + * @return string + */ + public function getExtendee() + { + return isset($this->extendee) ? $this->extendee : ''; + } + + public function hasExtendee() + { + return isset($this->extendee); + } + + public function clearExtendee() + { + unset($this->extendee); + } + + /** + * For extensions, this is the name of the type being extended. It is + * resolved in the same manner as type_name. + * + * Generated from protobuf field optional string extendee = 2; + * @param string $var + * @return $this + */ + public function setExtendee($var) + { + GPBUtil::checkString($var, True); + $this->extendee = $var; + + return $this; + } + + /** + * For numeric types, contains the original text representation of the value. + * For booleans, "true" or "false". + * For strings, contains the default text contents (not escaped in any way). + * For bytes, contains the C escaped value. All bytes >= 128 are escaped. + * + * Generated from protobuf field optional string default_value = 7; + * @return string + */ + public function getDefaultValue() + { + return isset($this->default_value) ? $this->default_value : ''; + } + + public function hasDefaultValue() + { + return isset($this->default_value); + } + + public function clearDefaultValue() + { + unset($this->default_value); + } + + /** + * For numeric types, contains the original text representation of the value. + * For booleans, "true" or "false". + * For strings, contains the default text contents (not escaped in any way). + * For bytes, contains the C escaped value. All bytes >= 128 are escaped. + * + * Generated from protobuf field optional string default_value = 7; + * @param string $var + * @return $this + */ + public function setDefaultValue($var) + { + GPBUtil::checkString($var, True); + $this->default_value = $var; + + return $this; + } + + /** + * If set, gives the index of a oneof in the containing type's oneof_decl + * list. This field is a member of that oneof. + * + * Generated from protobuf field optional int32 oneof_index = 9; + * @return int + */ + public function getOneofIndex() + { + return isset($this->oneof_index) ? $this->oneof_index : 0; + } + + public function hasOneofIndex() + { + return isset($this->oneof_index); + } + + public function clearOneofIndex() + { + unset($this->oneof_index); + } + + /** + * If set, gives the index of a oneof in the containing type's oneof_decl + * list. This field is a member of that oneof. + * + * Generated from protobuf field optional int32 oneof_index = 9; + * @param int $var + * @return $this + */ + public function setOneofIndex($var) + { + GPBUtil::checkInt32($var); + $this->oneof_index = $var; + + return $this; + } + + /** + * JSON name of this field. The value is set by protocol compiler. If the + * user has set a "json_name" option on this field, that option's value + * will be used. Otherwise, it's deduced from the field's name by converting + * it to camelCase. + * + * Generated from protobuf field optional string json_name = 10; + * @return string + */ + public function getJsonName() + { + return isset($this->json_name) ? $this->json_name : ''; + } + + public function hasJsonName() + { + return isset($this->json_name); + } + + public function clearJsonName() + { + unset($this->json_name); + } + + /** + * JSON name of this field. The value is set by protocol compiler. If the + * user has set a "json_name" option on this field, that option's value + * will be used. Otherwise, it's deduced from the field's name by converting + * it to camelCase. + * + * Generated from protobuf field optional string json_name = 10; + * @param string $var + * @return $this + */ + public function setJsonName($var) + { + GPBUtil::checkString($var, True); + $this->json_name = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; + * @return \Google\Protobuf\Internal\FieldOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; + * @param \Google\Protobuf\Internal\FieldOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\FieldOptions::class); + $this->options = $var; + + return $this; + } + + /** + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. + * + * Generated from protobuf field optional bool proto3_optional = 17; + * @return bool + */ + public function getProto3Optional() + { + return isset($this->proto3_optional) ? $this->proto3_optional : false; + } + + public function hasProto3Optional() + { + return isset($this->proto3_optional); + } + + public function clearProto3Optional() + { + unset($this->proto3_optional); + } + + /** + * If true, this is a proto3 "optional". When a proto3 field is optional, it + * tracks presence regardless of field type. + * When proto3_optional is true, this field must be belong to a oneof to + * signal to old proto3 clients that presence is tracked for this field. This + * oneof is known as a "synthetic" oneof, and this field must be its sole + * member (each proto3 optional field gets its own synthetic oneof). Synthetic + * oneofs exist in the descriptor only, and do not generate any API. Synthetic + * oneofs must be ordered after all "real" oneofs. + * For message fields, proto3_optional doesn't create any semantic change, + * since non-repeated message fields always track presence. However it still + * indicates the semantic detail of whether the user wrote "optional" or not. + * This can be useful for round-tripping the .proto file. For consistency we + * give message fields a synthetic oneof also, even though it is not required + * to track presence. This is especially important because the parser can't + * tell if a field is a message or an enum, so it must always create a + * synthetic oneof. + * Proto2 optional fields do not set this flag, because they already indicate + * optional with `LABEL_OPTIONAL`. + * + * Generated from protobuf field optional bool proto3_optional = 17; + * @param bool $var + * @return $this + */ + public function setProto3Optional($var) + { + GPBUtil::checkBool($var); + $this->proto3_optional = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php new file mode 100644 index 0000000..a54b228 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php @@ -0,0 +1,58 @@ +google.protobuf.FieldDescriptorProto.Label + */ +class Label +{ + /** + * 0 is reserved for errors + * + * Generated from protobuf enum LABEL_OPTIONAL = 1; + */ + const LABEL_OPTIONAL = 1; + /** + * Generated from protobuf enum LABEL_REQUIRED = 2; + */ + const LABEL_REQUIRED = 2; + /** + * Generated from protobuf enum LABEL_REPEATED = 3; + */ + const LABEL_REPEATED = 3; + + private static $valueToName = [ + self::LABEL_OPTIONAL => 'LABEL_OPTIONAL', + self::LABEL_REQUIRED => 'LABEL_REQUIRED', + self::LABEL_REPEATED => 'LABEL_REPEATED', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Label::class, \Google\Protobuf\Internal\FieldDescriptorProto_Label::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php new file mode 100644 index 0000000..6072e99 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php @@ -0,0 +1,153 @@ +google.protobuf.FieldDescriptorProto.Type + */ +class Type +{ + /** + * 0 is reserved for errors. + * Order is weird for historical reasons. + * + * Generated from protobuf enum TYPE_DOUBLE = 1; + */ + const TYPE_DOUBLE = 1; + /** + * Generated from protobuf enum TYPE_FLOAT = 2; + */ + const TYPE_FLOAT = 2; + /** + * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + * negative values are likely. + * + * Generated from protobuf enum TYPE_INT64 = 3; + */ + const TYPE_INT64 = 3; + /** + * Generated from protobuf enum TYPE_UINT64 = 4; + */ + const TYPE_UINT64 = 4; + /** + * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + * negative values are likely. + * + * Generated from protobuf enum TYPE_INT32 = 5; + */ + const TYPE_INT32 = 5; + /** + * Generated from protobuf enum TYPE_FIXED64 = 6; + */ + const TYPE_FIXED64 = 6; + /** + * Generated from protobuf enum TYPE_FIXED32 = 7; + */ + const TYPE_FIXED32 = 7; + /** + * Generated from protobuf enum TYPE_BOOL = 8; + */ + const TYPE_BOOL = 8; + /** + * Generated from protobuf enum TYPE_STRING = 9; + */ + const TYPE_STRING = 9; + /** + * Tag-delimited aggregate. + * Group type is deprecated and not supported in proto3. However, Proto3 + * implementations should still be able to parse the group wire format and + * treat group fields as unknown fields. + * + * Generated from protobuf enum TYPE_GROUP = 10; + */ + const TYPE_GROUP = 10; + /** + * Length-delimited aggregate. + * + * Generated from protobuf enum TYPE_MESSAGE = 11; + */ + const TYPE_MESSAGE = 11; + /** + * New in version 2. + * + * Generated from protobuf enum TYPE_BYTES = 12; + */ + const TYPE_BYTES = 12; + /** + * Generated from protobuf enum TYPE_UINT32 = 13; + */ + const TYPE_UINT32 = 13; + /** + * Generated from protobuf enum TYPE_ENUM = 14; + */ + const TYPE_ENUM = 14; + /** + * Generated from protobuf enum TYPE_SFIXED32 = 15; + */ + const TYPE_SFIXED32 = 15; + /** + * Generated from protobuf enum TYPE_SFIXED64 = 16; + */ + const TYPE_SFIXED64 = 16; + /** + * Uses ZigZag encoding. + * + * Generated from protobuf enum TYPE_SINT32 = 17; + */ + const TYPE_SINT32 = 17; + /** + * Uses ZigZag encoding. + * + * Generated from protobuf enum TYPE_SINT64 = 18; + */ + const TYPE_SINT64 = 18; + + private static $valueToName = [ + self::TYPE_DOUBLE => 'TYPE_DOUBLE', + self::TYPE_FLOAT => 'TYPE_FLOAT', + self::TYPE_INT64 => 'TYPE_INT64', + self::TYPE_UINT64 => 'TYPE_UINT64', + self::TYPE_INT32 => 'TYPE_INT32', + self::TYPE_FIXED64 => 'TYPE_FIXED64', + self::TYPE_FIXED32 => 'TYPE_FIXED32', + self::TYPE_BOOL => 'TYPE_BOOL', + self::TYPE_STRING => 'TYPE_STRING', + self::TYPE_GROUP => 'TYPE_GROUP', + self::TYPE_MESSAGE => 'TYPE_MESSAGE', + self::TYPE_BYTES => 'TYPE_BYTES', + self::TYPE_UINT32 => 'TYPE_UINT32', + self::TYPE_ENUM => 'TYPE_ENUM', + self::TYPE_SFIXED32 => 'TYPE_SFIXED32', + self::TYPE_SFIXED64 => 'TYPE_SFIXED64', + self::TYPE_SINT32 => 'TYPE_SINT32', + self::TYPE_SINT64 => 'TYPE_SINT64', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Type::class, \Google\Protobuf\Internal\FieldDescriptorProto_Type::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php new file mode 100644 index 0000000..218a846 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php @@ -0,0 +1,16 @@ +google.protobuf.FieldOptions + */ +class FieldOptions extends \Google\Protobuf\Internal\Message +{ + /** + * The ctype option instructs the C++ code generator to use a different + * representation of the field than it normally would. See the specific + * options below. This option is not yet implemented in the open source + * release -- sorry, we'll try to include it in a future version! + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; + */ + protected $ctype = null; + /** + * The packed option can be enabled for repeated primitive fields to enable + * a more efficient representation on the wire. Rather than repeatedly + * writing the tag and type for each element, the entire array is encoded as + * a single length-delimited blob. In proto3, only explicit setting it to + * false will avoid using packed encoding. + * + * Generated from protobuf field optional bool packed = 2; + */ + protected $packed = null; + /** + * The jstype option determines the JavaScript type used for values of the + * field. The option is permitted only for 64 bit integral and fixed types + * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + * is represented as JavaScript string, which avoids loss of precision that + * can happen when a large value is converted to a floating point JavaScript. + * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + * use the JavaScript "number" type. The behavior of the default option + * JS_NORMAL is implementation dependent. + * This option is an enum to permit additional types to be added, e.g. + * goog.math.Integer. + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; + */ + protected $jstype = null; + /** + * Should this field be parsed lazily? Lazy applies only to message-type + * fields. It means that when the outer message is initially parsed, the + * inner message's contents will not be parsed but instead stored in encoded + * form. The inner message will actually be parsed when it is first accessed. + * This is only a hint. Implementations are free to choose whether to use + * eager or lazy parsing regardless of the value of this option. However, + * setting this option true suggests that the protocol author believes that + * using lazy parsing on this field is worth the additional bookkeeping + * overhead typically needed to implement it. + * This option does not affect the public interface of any generated code; + * all method signatures remain the same. Furthermore, thread-safety of the + * interface is not affected by this option; const methods remain safe to + * call from multiple threads concurrently, while non-const methods continue + * to require exclusive access. + * Note that implementations may choose not to check required fields within + * a lazy sub-message. That is, calling IsInitialized() on the outer message + * may return true even if the inner message has missing required fields. + * This is necessary because otherwise the inner message would have to be + * parsed in order to perform the check, defeating the purpose of lazy + * parsing. An implementation which chooses not to check required fields + * must be consistent about it. That is, for any particular sub-message, the + * implementation must either *always* check its required fields, or *never* + * check its required fields, regardless of whether or not the message has + * been parsed. + * As of 2021, lazy does no correctness checks on the byte stream during + * parsing. This may lead to crashes if and when an invalid byte stream is + * finally parsed upon access. + * TODO(b/211906113): Enable validation on lazy fields. + * + * Generated from protobuf field optional bool lazy = 5 [default = false]; + */ + protected $lazy = null; + /** + * unverified_lazy does no correctness checks on the byte stream. This should + * only be used where lazy with verification is prohibitive for performance + * reasons. + * + * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; + */ + protected $unverified_lazy = null; + /** + * Is this field deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for accessors, or it will be completely ignored; in the very least, this + * is a formalization for deprecating fields. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + */ + protected $deprecated = null; + /** + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field optional bool weak = 10 [default = false]; + */ + protected $weak = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $ctype + * The ctype option instructs the C++ code generator to use a different + * representation of the field than it normally would. See the specific + * options below. This option is not yet implemented in the open source + * release -- sorry, we'll try to include it in a future version! + * @type bool $packed + * The packed option can be enabled for repeated primitive fields to enable + * a more efficient representation on the wire. Rather than repeatedly + * writing the tag and type for each element, the entire array is encoded as + * a single length-delimited blob. In proto3, only explicit setting it to + * false will avoid using packed encoding. + * @type int $jstype + * The jstype option determines the JavaScript type used for values of the + * field. The option is permitted only for 64 bit integral and fixed types + * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + * is represented as JavaScript string, which avoids loss of precision that + * can happen when a large value is converted to a floating point JavaScript. + * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + * use the JavaScript "number" type. The behavior of the default option + * JS_NORMAL is implementation dependent. + * This option is an enum to permit additional types to be added, e.g. + * goog.math.Integer. + * @type bool $lazy + * Should this field be parsed lazily? Lazy applies only to message-type + * fields. It means that when the outer message is initially parsed, the + * inner message's contents will not be parsed but instead stored in encoded + * form. The inner message will actually be parsed when it is first accessed. + * This is only a hint. Implementations are free to choose whether to use + * eager or lazy parsing regardless of the value of this option. However, + * setting this option true suggests that the protocol author believes that + * using lazy parsing on this field is worth the additional bookkeeping + * overhead typically needed to implement it. + * This option does not affect the public interface of any generated code; + * all method signatures remain the same. Furthermore, thread-safety of the + * interface is not affected by this option; const methods remain safe to + * call from multiple threads concurrently, while non-const methods continue + * to require exclusive access. + * Note that implementations may choose not to check required fields within + * a lazy sub-message. That is, calling IsInitialized() on the outer message + * may return true even if the inner message has missing required fields. + * This is necessary because otherwise the inner message would have to be + * parsed in order to perform the check, defeating the purpose of lazy + * parsing. An implementation which chooses not to check required fields + * must be consistent about it. That is, for any particular sub-message, the + * implementation must either *always* check its required fields, or *never* + * check its required fields, regardless of whether or not the message has + * been parsed. + * As of 2021, lazy does no correctness checks on the byte stream during + * parsing. This may lead to crashes if and when an invalid byte stream is + * finally parsed upon access. + * TODO(b/211906113): Enable validation on lazy fields. + * @type bool $unverified_lazy + * unverified_lazy does no correctness checks on the byte stream. This should + * only be used where lazy with verification is prohibitive for performance + * reasons. + * @type bool $deprecated + * Is this field deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for accessors, or it will be completely ignored; in the very least, this + * is a formalization for deprecating fields. + * @type bool $weak + * For Google-internal migration only. Do not use. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * The ctype option instructs the C++ code generator to use a different + * representation of the field than it normally would. See the specific + * options below. This option is not yet implemented in the open source + * release -- sorry, we'll try to include it in a future version! + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; + * @return int + */ + public function getCtype() + { + return isset($this->ctype) ? $this->ctype : 0; + } + + public function hasCtype() + { + return isset($this->ctype); + } + + public function clearCtype() + { + unset($this->ctype); + } + + /** + * The ctype option instructs the C++ code generator to use a different + * representation of the field than it normally would. See the specific + * options below. This option is not yet implemented in the open source + * release -- sorry, we'll try to include it in a future version! + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; + * @param int $var + * @return $this + */ + public function setCtype($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldOptions\CType::class); + $this->ctype = $var; + + return $this; + } + + /** + * The packed option can be enabled for repeated primitive fields to enable + * a more efficient representation on the wire. Rather than repeatedly + * writing the tag and type for each element, the entire array is encoded as + * a single length-delimited blob. In proto3, only explicit setting it to + * false will avoid using packed encoding. + * + * Generated from protobuf field optional bool packed = 2; + * @return bool + */ + public function getPacked() + { + return isset($this->packed) ? $this->packed : false; + } + + public function hasPacked() + { + return isset($this->packed); + } + + public function clearPacked() + { + unset($this->packed); + } + + /** + * The packed option can be enabled for repeated primitive fields to enable + * a more efficient representation on the wire. Rather than repeatedly + * writing the tag and type for each element, the entire array is encoded as + * a single length-delimited blob. In proto3, only explicit setting it to + * false will avoid using packed encoding. + * + * Generated from protobuf field optional bool packed = 2; + * @param bool $var + * @return $this + */ + public function setPacked($var) + { + GPBUtil::checkBool($var); + $this->packed = $var; + + return $this; + } + + /** + * The jstype option determines the JavaScript type used for values of the + * field. The option is permitted only for 64 bit integral and fixed types + * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + * is represented as JavaScript string, which avoids loss of precision that + * can happen when a large value is converted to a floating point JavaScript. + * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + * use the JavaScript "number" type. The behavior of the default option + * JS_NORMAL is implementation dependent. + * This option is an enum to permit additional types to be added, e.g. + * goog.math.Integer. + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; + * @return int + */ + public function getJstype() + { + return isset($this->jstype) ? $this->jstype : 0; + } + + public function hasJstype() + { + return isset($this->jstype); + } + + public function clearJstype() + { + unset($this->jstype); + } + + /** + * The jstype option determines the JavaScript type used for values of the + * field. The option is permitted only for 64 bit integral and fixed types + * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + * is represented as JavaScript string, which avoids loss of precision that + * can happen when a large value is converted to a floating point JavaScript. + * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + * use the JavaScript "number" type. The behavior of the default option + * JS_NORMAL is implementation dependent. + * This option is an enum to permit additional types to be added, e.g. + * goog.math.Integer. + * + * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; + * @param int $var + * @return $this + */ + public function setJstype($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldOptions\JSType::class); + $this->jstype = $var; + + return $this; + } + + /** + * Should this field be parsed lazily? Lazy applies only to message-type + * fields. It means that when the outer message is initially parsed, the + * inner message's contents will not be parsed but instead stored in encoded + * form. The inner message will actually be parsed when it is first accessed. + * This is only a hint. Implementations are free to choose whether to use + * eager or lazy parsing regardless of the value of this option. However, + * setting this option true suggests that the protocol author believes that + * using lazy parsing on this field is worth the additional bookkeeping + * overhead typically needed to implement it. + * This option does not affect the public interface of any generated code; + * all method signatures remain the same. Furthermore, thread-safety of the + * interface is not affected by this option; const methods remain safe to + * call from multiple threads concurrently, while non-const methods continue + * to require exclusive access. + * Note that implementations may choose not to check required fields within + * a lazy sub-message. That is, calling IsInitialized() on the outer message + * may return true even if the inner message has missing required fields. + * This is necessary because otherwise the inner message would have to be + * parsed in order to perform the check, defeating the purpose of lazy + * parsing. An implementation which chooses not to check required fields + * must be consistent about it. That is, for any particular sub-message, the + * implementation must either *always* check its required fields, or *never* + * check its required fields, regardless of whether or not the message has + * been parsed. + * As of 2021, lazy does no correctness checks on the byte stream during + * parsing. This may lead to crashes if and when an invalid byte stream is + * finally parsed upon access. + * TODO(b/211906113): Enable validation on lazy fields. + * + * Generated from protobuf field optional bool lazy = 5 [default = false]; + * @return bool + */ + public function getLazy() + { + return isset($this->lazy) ? $this->lazy : false; + } + + public function hasLazy() + { + return isset($this->lazy); + } + + public function clearLazy() + { + unset($this->lazy); + } + + /** + * Should this field be parsed lazily? Lazy applies only to message-type + * fields. It means that when the outer message is initially parsed, the + * inner message's contents will not be parsed but instead stored in encoded + * form. The inner message will actually be parsed when it is first accessed. + * This is only a hint. Implementations are free to choose whether to use + * eager or lazy parsing regardless of the value of this option. However, + * setting this option true suggests that the protocol author believes that + * using lazy parsing on this field is worth the additional bookkeeping + * overhead typically needed to implement it. + * This option does not affect the public interface of any generated code; + * all method signatures remain the same. Furthermore, thread-safety of the + * interface is not affected by this option; const methods remain safe to + * call from multiple threads concurrently, while non-const methods continue + * to require exclusive access. + * Note that implementations may choose not to check required fields within + * a lazy sub-message. That is, calling IsInitialized() on the outer message + * may return true even if the inner message has missing required fields. + * This is necessary because otherwise the inner message would have to be + * parsed in order to perform the check, defeating the purpose of lazy + * parsing. An implementation which chooses not to check required fields + * must be consistent about it. That is, for any particular sub-message, the + * implementation must either *always* check its required fields, or *never* + * check its required fields, regardless of whether or not the message has + * been parsed. + * As of 2021, lazy does no correctness checks on the byte stream during + * parsing. This may lead to crashes if and when an invalid byte stream is + * finally parsed upon access. + * TODO(b/211906113): Enable validation on lazy fields. + * + * Generated from protobuf field optional bool lazy = 5 [default = false]; + * @param bool $var + * @return $this + */ + public function setLazy($var) + { + GPBUtil::checkBool($var); + $this->lazy = $var; + + return $this; + } + + /** + * unverified_lazy does no correctness checks on the byte stream. This should + * only be used where lazy with verification is prohibitive for performance + * reasons. + * + * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; + * @return bool + */ + public function getUnverifiedLazy() + { + return isset($this->unverified_lazy) ? $this->unverified_lazy : false; + } + + public function hasUnverifiedLazy() + { + return isset($this->unverified_lazy); + } + + public function clearUnverifiedLazy() + { + unset($this->unverified_lazy); + } + + /** + * unverified_lazy does no correctness checks on the byte stream. This should + * only be used where lazy with verification is prohibitive for performance + * reasons. + * + * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; + * @param bool $var + * @return $this + */ + public function setUnverifiedLazy($var) + { + GPBUtil::checkBool($var); + $this->unverified_lazy = $var; + + return $this; + } + + /** + * Is this field deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for accessors, or it will be completely ignored; in the very least, this + * is a formalization for deprecating fields. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this field deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for accessors, or it will be completely ignored; in the very least, this + * is a formalization for deprecating fields. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field optional bool weak = 10 [default = false]; + * @return bool + */ + public function getWeak() + { + return isset($this->weak) ? $this->weak : false; + } + + public function hasWeak() + { + return isset($this->weak); + } + + public function clearWeak() + { + unset($this->weak); + } + + /** + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field optional bool weak = 10 [default = false]; + * @param bool $var + * @return $this + */ + public function setWeak($var) + { + GPBUtil::checkBool($var); + $this->weak = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php new file mode 100644 index 0000000..ba9eb4a --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php @@ -0,0 +1,58 @@ +google.protobuf.FieldOptions.CType + */ +class CType +{ + /** + * Default mode. + * + * Generated from protobuf enum STRING = 0; + */ + const STRING = 0; + /** + * Generated from protobuf enum CORD = 1; + */ + const CORD = 1; + /** + * Generated from protobuf enum STRING_PIECE = 2; + */ + const STRING_PIECE = 2; + + private static $valueToName = [ + self::STRING => 'STRING', + self::CORD => 'CORD', + self::STRING_PIECE => 'STRING_PIECE', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(CType::class, \Google\Protobuf\Internal\FieldOptions_CType::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php new file mode 100644 index 0000000..175a433 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php @@ -0,0 +1,62 @@ +google.protobuf.FieldOptions.JSType + */ +class JSType +{ + /** + * Use the default type. + * + * Generated from protobuf enum JS_NORMAL = 0; + */ + const JS_NORMAL = 0; + /** + * Use JavaScript strings. + * + * Generated from protobuf enum JS_STRING = 1; + */ + const JS_STRING = 1; + /** + * Use JavaScript numbers. + * + * Generated from protobuf enum JS_NUMBER = 2; + */ + const JS_NUMBER = 2; + + private static $valueToName = [ + self::JS_NORMAL => 'JS_NORMAL', + self::JS_STRING => 'JS_STRING', + self::JS_NUMBER => 'JS_NUMBER', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(JSType::class, \Google\Protobuf\Internal\FieldOptions_JSType::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php new file mode 100644 index 0000000..4d18783 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php @@ -0,0 +1,16 @@ +package = $package; + } + + public function getPackage() + { + return $this->package; + } + + public function getMessageType() + { + return $this->message_type; + } + + public function addMessageType($desc) + { + $this->message_type[] = $desc; + } + + public function getEnumType() + { + return $this->enum_type; + } + + public function addEnumType($desc) + { + $this->enum_type[]= $desc; + } + + public static function buildFromProto($proto) + { + $file = new FileDescriptor(); + $file->setPackage($proto->getPackage()); + foreach ($proto->getMessageType() as $message_proto) { + $file->addMessageType(Descriptor::buildFromProto( + $message_proto, $proto, "")); + } + foreach ($proto->getEnumType() as $enum_proto) { + $file->addEnumType( + EnumDescriptor::buildFromProto( + $enum_proto, + $proto, + "")); + } + return $file; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php new file mode 100644 index 0000000..5ba7db6 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php @@ -0,0 +1,485 @@ +google.protobuf.FileDescriptorProto + */ +class FileDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * file name, relative to root of source tree + * + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * e.g. "foo", "foo.bar", etc. + * + * Generated from protobuf field optional string package = 2; + */ + protected $package = null; + /** + * Names of files imported by this file. + * + * Generated from protobuf field repeated string dependency = 3; + */ + private $dependency; + /** + * Indexes of the public imported files in the dependency list above. + * + * Generated from protobuf field repeated int32 public_dependency = 10; + */ + private $public_dependency; + /** + * Indexes of the weak imported files in the dependency list. + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field repeated int32 weak_dependency = 11; + */ + private $weak_dependency; + /** + * All top-level definitions in this file. + * + * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; + */ + private $message_type; + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + */ + private $enum_type; + /** + * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; + */ + private $service; + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; + */ + private $extension; + /** + * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; + */ + protected $options = null; + /** + * This field contains optional information about the original source code. + * You may safely remove this entire field without harming runtime + * functionality of the descriptors -- the information is needed only by + * development tools. + * + * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; + */ + protected $source_code_info = null; + /** + * The syntax of the proto file. + * The supported values are "proto2" and "proto3". + * + * Generated from protobuf field optional string syntax = 12; + */ + protected $syntax = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * file name, relative to root of source tree + * @type string $package + * e.g. "foo", "foo.bar", etc. + * @type array|\Google\Protobuf\Internal\RepeatedField $dependency + * Names of files imported by this file. + * @type array|\Google\Protobuf\Internal\RepeatedField $public_dependency + * Indexes of the public imported files in the dependency list above. + * @type array|\Google\Protobuf\Internal\RepeatedField $weak_dependency + * Indexes of the weak imported files in the dependency list. + * For Google-internal migration only. Do not use. + * @type array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $message_type + * All top-level definitions in this file. + * @type array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $enum_type + * @type array<\Google\Protobuf\Internal\ServiceDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $service + * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $extension + * @type \Google\Protobuf\Internal\FileOptions $options + * @type \Google\Protobuf\Internal\SourceCodeInfo $source_code_info + * This field contains optional information about the original source code. + * You may safely remove this entire field without harming runtime + * functionality of the descriptors -- the information is needed only by + * development tools. + * @type string $syntax + * The syntax of the proto file. + * The supported values are "proto2" and "proto3". + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * file name, relative to root of source tree + * + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * file name, relative to root of source tree + * + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * e.g. "foo", "foo.bar", etc. + * + * Generated from protobuf field optional string package = 2; + * @return string + */ + public function getPackage() + { + return isset($this->package) ? $this->package : ''; + } + + public function hasPackage() + { + return isset($this->package); + } + + public function clearPackage() + { + unset($this->package); + } + + /** + * e.g. "foo", "foo.bar", etc. + * + * Generated from protobuf field optional string package = 2; + * @param string $var + * @return $this + */ + public function setPackage($var) + { + GPBUtil::checkString($var, True); + $this->package = $var; + + return $this; + } + + /** + * Names of files imported by this file. + * + * Generated from protobuf field repeated string dependency = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getDependency() + { + return $this->dependency; + } + + /** + * Names of files imported by this file. + * + * Generated from protobuf field repeated string dependency = 3; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setDependency($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->dependency = $arr; + + return $this; + } + + /** + * Indexes of the public imported files in the dependency list above. + * + * Generated from protobuf field repeated int32 public_dependency = 10; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getPublicDependency() + { + return $this->public_dependency; + } + + /** + * Indexes of the public imported files in the dependency list above. + * + * Generated from protobuf field repeated int32 public_dependency = 10; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setPublicDependency($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->public_dependency = $arr; + + return $this; + } + + /** + * Indexes of the weak imported files in the dependency list. + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field repeated int32 weak_dependency = 11; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getWeakDependency() + { + return $this->weak_dependency; + } + + /** + * Indexes of the weak imported files in the dependency list. + * For Google-internal migration only. Do not use. + * + * Generated from protobuf field repeated int32 weak_dependency = 11; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setWeakDependency($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->weak_dependency = $arr; + + return $this; + } + + /** + * All top-level definitions in this file. + * + * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getMessageType() + { + return $this->message_type; + } + + /** + * All top-level definitions in this file. + * + * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; + * @param array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setMessageType($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto::class); + $this->message_type = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getEnumType() + { + return $this->enum_type; + } + + /** + * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + * @param array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setEnumType($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto::class); + $this->enum_type = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getService() + { + return $this->service; + } + + /** + * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; + * @param array<\Google\Protobuf\Internal\ServiceDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setService($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\ServiceDescriptorProto::class); + $this->service = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getExtension() + { + return $this->extension; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; + * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setExtension($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); + $this->extension = $arr; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; + * @return \Google\Protobuf\Internal\FileOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; + * @param \Google\Protobuf\Internal\FileOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\FileOptions::class); + $this->options = $var; + + return $this; + } + + /** + * This field contains optional information about the original source code. + * You may safely remove this entire field without harming runtime + * functionality of the descriptors -- the information is needed only by + * development tools. + * + * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; + * @return \Google\Protobuf\Internal\SourceCodeInfo|null + */ + public function getSourceCodeInfo() + { + return $this->source_code_info; + } + + public function hasSourceCodeInfo() + { + return isset($this->source_code_info); + } + + public function clearSourceCodeInfo() + { + unset($this->source_code_info); + } + + /** + * This field contains optional information about the original source code. + * You may safely remove this entire field without harming runtime + * functionality of the descriptors -- the information is needed only by + * development tools. + * + * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; + * @param \Google\Protobuf\Internal\SourceCodeInfo $var + * @return $this + */ + public function setSourceCodeInfo($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\SourceCodeInfo::class); + $this->source_code_info = $var; + + return $this; + } + + /** + * The syntax of the proto file. + * The supported values are "proto2" and "proto3". + * + * Generated from protobuf field optional string syntax = 12; + * @return string + */ + public function getSyntax() + { + return isset($this->syntax) ? $this->syntax : ''; + } + + public function hasSyntax() + { + return isset($this->syntax); + } + + public function clearSyntax() + { + unset($this->syntax); + } + + /** + * The syntax of the proto file. + * The supported values are "proto2" and "proto3". + * + * Generated from protobuf field optional string syntax = 12; + * @param string $var + * @return $this + */ + public function setSyntax($var) + { + GPBUtil::checkString($var, True); + $this->syntax = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php new file mode 100644 index 0000000..1dae6fb --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php @@ -0,0 +1,63 @@ +google.protobuf.FileDescriptorSet + */ +class FileDescriptorSet extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; + */ + private $file; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\FileDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $file + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getFile() + { + return $this->file; + } + + /** + * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; + * @param array<\Google\Protobuf\Internal\FileDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setFile($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FileDescriptorProto::class); + $this->file = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php new file mode 100644 index 0000000..43931be --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php @@ -0,0 +1,1106 @@ +google.protobuf.FileOptions + */ +class FileOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Sets the Java package where classes generated from this .proto will be + * placed. By default, the proto package is used, but this is often + * inappropriate because proto packages do not normally start with backwards + * domain names. + * + * Generated from protobuf field optional string java_package = 1; + */ + protected $java_package = null; + /** + * Controls the name of the wrapper Java class generated for the .proto file. + * That class will always contain the .proto file's getDescriptor() method as + * well as any top-level extensions defined in the .proto file. + * If java_multiple_files is disabled, then all the other classes from the + * .proto file will be nested inside the single wrapper outer class. + * + * Generated from protobuf field optional string java_outer_classname = 8; + */ + protected $java_outer_classname = null; + /** + * If enabled, then the Java code generator will generate a separate .java + * file for each top-level message, enum, and service defined in the .proto + * file. Thus, these types will *not* be nested inside the wrapper class + * named by java_outer_classname. However, the wrapper class will still be + * generated to contain the file's getDescriptor() method as well as any + * top-level extensions defined in the file. + * + * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; + */ + protected $java_multiple_files = null; + /** + * This option does nothing. + * + * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; + * @deprecated + */ + protected $java_generate_equals_and_hash = null; + /** + * If set true, then the Java2 code generator will generate code that + * throws an exception whenever an attempt is made to assign a non-UTF-8 + * byte sequence to a string field. + * Message reflection will do the same. + * However, an extension field still accepts non-UTF-8 byte sequences. + * This option has no effect on when used with the lite runtime. + * + * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; + */ + protected $java_string_check_utf8 = null; + /** + * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; + */ + protected $optimize_for = null; + /** + * Sets the Go package where structs generated from this .proto will be + * placed. If omitted, the Go package will be derived from the following: + * - The basename of the package import path, if provided. + * - Otherwise, the package statement in the .proto file, if present. + * - Otherwise, the basename of the .proto file, without extension. + * + * Generated from protobuf field optional string go_package = 11; + */ + protected $go_package = null; + /** + * Should generic services be generated in each language? "Generic" services + * are not specific to any particular RPC system. They are generated by the + * main code generators in each language (without additional plugins). + * Generic services were the only kind of service generation supported by + * early versions of google.protobuf. + * Generic services are now considered deprecated in favor of using plugins + * that generate code specific to your particular RPC system. Therefore, + * these default to false. Old code which depends on generic services should + * explicitly set them to true. + * + * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; + */ + protected $cc_generic_services = null; + /** + * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; + */ + protected $java_generic_services = null; + /** + * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; + */ + protected $py_generic_services = null; + /** + * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; + */ + protected $php_generic_services = null; + /** + * Is this file deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for everything in the file, or it will be completely ignored; in the very + * least, this is a formalization for deprecating files. + * + * Generated from protobuf field optional bool deprecated = 23 [default = false]; + */ + protected $deprecated = null; + /** + * Enables the use of arenas for the proto messages in this file. This applies + * only to generated classes for C++. + * + * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; + */ + protected $cc_enable_arenas = null; + /** + * Sets the objective c class prefix which is prepended to all objective c + * generated classes from this .proto. There is no default. + * + * Generated from protobuf field optional string objc_class_prefix = 36; + */ + protected $objc_class_prefix = null; + /** + * Namespace for generated classes; defaults to the package. + * + * Generated from protobuf field optional string csharp_namespace = 37; + */ + protected $csharp_namespace = null; + /** + * By default Swift generators will take the proto package and CamelCase it + * replacing '.' with underscore and use that to prefix the types/symbols + * defined. When this options is provided, they will use this value instead + * to prefix the types/symbols defined. + * + * Generated from protobuf field optional string swift_prefix = 39; + */ + protected $swift_prefix = null; + /** + * Sets the php class prefix which is prepended to all php generated classes + * from this .proto. Default is empty. + * + * Generated from protobuf field optional string php_class_prefix = 40; + */ + protected $php_class_prefix = null; + /** + * Use this option to change the namespace of php generated classes. Default + * is empty. When this option is empty, the package name will be used for + * determining the namespace. + * + * Generated from protobuf field optional string php_namespace = 41; + */ + protected $php_namespace = null; + /** + * Use this option to change the namespace of php generated metadata classes. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. + * + * Generated from protobuf field optional string php_metadata_namespace = 44; + */ + protected $php_metadata_namespace = null; + /** + * Use this option to change the package of ruby generated classes. Default + * is empty. When this option is not set, the package name will be used for + * determining the ruby package. + * + * Generated from protobuf field optional string ruby_package = 45; + */ + protected $ruby_package = null; + /** + * The parser stores options it doesn't recognize here. + * See the documentation for the "Options" section above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $java_package + * Sets the Java package where classes generated from this .proto will be + * placed. By default, the proto package is used, but this is often + * inappropriate because proto packages do not normally start with backwards + * domain names. + * @type string $java_outer_classname + * Controls the name of the wrapper Java class generated for the .proto file. + * That class will always contain the .proto file's getDescriptor() method as + * well as any top-level extensions defined in the .proto file. + * If java_multiple_files is disabled, then all the other classes from the + * .proto file will be nested inside the single wrapper outer class. + * @type bool $java_multiple_files + * If enabled, then the Java code generator will generate a separate .java + * file for each top-level message, enum, and service defined in the .proto + * file. Thus, these types will *not* be nested inside the wrapper class + * named by java_outer_classname. However, the wrapper class will still be + * generated to contain the file's getDescriptor() method as well as any + * top-level extensions defined in the file. + * @type bool $java_generate_equals_and_hash + * This option does nothing. + * @type bool $java_string_check_utf8 + * If set true, then the Java2 code generator will generate code that + * throws an exception whenever an attempt is made to assign a non-UTF-8 + * byte sequence to a string field. + * Message reflection will do the same. + * However, an extension field still accepts non-UTF-8 byte sequences. + * This option has no effect on when used with the lite runtime. + * @type int $optimize_for + * @type string $go_package + * Sets the Go package where structs generated from this .proto will be + * placed. If omitted, the Go package will be derived from the following: + * - The basename of the package import path, if provided. + * - Otherwise, the package statement in the .proto file, if present. + * - Otherwise, the basename of the .proto file, without extension. + * @type bool $cc_generic_services + * Should generic services be generated in each language? "Generic" services + * are not specific to any particular RPC system. They are generated by the + * main code generators in each language (without additional plugins). + * Generic services were the only kind of service generation supported by + * early versions of google.protobuf. + * Generic services are now considered deprecated in favor of using plugins + * that generate code specific to your particular RPC system. Therefore, + * these default to false. Old code which depends on generic services should + * explicitly set them to true. + * @type bool $java_generic_services + * @type bool $py_generic_services + * @type bool $php_generic_services + * @type bool $deprecated + * Is this file deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for everything in the file, or it will be completely ignored; in the very + * least, this is a formalization for deprecating files. + * @type bool $cc_enable_arenas + * Enables the use of arenas for the proto messages in this file. This applies + * only to generated classes for C++. + * @type string $objc_class_prefix + * Sets the objective c class prefix which is prepended to all objective c + * generated classes from this .proto. There is no default. + * @type string $csharp_namespace + * Namespace for generated classes; defaults to the package. + * @type string $swift_prefix + * By default Swift generators will take the proto package and CamelCase it + * replacing '.' with underscore and use that to prefix the types/symbols + * defined. When this options is provided, they will use this value instead + * to prefix the types/symbols defined. + * @type string $php_class_prefix + * Sets the php class prefix which is prepended to all php generated classes + * from this .proto. Default is empty. + * @type string $php_namespace + * Use this option to change the namespace of php generated classes. Default + * is empty. When this option is empty, the package name will be used for + * determining the namespace. + * @type string $php_metadata_namespace + * Use this option to change the namespace of php generated metadata classes. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. + * @type string $ruby_package + * Use this option to change the package of ruby generated classes. Default + * is empty. When this option is not set, the package name will be used for + * determining the ruby package. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. + * See the documentation for the "Options" section above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Sets the Java package where classes generated from this .proto will be + * placed. By default, the proto package is used, but this is often + * inappropriate because proto packages do not normally start with backwards + * domain names. + * + * Generated from protobuf field optional string java_package = 1; + * @return string + */ + public function getJavaPackage() + { + return isset($this->java_package) ? $this->java_package : ''; + } + + public function hasJavaPackage() + { + return isset($this->java_package); + } + + public function clearJavaPackage() + { + unset($this->java_package); + } + + /** + * Sets the Java package where classes generated from this .proto will be + * placed. By default, the proto package is used, but this is often + * inappropriate because proto packages do not normally start with backwards + * domain names. + * + * Generated from protobuf field optional string java_package = 1; + * @param string $var + * @return $this + */ + public function setJavaPackage($var) + { + GPBUtil::checkString($var, True); + $this->java_package = $var; + + return $this; + } + + /** + * Controls the name of the wrapper Java class generated for the .proto file. + * That class will always contain the .proto file's getDescriptor() method as + * well as any top-level extensions defined in the .proto file. + * If java_multiple_files is disabled, then all the other classes from the + * .proto file will be nested inside the single wrapper outer class. + * + * Generated from protobuf field optional string java_outer_classname = 8; + * @return string + */ + public function getJavaOuterClassname() + { + return isset($this->java_outer_classname) ? $this->java_outer_classname : ''; + } + + public function hasJavaOuterClassname() + { + return isset($this->java_outer_classname); + } + + public function clearJavaOuterClassname() + { + unset($this->java_outer_classname); + } + + /** + * Controls the name of the wrapper Java class generated for the .proto file. + * That class will always contain the .proto file's getDescriptor() method as + * well as any top-level extensions defined in the .proto file. + * If java_multiple_files is disabled, then all the other classes from the + * .proto file will be nested inside the single wrapper outer class. + * + * Generated from protobuf field optional string java_outer_classname = 8; + * @param string $var + * @return $this + */ + public function setJavaOuterClassname($var) + { + GPBUtil::checkString($var, True); + $this->java_outer_classname = $var; + + return $this; + } + + /** + * If enabled, then the Java code generator will generate a separate .java + * file for each top-level message, enum, and service defined in the .proto + * file. Thus, these types will *not* be nested inside the wrapper class + * named by java_outer_classname. However, the wrapper class will still be + * generated to contain the file's getDescriptor() method as well as any + * top-level extensions defined in the file. + * + * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; + * @return bool + */ + public function getJavaMultipleFiles() + { + return isset($this->java_multiple_files) ? $this->java_multiple_files : false; + } + + public function hasJavaMultipleFiles() + { + return isset($this->java_multiple_files); + } + + public function clearJavaMultipleFiles() + { + unset($this->java_multiple_files); + } + + /** + * If enabled, then the Java code generator will generate a separate .java + * file for each top-level message, enum, and service defined in the .proto + * file. Thus, these types will *not* be nested inside the wrapper class + * named by java_outer_classname. However, the wrapper class will still be + * generated to contain the file's getDescriptor() method as well as any + * top-level extensions defined in the file. + * + * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; + * @param bool $var + * @return $this + */ + public function setJavaMultipleFiles($var) + { + GPBUtil::checkBool($var); + $this->java_multiple_files = $var; + + return $this; + } + + /** + * This option does nothing. + * + * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; + * @return bool + * @deprecated + */ + public function getJavaGenerateEqualsAndHash() + { + @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); + return isset($this->java_generate_equals_and_hash) ? $this->java_generate_equals_and_hash : false; + } + + public function hasJavaGenerateEqualsAndHash() + { + @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); + return isset($this->java_generate_equals_and_hash); + } + + public function clearJavaGenerateEqualsAndHash() + { + @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); + unset($this->java_generate_equals_and_hash); + } + + /** + * This option does nothing. + * + * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; + * @param bool $var + * @return $this + * @deprecated + */ + public function setJavaGenerateEqualsAndHash($var) + { + @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); + GPBUtil::checkBool($var); + $this->java_generate_equals_and_hash = $var; + + return $this; + } + + /** + * If set true, then the Java2 code generator will generate code that + * throws an exception whenever an attempt is made to assign a non-UTF-8 + * byte sequence to a string field. + * Message reflection will do the same. + * However, an extension field still accepts non-UTF-8 byte sequences. + * This option has no effect on when used with the lite runtime. + * + * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; + * @return bool + */ + public function getJavaStringCheckUtf8() + { + return isset($this->java_string_check_utf8) ? $this->java_string_check_utf8 : false; + } + + public function hasJavaStringCheckUtf8() + { + return isset($this->java_string_check_utf8); + } + + public function clearJavaStringCheckUtf8() + { + unset($this->java_string_check_utf8); + } + + /** + * If set true, then the Java2 code generator will generate code that + * throws an exception whenever an attempt is made to assign a non-UTF-8 + * byte sequence to a string field. + * Message reflection will do the same. + * However, an extension field still accepts non-UTF-8 byte sequences. + * This option has no effect on when used with the lite runtime. + * + * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; + * @param bool $var + * @return $this + */ + public function setJavaStringCheckUtf8($var) + { + GPBUtil::checkBool($var); + $this->java_string_check_utf8 = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; + * @return int + */ + public function getOptimizeFor() + { + return isset($this->optimize_for) ? $this->optimize_for : 0; + } + + public function hasOptimizeFor() + { + return isset($this->optimize_for); + } + + public function clearOptimizeFor() + { + unset($this->optimize_for); + } + + /** + * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; + * @param int $var + * @return $this + */ + public function setOptimizeFor($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FileOptions\OptimizeMode::class); + $this->optimize_for = $var; + + return $this; + } + + /** + * Sets the Go package where structs generated from this .proto will be + * placed. If omitted, the Go package will be derived from the following: + * - The basename of the package import path, if provided. + * - Otherwise, the package statement in the .proto file, if present. + * - Otherwise, the basename of the .proto file, without extension. + * + * Generated from protobuf field optional string go_package = 11; + * @return string + */ + public function getGoPackage() + { + return isset($this->go_package) ? $this->go_package : ''; + } + + public function hasGoPackage() + { + return isset($this->go_package); + } + + public function clearGoPackage() + { + unset($this->go_package); + } + + /** + * Sets the Go package where structs generated from this .proto will be + * placed. If omitted, the Go package will be derived from the following: + * - The basename of the package import path, if provided. + * - Otherwise, the package statement in the .proto file, if present. + * - Otherwise, the basename of the .proto file, without extension. + * + * Generated from protobuf field optional string go_package = 11; + * @param string $var + * @return $this + */ + public function setGoPackage($var) + { + GPBUtil::checkString($var, True); + $this->go_package = $var; + + return $this; + } + + /** + * Should generic services be generated in each language? "Generic" services + * are not specific to any particular RPC system. They are generated by the + * main code generators in each language (without additional plugins). + * Generic services were the only kind of service generation supported by + * early versions of google.protobuf. + * Generic services are now considered deprecated in favor of using plugins + * that generate code specific to your particular RPC system. Therefore, + * these default to false. Old code which depends on generic services should + * explicitly set them to true. + * + * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; + * @return bool + */ + public function getCcGenericServices() + { + return isset($this->cc_generic_services) ? $this->cc_generic_services : false; + } + + public function hasCcGenericServices() + { + return isset($this->cc_generic_services); + } + + public function clearCcGenericServices() + { + unset($this->cc_generic_services); + } + + /** + * Should generic services be generated in each language? "Generic" services + * are not specific to any particular RPC system. They are generated by the + * main code generators in each language (without additional plugins). + * Generic services were the only kind of service generation supported by + * early versions of google.protobuf. + * Generic services are now considered deprecated in favor of using plugins + * that generate code specific to your particular RPC system. Therefore, + * these default to false. Old code which depends on generic services should + * explicitly set them to true. + * + * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; + * @param bool $var + * @return $this + */ + public function setCcGenericServices($var) + { + GPBUtil::checkBool($var); + $this->cc_generic_services = $var; + + return $this; + } + + /** + * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; + * @return bool + */ + public function getJavaGenericServices() + { + return isset($this->java_generic_services) ? $this->java_generic_services : false; + } + + public function hasJavaGenericServices() + { + return isset($this->java_generic_services); + } + + public function clearJavaGenericServices() + { + unset($this->java_generic_services); + } + + /** + * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; + * @param bool $var + * @return $this + */ + public function setJavaGenericServices($var) + { + GPBUtil::checkBool($var); + $this->java_generic_services = $var; + + return $this; + } + + /** + * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; + * @return bool + */ + public function getPyGenericServices() + { + return isset($this->py_generic_services) ? $this->py_generic_services : false; + } + + public function hasPyGenericServices() + { + return isset($this->py_generic_services); + } + + public function clearPyGenericServices() + { + unset($this->py_generic_services); + } + + /** + * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; + * @param bool $var + * @return $this + */ + public function setPyGenericServices($var) + { + GPBUtil::checkBool($var); + $this->py_generic_services = $var; + + return $this; + } + + /** + * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; + * @return bool + */ + public function getPhpGenericServices() + { + return isset($this->php_generic_services) ? $this->php_generic_services : false; + } + + public function hasPhpGenericServices() + { + return isset($this->php_generic_services); + } + + public function clearPhpGenericServices() + { + unset($this->php_generic_services); + } + + /** + * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; + * @param bool $var + * @return $this + */ + public function setPhpGenericServices($var) + { + GPBUtil::checkBool($var); + $this->php_generic_services = $var; + + return $this; + } + + /** + * Is this file deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for everything in the file, or it will be completely ignored; in the very + * least, this is a formalization for deprecating files. + * + * Generated from protobuf field optional bool deprecated = 23 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this file deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for everything in the file, or it will be completely ignored; in the very + * least, this is a formalization for deprecating files. + * + * Generated from protobuf field optional bool deprecated = 23 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * Enables the use of arenas for the proto messages in this file. This applies + * only to generated classes for C++. + * + * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; + * @return bool + */ + public function getCcEnableArenas() + { + return isset($this->cc_enable_arenas) ? $this->cc_enable_arenas : false; + } + + public function hasCcEnableArenas() + { + return isset($this->cc_enable_arenas); + } + + public function clearCcEnableArenas() + { + unset($this->cc_enable_arenas); + } + + /** + * Enables the use of arenas for the proto messages in this file. This applies + * only to generated classes for C++. + * + * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; + * @param bool $var + * @return $this + */ + public function setCcEnableArenas($var) + { + GPBUtil::checkBool($var); + $this->cc_enable_arenas = $var; + + return $this; + } + + /** + * Sets the objective c class prefix which is prepended to all objective c + * generated classes from this .proto. There is no default. + * + * Generated from protobuf field optional string objc_class_prefix = 36; + * @return string + */ + public function getObjcClassPrefix() + { + return isset($this->objc_class_prefix) ? $this->objc_class_prefix : ''; + } + + public function hasObjcClassPrefix() + { + return isset($this->objc_class_prefix); + } + + public function clearObjcClassPrefix() + { + unset($this->objc_class_prefix); + } + + /** + * Sets the objective c class prefix which is prepended to all objective c + * generated classes from this .proto. There is no default. + * + * Generated from protobuf field optional string objc_class_prefix = 36; + * @param string $var + * @return $this + */ + public function setObjcClassPrefix($var) + { + GPBUtil::checkString($var, True); + $this->objc_class_prefix = $var; + + return $this; + } + + /** + * Namespace for generated classes; defaults to the package. + * + * Generated from protobuf field optional string csharp_namespace = 37; + * @return string + */ + public function getCsharpNamespace() + { + return isset($this->csharp_namespace) ? $this->csharp_namespace : ''; + } + + public function hasCsharpNamespace() + { + return isset($this->csharp_namespace); + } + + public function clearCsharpNamespace() + { + unset($this->csharp_namespace); + } + + /** + * Namespace for generated classes; defaults to the package. + * + * Generated from protobuf field optional string csharp_namespace = 37; + * @param string $var + * @return $this + */ + public function setCsharpNamespace($var) + { + GPBUtil::checkString($var, True); + $this->csharp_namespace = $var; + + return $this; + } + + /** + * By default Swift generators will take the proto package and CamelCase it + * replacing '.' with underscore and use that to prefix the types/symbols + * defined. When this options is provided, they will use this value instead + * to prefix the types/symbols defined. + * + * Generated from protobuf field optional string swift_prefix = 39; + * @return string + */ + public function getSwiftPrefix() + { + return isset($this->swift_prefix) ? $this->swift_prefix : ''; + } + + public function hasSwiftPrefix() + { + return isset($this->swift_prefix); + } + + public function clearSwiftPrefix() + { + unset($this->swift_prefix); + } + + /** + * By default Swift generators will take the proto package and CamelCase it + * replacing '.' with underscore and use that to prefix the types/symbols + * defined. When this options is provided, they will use this value instead + * to prefix the types/symbols defined. + * + * Generated from protobuf field optional string swift_prefix = 39; + * @param string $var + * @return $this + */ + public function setSwiftPrefix($var) + { + GPBUtil::checkString($var, True); + $this->swift_prefix = $var; + + return $this; + } + + /** + * Sets the php class prefix which is prepended to all php generated classes + * from this .proto. Default is empty. + * + * Generated from protobuf field optional string php_class_prefix = 40; + * @return string + */ + public function getPhpClassPrefix() + { + return isset($this->php_class_prefix) ? $this->php_class_prefix : ''; + } + + public function hasPhpClassPrefix() + { + return isset($this->php_class_prefix); + } + + public function clearPhpClassPrefix() + { + unset($this->php_class_prefix); + } + + /** + * Sets the php class prefix which is prepended to all php generated classes + * from this .proto. Default is empty. + * + * Generated from protobuf field optional string php_class_prefix = 40; + * @param string $var + * @return $this + */ + public function setPhpClassPrefix($var) + { + GPBUtil::checkString($var, True); + $this->php_class_prefix = $var; + + return $this; + } + + /** + * Use this option to change the namespace of php generated classes. Default + * is empty. When this option is empty, the package name will be used for + * determining the namespace. + * + * Generated from protobuf field optional string php_namespace = 41; + * @return string + */ + public function getPhpNamespace() + { + return isset($this->php_namespace) ? $this->php_namespace : ''; + } + + public function hasPhpNamespace() + { + return isset($this->php_namespace); + } + + public function clearPhpNamespace() + { + unset($this->php_namespace); + } + + /** + * Use this option to change the namespace of php generated classes. Default + * is empty. When this option is empty, the package name will be used for + * determining the namespace. + * + * Generated from protobuf field optional string php_namespace = 41; + * @param string $var + * @return $this + */ + public function setPhpNamespace($var) + { + GPBUtil::checkString($var, True); + $this->php_namespace = $var; + + return $this; + } + + /** + * Use this option to change the namespace of php generated metadata classes. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. + * + * Generated from protobuf field optional string php_metadata_namespace = 44; + * @return string + */ + public function getPhpMetadataNamespace() + { + return isset($this->php_metadata_namespace) ? $this->php_metadata_namespace : ''; + } + + public function hasPhpMetadataNamespace() + { + return isset($this->php_metadata_namespace); + } + + public function clearPhpMetadataNamespace() + { + unset($this->php_metadata_namespace); + } + + /** + * Use this option to change the namespace of php generated metadata classes. + * Default is empty. When this option is empty, the proto file name will be + * used for determining the namespace. + * + * Generated from protobuf field optional string php_metadata_namespace = 44; + * @param string $var + * @return $this + */ + public function setPhpMetadataNamespace($var) + { + GPBUtil::checkString($var, True); + $this->php_metadata_namespace = $var; + + return $this; + } + + /** + * Use this option to change the package of ruby generated classes. Default + * is empty. When this option is not set, the package name will be used for + * determining the ruby package. + * + * Generated from protobuf field optional string ruby_package = 45; + * @return string + */ + public function getRubyPackage() + { + return isset($this->ruby_package) ? $this->ruby_package : ''; + } + + public function hasRubyPackage() + { + return isset($this->ruby_package); + } + + public function clearRubyPackage() + { + unset($this->ruby_package); + } + + /** + * Use this option to change the package of ruby generated classes. Default + * is empty. When this option is not set, the package name will be used for + * determining the ruby package. + * + * Generated from protobuf field optional string ruby_package = 45; + * @param string $var + * @return $this + */ + public function setRubyPackage($var) + { + GPBUtil::checkString($var, True); + $this->ruby_package = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. + * See the documentation for the "Options" section above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. + * See the documentation for the "Options" section above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php new file mode 100644 index 0000000..0df27b5 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php @@ -0,0 +1,64 @@ +google.protobuf.FileOptions.OptimizeMode + */ +class OptimizeMode +{ + /** + * Generate complete code for parsing, serialization, + * + * Generated from protobuf enum SPEED = 1; + */ + const SPEED = 1; + /** + * etc. + * + * Generated from protobuf enum CODE_SIZE = 2; + */ + const CODE_SIZE = 2; + /** + * Generate code using MessageLite and the lite runtime. + * + * Generated from protobuf enum LITE_RUNTIME = 3; + */ + const LITE_RUNTIME = 3; + + private static $valueToName = [ + self::SPEED => 'SPEED', + self::CODE_SIZE => 'CODE_SIZE', + self::LITE_RUNTIME => 'LITE_RUNTIME', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(OptimizeMode::class, \Google\Protobuf\Internal\FileOptions_OptimizeMode::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php new file mode 100644 index 0000000..8926e63 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php @@ -0,0 +1,16 @@ +writeRaw("\"", 1); + $field_name = GPBJsonWire::formatFieldName($field); + $output->writeRaw($field_name, strlen($field_name)); + $output->writeRaw("\":", 2); + } + return static::serializeFieldValueToStream( + $value, + $field, + $output, + !$has_field_name); + } + + public static function serializeFieldValueToStream( + $values, + $field, + &$output, + $is_well_known = false) + { + if ($field->isMap()) { + $output->writeRaw("{", 1); + $first = true; + $map_entry = $field->getMessageType(); + $key_field = $map_entry->getFieldByNumber(1); + $value_field = $map_entry->getFieldByNumber(2); + + switch ($key_field->getType()) { + case GPBType::STRING: + case GPBType::SFIXED64: + case GPBType::INT64: + case GPBType::SINT64: + case GPBType::FIXED64: + case GPBType::UINT64: + $additional_quote = false; + break; + default: + $additional_quote = true; + } + + foreach ($values as $key => $value) { + if ($first) { + $first = false; + } else { + $output->writeRaw(",", 1); + } + if ($additional_quote) { + $output->writeRaw("\"", 1); + } + if (!static::serializeSingularFieldValueToStream( + $key, + $key_field, + $output, + $is_well_known)) { + return false; + } + if ($additional_quote) { + $output->writeRaw("\"", 1); + } + $output->writeRaw(":", 1); + if (!static::serializeSingularFieldValueToStream( + $value, + $value_field, + $output, + $is_well_known)) { + return false; + } + } + $output->writeRaw("}", 1); + return true; + } elseif ($field->isRepeated()) { + $output->writeRaw("[", 1); + $first = true; + foreach ($values as $value) { + if ($first) { + $first = false; + } else { + $output->writeRaw(",", 1); + } + if (!static::serializeSingularFieldValueToStream( + $value, + $field, + $output, + $is_well_known)) { + return false; + } + } + $output->writeRaw("]", 1); + return true; + } else { + return static::serializeSingularFieldValueToStream( + $values, + $field, + $output, + $is_well_known); + } + } + + private static function serializeSingularFieldValueToStream( + $value, + $field, + &$output, $is_well_known = false) + { + switch ($field->getType()) { + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::INT32: + $str_value = strval($value); + $output->writeRaw($str_value, strlen($str_value)); + break; + case GPBType::FIXED32: + case GPBType::UINT32: + if ($value < 0) { + $value = bcadd($value, "4294967296"); + } + $str_value = strval($value); + $output->writeRaw($str_value, strlen($str_value)); + break; + case GPBType::FIXED64: + case GPBType::UINT64: + if ($value < 0) { + $value = bcadd($value, "18446744073709551616"); + } + // Intentional fall through. + case GPBType::SFIXED64: + case GPBType::INT64: + case GPBType::SINT64: + $output->writeRaw("\"", 1); + $str_value = strval($value); + $output->writeRaw($str_value, strlen($str_value)); + $output->writeRaw("\"", 1); + break; + case GPBType::FLOAT: + if (is_nan($value)) { + $str_value = "\"NaN\""; + } elseif ($value === INF) { + $str_value = "\"Infinity\""; + } elseif ($value === -INF) { + $str_value = "\"-Infinity\""; + } else { + $str_value = sprintf("%.8g", $value); + } + $output->writeRaw($str_value, strlen($str_value)); + break; + case GPBType::DOUBLE: + if (is_nan($value)) { + $str_value = "\"NaN\""; + } elseif ($value === INF) { + $str_value = "\"Infinity\""; + } elseif ($value === -INF) { + $str_value = "\"-Infinity\""; + } else { + $str_value = sprintf("%.17g", $value); + } + $output->writeRaw($str_value, strlen($str_value)); + break; + case GPBType::ENUM: + $enum_desc = $field->getEnumType(); + if ($enum_desc->getClass() === "Google\Protobuf\NullValue") { + $output->writeRaw("null", 4); + break; + } + $enum_value_desc = $enum_desc->getValueByNumber($value); + if (!is_null($enum_value_desc)) { + $str_value = $enum_value_desc->getName(); + $output->writeRaw("\"", 1); + $output->writeRaw($str_value, strlen($str_value)); + $output->writeRaw("\"", 1); + } else { + $str_value = strval($value); + $output->writeRaw($str_value, strlen($str_value)); + } + break; + case GPBType::BOOL: + if ($value) { + $output->writeRaw("true", 4); + } else { + $output->writeRaw("false", 5); + } + break; + case GPBType::BYTES: + $bytes_value = base64_encode($value); + $output->writeRaw("\"", 1); + $output->writeRaw($bytes_value, strlen($bytes_value)); + $output->writeRaw("\"", 1); + break; + case GPBType::STRING: + $value = json_encode($value, JSON_UNESCAPED_UNICODE); + $output->writeRaw($value, strlen($value)); + break; + // case GPBType::GROUP: + // echo "GROUP\xA"; + // trigger_error("Not implemented.", E_ERROR); + // break; + case GPBType::MESSAGE: + $value->serializeToJsonStream($output); + break; + default: + user_error("Unsupported type."); + return false; + } + return true; + } + + private static function formatFieldName($field) + { + return $field->getJsonName(); + } + + // Used for escaping control chars in strings. + private static $k_control_char_limit = 0x20; + + private static function jsonNiceEscape($c) + { + switch ($c) { + case '"': return "\\\""; + case '\\': return "\\\\"; + case '/': return "\\/"; + case '\b': return "\\b"; + case '\f': return "\\f"; + case '\n': return "\\n"; + case '\r': return "\\r"; + case '\t': return "\\t"; + default: return NULL; + } + } + + private static function isJsonEscaped($c) + { + // See RFC 4627. + return $c < chr($k_control_char_limit) || $c === "\"" || $c === "\\"; + } + + public static function escapedJson($value) + { + $escaped_value = ""; + $unescaped_run = ""; + for ($i = 0; $i < strlen($value); $i++) { + $c = $value[$i]; + // Handle escaping. + if (static::isJsonEscaped($c)) { + // Use a "nice" escape, like \n, if one exists for this + // character. + $escape = static::jsonNiceEscape($c); + if (is_null($escape)) { + $escape = "\\u00" . bin2hex($c); + } + if ($unescaped_run !== "") { + $escaped_value .= $unescaped_run; + $unescaped_run = ""; + } + $escaped_value .= $escape; + } else { + if ($unescaped_run === "") { + $unescaped_run .= $c; + } + } + } + $escaped_value .= $unescaped_run; + return $escaped_value; + } + +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php new file mode 100644 index 0000000..0fb2384 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php @@ -0,0 +1,40 @@ + 0) { + $high = (int) bcsub($high, 4294967296); + } else { + $high = (int) $high; + } + if (bccomp($low, 2147483647) > 0) { + $low = (int) bcsub($low, 4294967296); + } else { + $low = (int) $low; + } + + if ($isNeg) { + $high = ~$high; + $low = ~$low; + $low++; + if (!$low) { + $high = (int)($high + 1); + } + } + + if ($trim) { + $high = 0; + } + } + + public static function checkString(&$var, $check_utf8) + { + if (is_array($var) || is_object($var)) { + throw new \InvalidArgumentException("Expect string."); + } + if (!is_string($var)) { + $var = strval($var); + } + if ($check_utf8 && !preg_match('//u', $var)) { + throw new \Exception("Expect utf-8 encoding."); + } + } + + public static function checkEnum(&$var) + { + static::checkInt32($var); + } + + public static function checkInt32(&$var) + { + if (is_numeric($var)) { + $var = intval($var); + } else { + throw new \Exception("Expect integer."); + } + } + + public static function checkUint32(&$var) + { + if (is_numeric($var)) { + if (PHP_INT_SIZE === 8) { + $var = intval($var); + $var |= ((-(($var >> 31) & 0x1)) & ~0xFFFFFFFF); + } else { + if (bccomp($var, 0x7FFFFFFF) > 0) { + $var = bcsub($var, "4294967296"); + } + $var = (int) $var; + } + } else { + throw new \Exception("Expect integer."); + } + } + + public static function checkInt64(&$var) + { + if (is_numeric($var)) { + if (PHP_INT_SIZE == 8) { + $var = intval($var); + } else { + if (is_float($var) || + is_integer($var) || + (is_string($var) && + bccomp($var, "9223372036854774784") < 0)) { + $var = number_format($var, 0, ".", ""); + } + } + } else { + throw new \Exception("Expect integer."); + } + } + + public static function checkUint64(&$var) + { + if (is_numeric($var)) { + if (PHP_INT_SIZE == 8) { + $var = intval($var); + } else { + $var = number_format($var, 0, ".", ""); + } + } else { + throw new \Exception("Expect integer."); + } + } + + public static function checkFloat(&$var) + { + if (is_float($var) || is_numeric($var)) { + $var = unpack("f", pack("f", $var))[1]; + } else { + throw new \Exception("Expect float."); + } + } + + public static function checkDouble(&$var) + { + if (is_float($var) || is_numeric($var)) { + $var = floatval($var); + } else { + throw new \Exception("Expect float."); + } + } + + public static function checkBool(&$var) + { + if (is_array($var) || is_object($var)) { + throw new \Exception("Expect boolean."); + } + $var = boolval($var); + } + + public static function checkMessage(&$var, $klass, $newClass = null) + { + if (!$var instanceof $klass && !is_null($var)) { + throw new \Exception("Expect $klass."); + } + } + + public static function checkRepeatedField(&$var, $type, $klass = null) + { + if (!$var instanceof RepeatedField && !is_array($var)) { + throw new \Exception("Expect array."); + } + if (is_array($var)) { + $tmp = new RepeatedField($type, $klass); + foreach ($var as $value) { + $tmp[] = $value; + } + return $tmp; + } else { + if ($var->getType() != $type) { + throw new \Exception( + "Expect repeated field of different type."); + } + if ($var->getType() === GPBType::MESSAGE && + $var->getClass() !== $klass && + $var->getLegacyClass() !== $klass) { + throw new \Exception( + "Expect repeated field of " . $klass . "."); + } + return $var; + } + } + + public static function checkMapField(&$var, $key_type, $value_type, $klass = null) + { + if (!$var instanceof MapField && !is_array($var)) { + throw new \Exception("Expect dict."); + } + if (is_array($var)) { + $tmp = new MapField($key_type, $value_type, $klass); + foreach ($var as $key => $value) { + $tmp[$key] = $value; + } + return $tmp; + } else { + if ($var->getKeyType() != $key_type) { + throw new \Exception("Expect map field of key type."); + } + if ($var->getValueType() != $value_type) { + throw new \Exception("Expect map field of value type."); + } + if ($var->getValueType() === GPBType::MESSAGE && + $var->getValueClass() !== $klass && + $var->getLegacyValueClass() !== $klass) { + throw new \Exception( + "Expect map field of " . $klass . "."); + } + return $var; + } + } + + public static function Int64($value) + { + return new Int64($value); + } + + public static function Uint64($value) + { + return new Uint64($value); + } + + public static function getClassNamePrefix( + $classname, + $file_proto) + { + $option = $file_proto->getOptions(); + $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); + if ($prefix !== "") { + return $prefix; + } + + $reserved_words = array( + "abstract"=>0, "and"=>0, "array"=>0, "as"=>0, "break"=>0, + "callable"=>0, "case"=>0, "catch"=>0, "class"=>0, "clone"=>0, + "const"=>0, "continue"=>0, "declare"=>0, "default"=>0, "die"=>0, + "do"=>0, "echo"=>0, "else"=>0, "elseif"=>0, "empty"=>0, + "enddeclare"=>0, "endfor"=>0, "endforeach"=>0, "endif"=>0, + "endswitch"=>0, "endwhile"=>0, "eval"=>0, "exit"=>0, "extends"=>0, + "final"=>0, "finally"=>0, "fn"=>0, "for"=>0, "foreach"=>0, + "function"=>0, "global"=>0, "goto"=>0, "if"=>0, "implements"=>0, + "include"=>0, "include_once"=>0, "instanceof"=>0, "insteadof"=>0, + "interface"=>0, "isset"=>0, "list"=>0, "match"=>0, "namespace"=>0, + "new"=>0, "or"=>0, "parent"=>0, "print"=>0, "private"=>0, + "protected"=>0,"public"=>0, "require"=>0, "require_once"=>0, + "return"=>0, "self"=>0, "static"=>0, "switch"=>0, "throw"=>0, + "trait"=>0, "try"=>0,"unset"=>0, "use"=>0, "var"=>0, "while"=>0, + "xor"=>0, "yield"=>0, "int"=>0, "float"=>0, "bool"=>0, "string"=>0, + "true"=>0, "false"=>0, "null"=>0, "void"=>0, "iterable"=>0 + ); + + if (array_key_exists(strtolower($classname), $reserved_words)) { + if ($file_proto->getPackage() === "google.protobuf") { + return "GPB"; + } else { + return "PB"; + } + } + + return ""; + } + + public static function getLegacyClassNameWithoutPackage( + $name, + $file_proto) + { + $classname = implode('_', explode('.', $name)); + return static::getClassNamePrefix($classname, $file_proto) . $classname; + } + + public static function getClassNameWithoutPackage( + $name, + $file_proto) + { + $parts = explode('.', $name); + foreach ($parts as $i => $part) { + $parts[$i] = static::getClassNamePrefix($parts[$i], $file_proto) . $parts[$i]; + } + return implode('\\', $parts); + } + + public static function getFullClassName( + $proto, + $containing, + $file_proto, + &$message_name_without_package, + &$classname, + &$legacy_classname, + &$fullname) + { + // Full name needs to start with '.'. + $message_name_without_package = $proto->getName(); + if ($containing !== "") { + $message_name_without_package = + $containing . "." . $message_name_without_package; + } + + $package = $file_proto->getPackage(); + if ($package === "") { + $fullname = $message_name_without_package; + } else { + $fullname = $package . "." . $message_name_without_package; + } + + $class_name_without_package = + static::getClassNameWithoutPackage($message_name_without_package, $file_proto); + $legacy_class_name_without_package = + static::getLegacyClassNameWithoutPackage( + $message_name_without_package, $file_proto); + + $option = $file_proto->getOptions(); + if (!is_null($option) && $option->hasPhpNamespace()) { + $namespace = $option->getPhpNamespace(); + if ($namespace !== "") { + $classname = $namespace . "\\" . $class_name_without_package; + $legacy_classname = + $namespace . "\\" . $legacy_class_name_without_package; + return; + } else { + $classname = $class_name_without_package; + $legacy_classname = $legacy_class_name_without_package; + return; + } + } + + if ($package === "") { + $classname = $class_name_without_package; + $legacy_classname = $legacy_class_name_without_package; + } else { + $parts = array_map('ucwords', explode('.', $package)); + foreach ($parts as $i => $part) { + $parts[$i] = self::getClassNamePrefix($part, $file_proto).$part; + } + $classname = + implode('\\', $parts) . + "\\".self::getClassNamePrefix($class_name_without_package,$file_proto). + $class_name_without_package; + $legacy_classname = + implode('\\', array_map('ucwords', explode('.', $package))). + "\\".$legacy_class_name_without_package; + } + } + + public static function combineInt32ToInt64($high, $low) + { + $isNeg = $high < 0; + if ($isNeg) { + $high = ~$high; + $low = ~$low; + $low++; + if (!$low) { + $high = (int) ($high + 1); + } + } + $result = bcadd(bcmul($high, 4294967296), $low); + if ($low < 0) { + $result = bcadd($result, 4294967296); + } + if ($isNeg) { + $result = bcsub(0, $result); + } + return $result; + } + + public static function parseTimestamp($timestamp) + { + // prevent parsing timestamps containing with the non-existent year "0000" + // DateTime::createFromFormat parses without failing but as a nonsensical date + if (substr($timestamp, 0, 4) === "0000") { + throw new \Exception("Year cannot be zero."); + } + // prevent parsing timestamps ending with a lowercase z + if (substr($timestamp, -1, 1) === "z") { + throw new \Exception("Timezone cannot be a lowercase z."); + } + + $nanoseconds = 0; + $periodIndex = strpos($timestamp, "."); + if ($periodIndex !== false) { + $nanosecondsLength = 0; + // find the next non-numeric character in the timestamp to calculate + // the length of the nanoseconds text + for ($i = $periodIndex + 1, $length = strlen($timestamp); $i < $length; $i++) { + if (!is_numeric($timestamp[$i])) { + $nanosecondsLength = $i - ($periodIndex + 1); + break; + } + } + if ($nanosecondsLength % 3 !== 0) { + throw new \Exception("Nanoseconds must be disible by 3."); + } + if ($nanosecondsLength > 9) { + throw new \Exception("Nanoseconds must be in the range of 0 to 999,999,999 nanoseconds."); + } + if ($nanosecondsLength > 0) { + $nanoseconds = substr($timestamp, $periodIndex + 1, $nanosecondsLength); + $nanoseconds = intval($nanoseconds); + + // remove the nanoseconds and preceding period from the timestamp + $date = substr($timestamp, 0, $periodIndex); + $timezone = substr($timestamp, $periodIndex + $nanosecondsLength + 1); + $timestamp = $date.$timezone; + } + } + + $date = \DateTime::createFromFormat(\DateTime::RFC3339, $timestamp, new \DateTimeZone("UTC")); + if ($date === false) { + throw new \Exception("Invalid RFC 3339 timestamp."); + } + + $value = new \Google\Protobuf\Timestamp(); + $seconds = $date->format("U"); + $value->setSeconds($seconds); + $value->setNanos($nanoseconds); + return $value; + } + + public static function formatTimestamp($value) + { + if (bccomp($value->getSeconds(), "253402300800") != -1) { + throw new GPBDecodeException("Duration number too large."); + } + if (bccomp($value->getSeconds(), "-62135596801") != 1) { + throw new GPBDecodeException("Duration number too small."); + } + $nanoseconds = static::getNanosecondsForTimestamp($value->getNanos()); + if (!empty($nanoseconds)) { + $nanoseconds = ".".$nanoseconds; + } + $date = new \DateTime('@'.$value->getSeconds(), new \DateTimeZone("UTC")); + return $date->format("Y-m-d\TH:i:s".$nanoseconds."\Z"); + } + + public static function parseDuration($value) + { + if (strlen($value) < 2 || substr($value, -1) !== "s") { + throw new GPBDecodeException("Missing s after duration string"); + } + $number = substr($value, 0, -1); + if (bccomp($number, "315576000001") != -1) { + throw new GPBDecodeException("Duration number too large."); + } + if (bccomp($number, "-315576000001") != 1) { + throw new GPBDecodeException("Duration number too small."); + } + $pos = strrpos($number, "."); + if ($pos !== false) { + $seconds = substr($number, 0, $pos); + if (bccomp($seconds, 0) < 0) { + $nanos = bcmul("0" . substr($number, $pos), -1000000000); + } else { + $nanos = bcmul("0" . substr($number, $pos), 1000000000); + } + } else { + $seconds = $number; + $nanos = 0; + } + $duration = new Duration(); + $duration->setSeconds($seconds); + $duration->setNanos($nanos); + return $duration; + } + + public static function formatDuration($value) + { + if (bccomp($value->getSeconds(), '315576000001') != -1) { + throw new GPBDecodeException('Duration number too large.'); + } + if (bccomp($value->getSeconds(), '-315576000001') != 1) { + throw new GPBDecodeException('Duration number too small.'); + } + + $nanos = $value->getNanos(); + if ($nanos === 0) { + return (string) $value->getSeconds(); + } + + if ($nanos % 1000000 === 0) { + $digits = 3; + } elseif ($nanos % 1000 === 0) { + $digits = 6; + } else { + $digits = 9; + } + + $nanos = bcdiv($nanos, '1000000000', $digits); + return bcadd($value->getSeconds(), $nanos, $digits); + } + + public static function parseFieldMask($paths_string) + { + $field_mask = new FieldMask(); + if (strlen($paths_string) === 0) { + return $field_mask; + } + $path_strings = explode(",", $paths_string); + $paths = $field_mask->getPaths(); + foreach($path_strings as &$path_string) { + $field_strings = explode(".", $path_string); + foreach($field_strings as &$field_string) { + $field_string = camel2underscore($field_string); + } + $path_string = implode(".", $field_strings); + $paths[] = $path_string; + } + return $field_mask; + } + + public static function formatFieldMask($field_mask) + { + $converted_paths = []; + foreach($field_mask->getPaths() as $path) { + $fields = explode('.', $path); + $converted_path = []; + foreach ($fields as $field) { + $segments = explode('_', $field); + $start = true; + $converted_segments = ""; + foreach($segments as $segment) { + if (!$start) { + $converted = ucfirst($segment); + } else { + $converted = $segment; + $start = false; + } + $converted_segments .= $converted; + } + $converted_path []= $converted_segments; + } + $converted_path = implode(".", $converted_path); + $converted_paths []= $converted_path; + } + return implode(",", $converted_paths); + } + + public static function getNanosecondsForTimestamp($nanoseconds) + { + if ($nanoseconds == 0) { + return ''; + } + if ($nanoseconds % static::NANOS_PER_MILLISECOND == 0) { + return sprintf('%03d', $nanoseconds / static::NANOS_PER_MILLISECOND); + } + if ($nanoseconds % static::NANOS_PER_MICROSECOND == 0) { + return sprintf('%06d', $nanoseconds / static::NANOS_PER_MICROSECOND); + } + return sprintf('%09d', $nanoseconds); + } + + public static function hasSpecialJsonMapping($msg) + { + return is_a($msg, 'Google\Protobuf\Any') || + is_a($msg, "Google\Protobuf\ListValue") || + is_a($msg, "Google\Protobuf\Struct") || + is_a($msg, "Google\Protobuf\Value") || + is_a($msg, "Google\Protobuf\Duration") || + is_a($msg, "Google\Protobuf\Timestamp") || + is_a($msg, "Google\Protobuf\FieldMask") || + static::hasJsonValue($msg); + } + + public static function hasJsonValue($msg) + { + return is_a($msg, "Google\Protobuf\DoubleValue") || + is_a($msg, "Google\Protobuf\FloatValue") || + is_a($msg, "Google\Protobuf\Int64Value") || + is_a($msg, "Google\Protobuf\UInt64Value") || + is_a($msg, "Google\Protobuf\Int32Value") || + is_a($msg, "Google\Protobuf\UInt32Value") || + is_a($msg, "Google\Protobuf\BoolValue") || + is_a($msg, "Google\Protobuf\StringValue") || + is_a($msg, "Google\Protobuf\BytesValue"); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php new file mode 100644 index 0000000..034f5df --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php @@ -0,0 +1,622 @@ +> self::TAG_TYPE_BITS) & 0x1fffffff; + } + + public static function getTagWireType($tag) + { + return $tag & 0x7; + } + + public static function getWireType($type) + { + switch ($type) { + case GPBType::FLOAT: + case GPBType::FIXED32: + case GPBType::SFIXED32: + return self::WIRETYPE_FIXED32; + case GPBType::DOUBLE: + case GPBType::FIXED64: + case GPBType::SFIXED64: + return self::WIRETYPE_FIXED64; + case GPBType::UINT32: + case GPBType::UINT64: + case GPBType::INT32: + case GPBType::INT64: + case GPBType::SINT32: + case GPBType::SINT64: + case GPBType::ENUM: + case GPBType::BOOL: + return self::WIRETYPE_VARINT; + case GPBType::STRING: + case GPBType::BYTES: + case GPBType::MESSAGE: + return self::WIRETYPE_LENGTH_DELIMITED; + case GPBType::GROUP: + user_error("Unsupported type."); + return 0; + default: + user_error("Unsupported type."); + return 0; + } + } + + // ZigZag Transform: Encodes signed integers so that they can be effectively + // used with varint encoding. + // + // varint operates on unsigned integers, encoding smaller numbers into fewer + // bytes. If you try to use it on a signed integer, it will treat this + // number as a very large unsigned integer, which means that even small + // signed numbers like -1 will take the maximum number of bytes (10) to + // encode. zigZagEncode() maps signed integers to unsigned in such a way + // that those with a small absolute value will have smaller encoded values, + // making them appropriate for encoding using varint. + // + // int32 -> uint32 + // ------------------------- + // 0 -> 0 + // -1 -> 1 + // 1 -> 2 + // -2 -> 3 + // ... -> ... + // 2147483647 -> 4294967294 + // -2147483648 -> 4294967295 + // + // >> encode >> + // << decode << + public static function zigZagEncode32($int32) + { + if (PHP_INT_SIZE == 8) { + $trim_int32 = $int32 & 0xFFFFFFFF; + return (($trim_int32 << 1) ^ ($int32 << 32 >> 63)) & 0xFFFFFFFF; + } else { + return ($int32 << 1) ^ ($int32 >> 31); + } + } + + public static function zigZagDecode32($uint32) + { + // Fill high 32 bits. + if (PHP_INT_SIZE === 8) { + $uint32 |= ($uint32 & 0xFFFFFFFF); + } + + $int32 = (($uint32 >> 1) & 0x7FFFFFFF) ^ (-($uint32 & 1)); + + return $int32; + } + + public static function zigZagEncode64($int64) + { + if (PHP_INT_SIZE == 4) { + if (bccomp($int64, 0) >= 0) { + return bcmul($int64, 2); + } else { + return bcsub(bcmul(bcsub(0, $int64), 2), 1); + } + } else { + return ((int)$int64 << 1) ^ ((int)$int64 >> 63); + } + } + + public static function zigZagDecode64($uint64) + { + if (PHP_INT_SIZE == 4) { + if (bcmod($uint64, 2) == 0) { + return bcdiv($uint64, 2, 0); + } else { + return bcsub(0, bcdiv(bcadd($uint64, 1), 2, 0)); + } + } else { + return (($uint64 >> 1) & 0x7FFFFFFFFFFFFFFF) ^ (-($uint64 & 1)); + } + } + + public static function readInt32(&$input, &$value) + { + return $input->readVarint32($value); + } + + public static function readInt64(&$input, &$value) + { + $success = $input->readVarint64($value); + if (PHP_INT_SIZE == 4 && bccomp($value, "9223372036854775807") > 0) { + $value = bcsub($value, "18446744073709551616"); + } + return $success; + } + + public static function readUint32(&$input, &$value) + { + return self::readInt32($input, $value); + } + + public static function readUint64(&$input, &$value) + { + return self::readInt64($input, $value); + } + + public static function readSint32(&$input, &$value) + { + if (!$input->readVarint32($value)) { + return false; + } + $value = GPBWire::zigZagDecode32($value); + return true; + } + + public static function readSint64(&$input, &$value) + { + if (!$input->readVarint64($value)) { + return false; + } + $value = GPBWire::zigZagDecode64($value); + return true; + } + + public static function readFixed32(&$input, &$value) + { + return $input->readLittleEndian32($value); + } + + public static function readFixed64(&$input, &$value) + { + return $input->readLittleEndian64($value); + } + + public static function readSfixed32(&$input, &$value) + { + if (!self::readFixed32($input, $value)) { + return false; + } + if (PHP_INT_SIZE === 8) { + $value |= (-($value >> 31) << 32); + } + return true; + } + + public static function readSfixed64(&$input, &$value) + { + $success = $input->readLittleEndian64($value); + if (PHP_INT_SIZE == 4 && bccomp($value, "9223372036854775807") > 0) { + $value = bcsub($value, "18446744073709551616"); + } + return $success; + } + + public static function readFloat(&$input, &$value) + { + $data = null; + if (!$input->readRaw(4, $data)) { + return false; + } + $value = unpack('f', $data)[1]; + return true; + } + + public static function readDouble(&$input, &$value) + { + $data = null; + if (!$input->readRaw(8, $data)) { + return false; + } + $value = unpack('d', $data)[1]; + return true; + } + + public static function readBool(&$input, &$value) + { + if (!$input->readVarint64($value)) { + return false; + } + if ($value == 0) { + $value = false; + } else { + $value = true; + } + return true; + } + + public static function readString(&$input, &$value) + { + $length = 0; + return $input->readVarintSizeAsInt($length) && $input->readRaw($length, $value); + } + + public static function readMessage(&$input, &$message) + { + $length = 0; + if (!$input->readVarintSizeAsInt($length)) { + return false; + } + $old_limit = 0; + $recursion_limit = 0; + $input->incrementRecursionDepthAndPushLimit( + $length, + $old_limit, + $recursion_limit); + if ($recursion_limit < 0 || !$message->parseFromStream($input)) { + return false; + } + return $input->decrementRecursionDepthAndPopLimit($old_limit); + } + + public static function writeTag(&$output, $tag) + { + return $output->writeTag($tag); + } + + public static function writeInt32(&$output, $value) + { + return $output->writeVarint32($value, false); + } + + public static function writeInt64(&$output, $value) + { + return $output->writeVarint64($value); + } + + public static function writeUint32(&$output, $value) + { + return $output->writeVarint32($value, true); + } + + public static function writeUint64(&$output, $value) + { + return $output->writeVarint64($value); + } + + public static function writeSint32(&$output, $value) + { + $value = GPBWire::zigZagEncode32($value); + return $output->writeVarint32($value, true); + } + + public static function writeSint64(&$output, $value) + { + $value = GPBWire::zigZagEncode64($value); + return $output->writeVarint64($value); + } + + public static function writeFixed32(&$output, $value) + { + return $output->writeLittleEndian32($value); + } + + public static function writeFixed64(&$output, $value) + { + return $output->writeLittleEndian64($value); + } + + public static function writeSfixed32(&$output, $value) + { + return $output->writeLittleEndian32($value); + } + + public static function writeSfixed64(&$output, $value) + { + return $output->writeLittleEndian64($value); + } + + public static function writeBool(&$output, $value) + { + if ($value) { + return $output->writeVarint32(1, true); + } else { + return $output->writeVarint32(0, true); + } + } + + public static function writeFloat(&$output, $value) + { + $data = pack("f", $value); + return $output->writeRaw($data, 4); + } + + public static function writeDouble(&$output, $value) + { + $data = pack("d", $value); + return $output->writeRaw($data, 8); + } + + public static function writeString(&$output, $value) + { + return self::writeBytes($output, $value); + } + + public static function writeBytes(&$output, $value) + { + $size = strlen($value); + if (!$output->writeVarint32($size, true)) { + return false; + } + return $output->writeRaw($value, $size); + } + + public static function writeMessage(&$output, $value) + { + $size = $value->byteSize(); + if (!$output->writeVarint32($size, true)) { + return false; + } + return $value->serializeToStream($output); + } + + public static function makeTag($number, $type) + { + return ($number << 3) | self::getWireType($type); + } + + public static function tagSize($field) + { + $tag = self::makeTag($field->getNumber(), $field->getType()); + return self::varint32Size($tag); + } + + public static function varint32Size($value, $sign_extended = false) + { + if ($value < 0) { + if ($sign_extended) { + return 10; + } else { + return 5; + } + } + if ($value < (1 << 7)) { + return 1; + } + if ($value < (1 << 14)) { + return 2; + } + if ($value < (1 << 21)) { + return 3; + } + if ($value < (1 << 28)) { + return 4; + } + return 5; + } + + public static function sint32Size($value) + { + $value = self::zigZagEncode32($value); + return self::varint32Size($value); + } + + public static function sint64Size($value) + { + $value = self::zigZagEncode64($value); + return self::varint64Size($value); + } + + public static function varint64Size($value) + { + if (PHP_INT_SIZE == 4) { + if (bccomp($value, 0) < 0 || + bccomp($value, "9223372036854775807") > 0) { + return 10; + } + if (bccomp($value, 1 << 7) < 0) { + return 1; + } + if (bccomp($value, 1 << 14) < 0) { + return 2; + } + if (bccomp($value, 1 << 21) < 0) { + return 3; + } + if (bccomp($value, 1 << 28) < 0) { + return 4; + } + if (bccomp($value, '34359738368') < 0) { + return 5; + } + if (bccomp($value, '4398046511104') < 0) { + return 6; + } + if (bccomp($value, '562949953421312') < 0) { + return 7; + } + if (bccomp($value, '72057594037927936') < 0) { + return 8; + } + return 9; + } else { + if ($value < 0) { + return 10; + } + if ($value < (1 << 7)) { + return 1; + } + if ($value < (1 << 14)) { + return 2; + } + if ($value < (1 << 21)) { + return 3; + } + if ($value < (1 << 28)) { + return 4; + } + if ($value < (1 << 35)) { + return 5; + } + if ($value < (1 << 42)) { + return 6; + } + if ($value < (1 << 49)) { + return 7; + } + if ($value < (1 << 56)) { + return 8; + } + return 9; + } + } + + public static function serializeFieldToStream( + $value, + $field, + $need_tag, + &$output) + { + if ($need_tag) { + if (!GPBWire::writeTag( + $output, + self::makeTag( + $field->getNumber(), + $field->getType()))) { + return false; + } + } + switch ($field->getType()) { + case GPBType::DOUBLE: + if (!GPBWire::writeDouble($output, $value)) { + return false; + } + break; + case GPBType::FLOAT: + if (!GPBWire::writeFloat($output, $value)) { + return false; + } + break; + case GPBType::INT64: + if (!GPBWire::writeInt64($output, $value)) { + return false; + } + break; + case GPBType::UINT64: + if (!GPBWire::writeUint64($output, $value)) { + return false; + } + break; + case GPBType::INT32: + if (!GPBWire::writeInt32($output, $value)) { + return false; + } + break; + case GPBType::FIXED32: + if (!GPBWire::writeFixed32($output, $value)) { + return false; + } + break; + case GPBType::FIXED64: + if (!GPBWire::writeFixed64($output, $value)) { + return false; + } + break; + case GPBType::BOOL: + if (!GPBWire::writeBool($output, $value)) { + return false; + } + break; + case GPBType::STRING: + if (!GPBWire::writeString($output, $value)) { + return false; + } + break; + // case GPBType::GROUP: + // echo "GROUP\xA"; + // trigger_error("Not implemented.", E_ERROR); + // break; + case GPBType::MESSAGE: + if (!GPBWire::writeMessage($output, $value)) { + return false; + } + break; + case GPBType::BYTES: + if (!GPBWire::writeBytes($output, $value)) { + return false; + } + break; + case GPBType::UINT32: + if (PHP_INT_SIZE === 8 && $value < 0) { + $value += 4294967296; + } + if (!GPBWire::writeUint32($output, $value)) { + return false; + } + break; + case GPBType::ENUM: + if (!GPBWire::writeInt32($output, $value)) { + return false; + } + break; + case GPBType::SFIXED32: + if (!GPBWire::writeSfixed32($output, $value)) { + return false; + } + break; + case GPBType::SFIXED64: + if (!GPBWire::writeSfixed64($output, $value)) { + return false; + } + break; + case GPBType::SINT32: + if (!GPBWire::writeSint32($output, $value)) { + return false; + } + break; + case GPBType::SINT64: + if (!GPBWire::writeSint64($output, $value)) { + return false; + } + break; + default: + user_error("Unsupported type."); + return false; + } + + return true; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php new file mode 100644 index 0000000..c1ad370 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php @@ -0,0 +1,43 @@ +google.protobuf.GeneratedCodeInfo + */ +class GeneratedCodeInfo extends \Google\Protobuf\Internal\Message +{ + /** + * An Annotation connects some span of text in generated code to an element + * of its generating .proto file. + * + * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; + */ + private $annotation; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\GeneratedCodeInfo\Annotation>|\Google\Protobuf\Internal\RepeatedField $annotation + * An Annotation connects some span of text in generated code to an element + * of its generating .proto file. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * An Annotation connects some span of text in generated code to an element + * of its generating .proto file. + * + * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getAnnotation() + { + return $this->annotation; + } + + /** + * An Annotation connects some span of text in generated code to an element + * of its generating .proto file. + * + * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; + * @param array<\Google\Protobuf\Internal\GeneratedCodeInfo\Annotation>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setAnnotation($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\GeneratedCodeInfo\Annotation::class); + $this->annotation = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php new file mode 100644 index 0000000..617fdac --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php @@ -0,0 +1,218 @@ +google.protobuf.GeneratedCodeInfo.Annotation + */ +class Annotation extends \Google\Protobuf\Internal\Message +{ + /** + * Identifies the element in the original source .proto file. This field + * is formatted the same as SourceCodeInfo.Location.path. + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + */ + private $path; + /** + * Identifies the filesystem path to the original source .proto. + * + * Generated from protobuf field optional string source_file = 2; + */ + protected $source_file = null; + /** + * Identifies the starting offset in bytes in the generated code + * that relates to the identified object. + * + * Generated from protobuf field optional int32 begin = 3; + */ + protected $begin = null; + /** + * Identifies the ending offset in bytes in the generated code that + * relates to the identified offset. The end offset should be one past + * the last relevant byte (so the length of the text = end - begin). + * + * Generated from protobuf field optional int32 end = 4; + */ + protected $end = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array|\Google\Protobuf\Internal\RepeatedField $path + * Identifies the element in the original source .proto file. This field + * is formatted the same as SourceCodeInfo.Location.path. + * @type string $source_file + * Identifies the filesystem path to the original source .proto. + * @type int $begin + * Identifies the starting offset in bytes in the generated code + * that relates to the identified object. + * @type int $end + * Identifies the ending offset in bytes in the generated code that + * relates to the identified offset. The end offset should be one past + * the last relevant byte (so the length of the text = end - begin). + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Identifies the element in the original source .proto file. This field + * is formatted the same as SourceCodeInfo.Location.path. + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getPath() + { + return $this->path; + } + + /** + * Identifies the element in the original source .proto file. This field + * is formatted the same as SourceCodeInfo.Location.path. + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setPath($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->path = $arr; + + return $this; + } + + /** + * Identifies the filesystem path to the original source .proto. + * + * Generated from protobuf field optional string source_file = 2; + * @return string + */ + public function getSourceFile() + { + return isset($this->source_file) ? $this->source_file : ''; + } + + public function hasSourceFile() + { + return isset($this->source_file); + } + + public function clearSourceFile() + { + unset($this->source_file); + } + + /** + * Identifies the filesystem path to the original source .proto. + * + * Generated from protobuf field optional string source_file = 2; + * @param string $var + * @return $this + */ + public function setSourceFile($var) + { + GPBUtil::checkString($var, True); + $this->source_file = $var; + + return $this; + } + + /** + * Identifies the starting offset in bytes in the generated code + * that relates to the identified object. + * + * Generated from protobuf field optional int32 begin = 3; + * @return int + */ + public function getBegin() + { + return isset($this->begin) ? $this->begin : 0; + } + + public function hasBegin() + { + return isset($this->begin); + } + + public function clearBegin() + { + unset($this->begin); + } + + /** + * Identifies the starting offset in bytes in the generated code + * that relates to the identified object. + * + * Generated from protobuf field optional int32 begin = 3; + * @param int $var + * @return $this + */ + public function setBegin($var) + { + GPBUtil::checkInt32($var); + $this->begin = $var; + + return $this; + } + + /** + * Identifies the ending offset in bytes in the generated code that + * relates to the identified offset. The end offset should be one past + * the last relevant byte (so the length of the text = end - begin). + * + * Generated from protobuf field optional int32 end = 4; + * @return int + */ + public function getEnd() + { + return isset($this->end) ? $this->end : 0; + } + + public function hasEnd() + { + return isset($this->end); + } + + public function clearEnd() + { + unset($this->end); + } + + /** + * Identifies the ending offset in bytes in the generated code that + * relates to the identified offset. The end offset should be one past + * the last relevant byte (so the length of the text = end - begin). + * + * Generated from protobuf field optional int32 end = 4; + * @param int $var + * @return $this + */ + public function setEnd($var) + { + GPBUtil::checkInt32($var); + $this->end = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Annotation::class, \Google\Protobuf\Internal\GeneratedCodeInfo_Annotation::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php new file mode 100644 index 0000000..e36f1e5 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php @@ -0,0 +1,16 @@ +getPublicDescriptor(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php new file mode 100644 index 0000000..ed5d166 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php @@ -0,0 +1,43 @@ +public_desc; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php new file mode 100644 index 0000000..e89481f --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php @@ -0,0 +1,71 @@ +getFieldByNumber(2); + if ($value_field->getType() == GPBType::MESSAGE) { + $klass = $value_field->getMessageType()->getClass(); + $value = new $klass; + $this->setValue($value); + } + } + + public function setKey($key) { + $this->key = $key; + } + + public function getKey() { + return $this->key; + } + + public function setValue($value) { + $this->value = $value; + } + + public function getValue() { + return $this->value; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php new file mode 100644 index 0000000..d413c6d --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php @@ -0,0 +1,298 @@ +container = []; + $this->key_type = $key_type; + $this->value_type = $value_type; + $this->klass = $klass; + + if ($this->value_type == GPBType::MESSAGE) { + $pool = DescriptorPool::getGeneratedPool(); + $desc = $pool->getDescriptorByClassName($klass); + if ($desc == NULL) { + new $klass; // No msg class instance has been created before. + $desc = $pool->getDescriptorByClassName($klass); + } + $this->klass = $desc->getClass(); + $this->legacy_klass = $desc->getLegacyClass(); + } + } + + /** + * @ignore + */ + public function getKeyType() + { + return $this->key_type; + } + + /** + * @ignore + */ + public function getValueType() + { + return $this->value_type; + } + + /** + * @ignore + */ + public function getValueClass() + { + return $this->klass; + } + + /** + * @ignore + */ + public function getLegacyValueClass() + { + return $this->legacy_klass; + } + + /** + * Return the element at the given key. + * + * This will also be called for: $ele = $arr[$key] + * + * @param int|string $key The key of the element to be fetched. + * @return object The stored element at given key. + * @throws \ErrorException Invalid type for index. + * @throws \ErrorException Non-existing index. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function offsetGet($key) + { + return $this->container[$key]; + } + + /** + * Assign the element at the given key. + * + * This will also be called for: $arr[$key] = $value + * + * @param int|string $key The key of the element to be fetched. + * @param object $value The element to be assigned. + * @return void + * @throws \ErrorException Invalid type for key. + * @throws \ErrorException Invalid type for value. + * @throws \ErrorException Non-existing key. + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function offsetSet($key, $value) + { + $this->checkKey($this->key_type, $key); + + switch ($this->value_type) { + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::INT32: + case GPBType::ENUM: + GPBUtil::checkInt32($value); + break; + case GPBType::FIXED32: + case GPBType::UINT32: + GPBUtil::checkUint32($value); + break; + case GPBType::SFIXED64: + case GPBType::SINT64: + case GPBType::INT64: + GPBUtil::checkInt64($value); + break; + case GPBType::FIXED64: + case GPBType::UINT64: + GPBUtil::checkUint64($value); + break; + case GPBType::FLOAT: + GPBUtil::checkFloat($value); + break; + case GPBType::DOUBLE: + GPBUtil::checkDouble($value); + break; + case GPBType::BOOL: + GPBUtil::checkBool($value); + break; + case GPBType::STRING: + GPBUtil::checkString($value, true); + break; + case GPBType::MESSAGE: + if (is_null($value)) { + trigger_error("Map element cannot be null.", E_USER_ERROR); + } + GPBUtil::checkMessage($value, $this->klass); + break; + default: + break; + } + + $this->container[$key] = $value; + } + + /** + * Remove the element at the given key. + * + * This will also be called for: unset($arr) + * + * @param int|string $key The key of the element to be removed. + * @return void + * @throws \ErrorException Invalid type for key. + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function offsetUnset($key) + { + $this->checkKey($this->key_type, $key); + unset($this->container[$key]); + } + + /** + * Check the existence of the element at the given key. + * + * This will also be called for: isset($arr) + * + * @param int|string $key The key of the element to be removed. + * @return bool True if the element at the given key exists. + * @throws \ErrorException Invalid type for key. + */ + public function offsetExists($key): bool + { + $this->checkKey($this->key_type, $key); + return isset($this->container[$key]); + } + + /** + * @ignore + */ + public function getIterator(): Traversable + { + return new MapFieldIter($this->container, $this->key_type); + } + + /** + * Return the number of stored elements. + * + * This will also be called for: count($arr) + * + * @return integer The number of stored elements. + */ + public function count(): int + { + return count($this->container); + } + + /** + * @ignore + */ + private function checkKey($key_type, &$key) + { + switch ($key_type) { + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::INT32: + GPBUtil::checkInt32($key); + break; + case GPBType::FIXED32: + case GPBType::UINT32: + GPBUtil::checkUint32($key); + break; + case GPBType::SFIXED64: + case GPBType::SINT64: + case GPBType::INT64: + GPBUtil::checkInt64($key); + break; + case GPBType::FIXED64: + case GPBType::UINT64: + GPBUtil::checkUint64($key); + break; + case GPBType::BOOL: + GPBUtil::checkBool($key); + break; + case GPBType::STRING: + GPBUtil::checkString($key, true); + break; + default: + trigger_error( + "Given type cannot be map key.", + E_USER_ERROR); + break; + } + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php new file mode 100644 index 0000000..2ff6b44 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php @@ -0,0 +1,142 @@ +container = $container; + $this->key_type = $key_type; + } + + /** + * Reset the status of the iterator + * + * @return void + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function rewind() + { + reset($this->container); + } + + /** + * Return the element at the current position. + * + * @return object The element at the current position. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function current() + { + return current($this->container); + } + + /** + * Return the current key. + * + * @return object The current key. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function key() + { + $key = key($this->container); + switch ($this->key_type) { + case GPBType::INT64: + case GPBType::UINT64: + case GPBType::FIXED64: + case GPBType::SFIXED64: + case GPBType::SINT64: + if (PHP_INT_SIZE === 8) { + return $key; + } + // Intentionally fall through + case GPBType::STRING: + // PHP associative array stores int string as int for key. + return strval($key); + case GPBType::BOOL: + // PHP associative array stores bool as integer for key. + return boolval($key); + default: + return $key; + } + } + + /** + * Move to the next position. + * + * @return void + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function next() + { + next($this->container); + } + + /** + * Check whether there are more elements to iterate. + * + * @return bool True if there are more elements to iterate. + */ + public function valid(): bool + { + return key($this->container) !== null; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php new file mode 100644 index 0000000..1d1fbf2 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php @@ -0,0 +1,2034 @@ +initWithDescriptor($data); + } else { + $this->initWithGeneratedPool(); + if (is_array($data)) { + $this->mergeFromArray($data); + } else if (!empty($data)) { + throw new \InvalidArgumentException( + 'Message constructor must be an array or null.' + ); + } + } + } + + /** + * @ignore + */ + private function initWithGeneratedPool() + { + $pool = DescriptorPool::getGeneratedPool(); + $this->desc = $pool->getDescriptorByClassName(get_class($this)); + if (is_null($this->desc)) { + throw new \InvalidArgumentException( + get_class($this) ." is not found in descriptor pool. " . + 'Only generated classes may derive from Message.'); + } + foreach ($this->desc->getField() as $field) { + $setter = $field->getSetter(); + if ($field->isMap()) { + $message_type = $field->getMessageType(); + $key_field = $message_type->getFieldByNumber(1); + $value_field = $message_type->getFieldByNumber(2); + switch ($value_field->getType()) { + case GPBType::MESSAGE: + case GPBType::GROUP: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType(), + $value_field->getMessageType()->getClass()); + $this->$setter($map_field); + break; + case GPBType::ENUM: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType(), + $value_field->getEnumType()->getClass()); + $this->$setter($map_field); + break; + default: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType()); + $this->$setter($map_field); + break; + } + } else if ($field->getLabel() === GPBLabel::REPEATED) { + switch ($field->getType()) { + case GPBType::MESSAGE: + case GPBType::GROUP: + $repeated_field = new RepeatedField( + $field->getType(), + $field->getMessageType()->getClass()); + $this->$setter($repeated_field); + break; + case GPBType::ENUM: + $repeated_field = new RepeatedField( + $field->getType(), + $field->getEnumType()->getClass()); + $this->$setter($repeated_field); + break; + default: + $repeated_field = new RepeatedField($field->getType()); + $this->$setter($repeated_field); + break; + } + } else if ($field->getOneofIndex() !== -1) { + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + $this->$oneof_name = new OneofField($oneof); + } else if ($field->getLabel() === GPBLabel::OPTIONAL && + PHP_INT_SIZE == 4) { + switch ($field->getType()) { + case GPBType::INT64: + case GPBType::UINT64: + case GPBType::FIXED64: + case GPBType::SFIXED64: + case GPBType::SINT64: + $this->$setter("0"); + } + } + } + } + + /** + * @ignore + */ + private function initWithDescriptor(Descriptor $desc) + { + $this->desc = $desc; + foreach ($desc->getField() as $field) { + $setter = $field->getSetter(); + $defaultValue = $this->defaultValue($field); + $this->$setter($defaultValue); + } + } + + protected function readWrapperValue($member) + { + $field = $this->desc->getFieldByName($member); + $oneof_index = $field->getOneofIndex(); + if ($oneof_index === -1) { + $wrapper = $this->$member; + } else { + $wrapper = $this->readOneof($field->getNumber()); + } + + if (is_null($wrapper)) { + return NULL; + } else { + return $wrapper->getValue(); + } + } + + protected function writeWrapperValue($member, $value) + { + $field = $this->desc->getFieldByName($member); + $wrapped_value = $value; + if (!is_null($value)) { + $desc = $field->getMessageType(); + $klass = $desc->getClass(); + $wrapped_value = new $klass; + $wrapped_value->setValue($value); + } + + $oneof_index = $field->getOneofIndex(); + if ($oneof_index === -1) { + $this->$member = $wrapped_value; + } else { + $this->writeOneof($field->getNumber(), $wrapped_value); + } + } + + protected function readOneof($number) + { + $field = $this->desc->getFieldByNumber($number); + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + $oneof_field = $this->$oneof_name; + if ($number === $oneof_field->getNumber()) { + return $oneof_field->getValue(); + } else { + return $this->defaultValue($field); + } + } + + protected function hasOneof($number) + { + $field = $this->desc->getFieldByNumber($number); + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + $oneof_field = $this->$oneof_name; + return $number === $oneof_field->getNumber(); + } + + protected function writeOneof($number, $value) + { + $field = $this->desc->getFieldByNumber($number); + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + if ($value === null) { + $this->$oneof_name = new OneofField($oneof); + } else { + $oneof_field = $this->$oneof_name; + $oneof_field->setValue($value); + $oneof_field->setFieldName($field->getName()); + $oneof_field->setNumber($number); + } + } + + protected function whichOneof($oneof_name) + { + $oneof_field = $this->$oneof_name; + $number = $oneof_field->getNumber(); + if ($number == 0) { + return ""; + } + $field = $this->desc->getFieldByNumber($number); + return $field->getName(); + } + + /** + * @ignore + */ + private function defaultValue($field) + { + $value = null; + + switch ($field->getType()) { + case GPBType::DOUBLE: + case GPBType::FLOAT: + return 0.0; + case GPBType::UINT32: + case GPBType::INT32: + case GPBType::FIXED32: + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::ENUM: + return 0; + case GPBType::INT64: + case GPBType::UINT64: + case GPBType::FIXED64: + case GPBType::SFIXED64: + case GPBType::SINT64: + if (PHP_INT_SIZE === 4) { + return '0'; + } else { + return 0; + } + case GPBType::BOOL: + return false; + case GPBType::STRING: + case GPBType::BYTES: + return ""; + case GPBType::GROUP: + case GPBType::MESSAGE: + return null; + default: + user_error("Unsupported type."); + return false; + } + } + + /** + * @ignore + */ + private function skipField($input, $tag) + { + $number = GPBWire::getTagFieldNumber($tag); + if ($number === 0) { + throw new GPBDecodeException("Illegal field number zero."); + } + + $start = $input->current(); + switch (GPBWire::getTagWireType($tag)) { + case GPBWireType::VARINT: + $uint64 = 0; + if (!$input->readVarint64($uint64)) { + throw new GPBDecodeException( + "Unexpected EOF inside varint."); + } + break; + case GPBWireType::FIXED64: + $uint64 = 0; + if (!$input->readLittleEndian64($uint64)) { + throw new GPBDecodeException( + "Unexpected EOF inside fixed64."); + } + break; + case GPBWireType::FIXED32: + $uint32 = 0; + if (!$input->readLittleEndian32($uint32)) { + throw new GPBDecodeException( + "Unexpected EOF inside fixed32."); + } + break; + case GPBWireType::LENGTH_DELIMITED: + $length = 0; + if (!$input->readVarint32($length)) { + throw new GPBDecodeException( + "Unexpected EOF inside length."); + } + $data = NULL; + if (!$input->readRaw($length, $data)) { + throw new GPBDecodeException( + "Unexpected EOF inside length delimited data."); + } + break; + case GPBWireType::START_GROUP: + case GPBWireType::END_GROUP: + throw new GPBDecodeException("Unexpected wire type."); + default: + throw new GPBDecodeException("Unexpected wire type."); + } + $end = $input->current(); + + $bytes = str_repeat(chr(0), CodedOutputStream::MAX_VARINT64_BYTES); + $size = CodedOutputStream::writeVarintToArray($tag, $bytes, true); + $this->unknown .= substr($bytes, 0, $size) . $input->substr($start, $end); + } + + /** + * @ignore + */ + private static function parseFieldFromStreamNoTag($input, $field, &$value) + { + switch ($field->getType()) { + case GPBType::DOUBLE: + if (!GPBWire::readDouble($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside double field."); + } + break; + case GPBType::FLOAT: + if (!GPBWire::readFloat($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside float field."); + } + break; + case GPBType::INT64: + if (!GPBWire::readInt64($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside int64 field."); + } + break; + case GPBType::UINT64: + if (!GPBWire::readUint64($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside uint64 field."); + } + break; + case GPBType::INT32: + if (!GPBWire::readInt32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside int32 field."); + } + break; + case GPBType::FIXED64: + if (!GPBWire::readFixed64($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside fixed64 field."); + } + break; + case GPBType::FIXED32: + if (!GPBWire::readFixed32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside fixed32 field."); + } + break; + case GPBType::BOOL: + if (!GPBWire::readBool($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside bool field."); + } + break; + case GPBType::STRING: + // TODO(teboring): Add utf-8 check. + if (!GPBWire::readString($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside string field."); + } + break; + case GPBType::GROUP: + trigger_error("Not implemented.", E_USER_ERROR); + break; + case GPBType::MESSAGE: + if ($field->isMap()) { + $value = new MapEntry($field->getMessageType()); + } else { + $klass = $field->getMessageType()->getClass(); + $value = new $klass; + } + if (!GPBWire::readMessage($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside message."); + } + break; + case GPBType::BYTES: + if (!GPBWire::readString($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside bytes field."); + } + break; + case GPBType::UINT32: + if (!GPBWire::readUint32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside uint32 field."); + } + break; + case GPBType::ENUM: + // TODO(teboring): Check unknown enum value. + if (!GPBWire::readInt32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside enum field."); + } + break; + case GPBType::SFIXED32: + if (!GPBWire::readSfixed32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside sfixed32 field."); + } + break; + case GPBType::SFIXED64: + if (!GPBWire::readSfixed64($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside sfixed64 field."); + } + break; + case GPBType::SINT32: + if (!GPBWire::readSint32($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside sint32 field."); + } + break; + case GPBType::SINT64: + if (!GPBWire::readSint64($input, $value)) { + throw new GPBDecodeException( + "Unexpected EOF inside sint64 field."); + } + break; + default: + user_error("Unsupported type."); + return false; + } + return true; + } + + /** + * @ignore + */ + private function parseFieldFromStream($tag, $input, $field) + { + $value = null; + + if (is_null($field)) { + $value_format = GPBWire::UNKNOWN; + } elseif (GPBWire::getTagWireType($tag) === + GPBWire::getWireType($field->getType())) { + $value_format = GPBWire::NORMAL_FORMAT; + } elseif ($field->isPackable() && + GPBWire::getTagWireType($tag) === + GPBWire::WIRETYPE_LENGTH_DELIMITED) { + $value_format = GPBWire::PACKED_FORMAT; + } else { + // the wire type doesn't match. Put it in our unknown field set. + $value_format = GPBWire::UNKNOWN; + } + + if ($value_format === GPBWire::UNKNOWN) { + $this->skipField($input, $tag); + return; + } elseif ($value_format === GPBWire::NORMAL_FORMAT) { + self::parseFieldFromStreamNoTag($input, $field, $value); + } elseif ($value_format === GPBWire::PACKED_FORMAT) { + $length = 0; + if (!GPBWire::readInt32($input, $length)) { + throw new GPBDecodeException( + "Unexpected EOF inside packed length."); + } + $limit = $input->pushLimit($length); + $getter = $field->getGetter(); + while ($input->bytesUntilLimit() > 0) { + self::parseFieldFromStreamNoTag($input, $field, $value); + $this->appendHelper($field, $value); + } + $input->popLimit($limit); + return; + } else { + return; + } + + if ($field->isMap()) { + $this->kvUpdateHelper($field, $value->getKey(), $value->getValue()); + } else if ($field->isRepeated()) { + $this->appendHelper($field, $value); + } else { + $setter = $field->getSetter(); + $this->$setter($value); + } + } + + /** + * Clear all containing fields. + * @return null. + */ + public function clear() + { + $this->unknown = ""; + foreach ($this->desc->getField() as $field) { + $setter = $field->getSetter(); + if ($field->isMap()) { + $message_type = $field->getMessageType(); + $key_field = $message_type->getFieldByNumber(1); + $value_field = $message_type->getFieldByNumber(2); + switch ($value_field->getType()) { + case GPBType::MESSAGE: + case GPBType::GROUP: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType(), + $value_field->getMessageType()->getClass()); + $this->$setter($map_field); + break; + case GPBType::ENUM: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType(), + $value_field->getEnumType()->getClass()); + $this->$setter($map_field); + break; + default: + $map_field = new MapField( + $key_field->getType(), + $value_field->getType()); + $this->$setter($map_field); + break; + } + } else if ($field->getLabel() === GPBLabel::REPEATED) { + switch ($field->getType()) { + case GPBType::MESSAGE: + case GPBType::GROUP: + $repeated_field = new RepeatedField( + $field->getType(), + $field->getMessageType()->getClass()); + $this->$setter($repeated_field); + break; + case GPBType::ENUM: + $repeated_field = new RepeatedField( + $field->getType(), + $field->getEnumType()->getClass()); + $this->$setter($repeated_field); + break; + default: + $repeated_field = new RepeatedField($field->getType()); + $this->$setter($repeated_field); + break; + } + } else if ($field->getOneofIndex() !== -1) { + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + $this->$oneof_name = new OneofField($oneof); + } else if ($field->getLabel() === GPBLabel::OPTIONAL) { + switch ($field->getType()) { + case GPBType::DOUBLE : + case GPBType::FLOAT : + $this->$setter(0.0); + break; + case GPBType::INT32 : + case GPBType::FIXED32 : + case GPBType::UINT32 : + case GPBType::SFIXED32 : + case GPBType::SINT32 : + case GPBType::ENUM : + $this->$setter(0); + break; + case GPBType::BOOL : + $this->$setter(false); + break; + case GPBType::STRING : + case GPBType::BYTES : + $this->$setter(""); + break; + case GPBType::GROUP : + case GPBType::MESSAGE : + $null = null; + $this->$setter($null); + break; + } + if (PHP_INT_SIZE == 4) { + switch ($field->getType()) { + case GPBType::INT64: + case GPBType::UINT64: + case GPBType::FIXED64: + case GPBType::SFIXED64: + case GPBType::SINT64: + $this->$setter("0"); + } + } else { + switch ($field->getType()) { + case GPBType::INT64: + case GPBType::UINT64: + case GPBType::FIXED64: + case GPBType::SFIXED64: + case GPBType::SINT64: + $this->$setter(0); + } + } + } + } + } + + /** + * Clear all unknown fields previously parsed. + * @return null. + */ + public function discardUnknownFields() + { + $this->unknown = ""; + foreach ($this->desc->getField() as $field) { + if ($field->getType() != GPBType::MESSAGE) { + continue; + } + if ($field->isMap()) { + $value_field = $field->getMessageType()->getFieldByNumber(2); + if ($value_field->getType() != GPBType::MESSAGE) { + continue; + } + $getter = $field->getGetter(); + $map = $this->$getter(); + foreach ($map as $key => $value) { + $value->discardUnknownFields(); + } + } else if ($field->getLabel() === GPBLabel::REPEATED) { + $getter = $field->getGetter(); + $arr = $this->$getter(); + foreach ($arr as $sub) { + $sub->discardUnknownFields(); + } + } else if ($field->getLabel() === GPBLabel::OPTIONAL) { + $getter = $field->getGetter(); + $sub = $this->$getter(); + if (!is_null($sub)) { + $sub->discardUnknownFields(); + } + } + } + } + + /** + * Merges the contents of the specified message into current message. + * + * This method merges the contents of the specified message into the + * current message. Singular fields that are set in the specified message + * overwrite the corresponding fields in the current message. Repeated + * fields are appended. Map fields key-value pairs are overwritten. + * Singular/Oneof sub-messages are recursively merged. All overwritten + * sub-messages are deep-copied. + * + * @param object $msg Protobuf message to be merged from. + * @return null. + */ + public function mergeFrom($msg) + { + if (get_class($this) !== get_class($msg)) { + user_error("Cannot merge messages with different class."); + return; + } + + foreach ($this->desc->getField() as $field) { + $setter = $field->getSetter(); + $getter = $field->getGetter(); + if ($field->isMap()) { + if (count($msg->$getter()) != 0) { + $value_field = $field->getMessageType()->getFieldByNumber(2); + foreach ($msg->$getter() as $key => $value) { + if ($value_field->getType() == GPBType::MESSAGE) { + $klass = $value_field->getMessageType()->getClass(); + $copy = new $klass; + $copy->mergeFrom($value); + + $this->kvUpdateHelper($field, $key, $copy); + } else { + $this->kvUpdateHelper($field, $key, $value); + } + } + } + } else if ($field->getLabel() === GPBLabel::REPEATED) { + if (count($msg->$getter()) != 0) { + foreach ($msg->$getter() as $tmp) { + if ($field->getType() == GPBType::MESSAGE) { + $klass = $field->getMessageType()->getClass(); + $copy = new $klass; + $copy->mergeFrom($tmp); + $this->appendHelper($field, $copy); + } else { + $this->appendHelper($field, $tmp); + } + } + } + } else if ($field->getLabel() === GPBLabel::OPTIONAL) { + if($msg->$getter() !== $this->defaultValue($field)) { + $tmp = $msg->$getter(); + if ($field->getType() == GPBType::MESSAGE) { + if (is_null($this->$getter())) { + $klass = $field->getMessageType()->getClass(); + $new_msg = new $klass; + $this->$setter($new_msg); + } + $this->$getter()->mergeFrom($tmp); + } else { + $this->$setter($tmp); + } + } + } + } + } + + /** + * Parses a protocol buffer contained in a string. + * + * This function takes a string in the (non-human-readable) binary wire + * format, matching the encoding output by serializeToString(). + * See mergeFrom() for merging behavior, if the field is already set in the + * specified message. + * + * @param string $data Binary protobuf data. + * @return null. + * @throws \Exception Invalid data. + */ + public function mergeFromString($data) + { + $input = new CodedInputStream($data); + $this->parseFromStream($input); + } + + /** + * Parses a json string to protobuf message. + * + * This function takes a string in the json wire format, matching the + * encoding output by serializeToJsonString(). + * See mergeFrom() for merging behavior, if the field is already set in the + * specified message. + * + * @param string $data Json protobuf data. + * @return null. + * @throws \Exception Invalid data. + */ + public function mergeFromJsonString($data, $ignore_unknown = false) + { + $input = new RawInputStream($data); + $this->parseFromJsonStream($input, $ignore_unknown); + } + + /** + * @ignore + */ + public function parseFromStream($input) + { + while (true) { + $tag = $input->readTag(); + // End of input. This is a valid place to end, so return true. + if ($tag === 0) { + return true; + } + + $number = GPBWire::getTagFieldNumber($tag); + $field = $this->desc->getFieldByNumber($number); + + $this->parseFieldFromStream($tag, $input, $field); + } + } + + private function convertJsonValueToProtoValue( + $value, + $field, + $ignore_unknown, + $is_map_key = false) + { + switch ($field->getType()) { + case GPBType::MESSAGE: + $klass = $field->getMessageType()->getClass(); + $submsg = new $klass; + + if (is_a($submsg, "Google\Protobuf\Duration")) { + if (is_null($value)) { + return $this->defaultValue($field); + } else if (!is_string($value)) { + throw new GPBDecodeException("Expect string."); + } + return GPBUtil::parseDuration($value); + } else if ($field->isTimestamp()) { + if (is_null($value)) { + return $this->defaultValue($field); + } else if (!is_string($value)) { + throw new GPBDecodeException("Expect string."); + } + try { + $timestamp = GPBUtil::parseTimestamp($value); + } catch (\Exception $e) { + throw new GPBDecodeException( + "Invalid RFC 3339 timestamp: ".$e->getMessage()); + } + + $submsg->setSeconds($timestamp->getSeconds()); + $submsg->setNanos($timestamp->getNanos()); + } else if (is_a($submsg, "Google\Protobuf\FieldMask")) { + if (is_null($value)) { + return $this->defaultValue($field); + } + try { + return GPBUtil::parseFieldMask($value); + } catch (\Exception $e) { + throw new GPBDecodeException( + "Invalid FieldMask: ".$e->getMessage()); + } + } else { + if (is_null($value) && + !is_a($submsg, "Google\Protobuf\Value")) { + return $this->defaultValue($field); + } + if (GPBUtil::hasSpecialJsonMapping($submsg)) { + } elseif (!is_object($value) && !is_array($value)) { + throw new GPBDecodeException("Expect message."); + } + $submsg->mergeFromJsonArray($value, $ignore_unknown); + } + return $submsg; + case GPBType::ENUM: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (is_integer($value)) { + return $value; + } + $enum_value = $field->getEnumType()->getValueByName($value); + if (!is_null($enum_value)) { + return $enum_value->getNumber(); + } else if ($ignore_unknown) { + return $this->defaultValue($field); + } else { + throw new GPBDecodeException( + "Enum field only accepts integer or enum value name"); + } + case GPBType::STRING: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (is_numeric($value)) { + return strval($value); + } + if (!is_string($value)) { + throw new GPBDecodeException( + "String field only accepts string value"); + } + return $value; + case GPBType::BYTES: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (!is_string($value)) { + throw new GPBDecodeException( + "Byte field only accepts string value"); + } + $proto_value = base64_decode($value, true); + if ($proto_value === false) { + throw new GPBDecodeException("Invalid base64 characters"); + } + return $proto_value; + case GPBType::BOOL: + if (is_null($value)) { + return $this->defaultValue($field); + } + if ($is_map_key) { + if ($value === "true") { + return true; + } + if ($value === "false") { + return false; + } + throw new GPBDecodeException( + "Bool field only accepts bool value"); + } + if (!is_bool($value)) { + throw new GPBDecodeException( + "Bool field only accepts bool value"); + } + return $value; + case GPBType::FLOAT: + case GPBType::DOUBLE: + if (is_null($value)) { + return $this->defaultValue($field); + } + if ($value === "Infinity") { + return INF; + } + if ($value === "-Infinity") { + return -INF; + } + if ($value === "NaN") { + return NAN; + } + return $value; + case GPBType::INT32: + case GPBType::SINT32: + case GPBType::SFIXED32: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (!is_numeric($value)) { + throw new GPBDecodeException( + "Invalid data type for int32 field"); + } + if (is_string($value) && trim($value) !== $value) { + throw new GPBDecodeException( + "Invalid data type for int32 field"); + } + if (bccomp($value, "2147483647") > 0) { + throw new GPBDecodeException( + "Int32 too large"); + } + if (bccomp($value, "-2147483648") < 0) { + throw new GPBDecodeException( + "Int32 too small"); + } + return $value; + case GPBType::UINT32: + case GPBType::FIXED32: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (!is_numeric($value)) { + throw new GPBDecodeException( + "Invalid data type for uint32 field"); + } + if (is_string($value) && trim($value) !== $value) { + throw new GPBDecodeException( + "Invalid data type for int32 field"); + } + if (bccomp($value, 4294967295) > 0) { + throw new GPBDecodeException( + "Uint32 too large"); + } + return $value; + case GPBType::INT64: + case GPBType::SINT64: + case GPBType::SFIXED64: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (!is_numeric($value)) { + throw new GPBDecodeException( + "Invalid data type for int64 field"); + } + if (is_string($value) && trim($value) !== $value) { + throw new GPBDecodeException( + "Invalid data type for int64 field"); + } + if (bccomp($value, "9223372036854775807") > 0) { + throw new GPBDecodeException( + "Int64 too large"); + } + if (bccomp($value, "-9223372036854775808") < 0) { + throw new GPBDecodeException( + "Int64 too small"); + } + return $value; + case GPBType::UINT64: + case GPBType::FIXED64: + if (is_null($value)) { + return $this->defaultValue($field); + } + if (!is_numeric($value)) { + throw new GPBDecodeException( + "Invalid data type for int64 field"); + } + if (is_string($value) && trim($value) !== $value) { + throw new GPBDecodeException( + "Invalid data type for int64 field"); + } + if (bccomp($value, "18446744073709551615") > 0) { + throw new GPBDecodeException( + "Uint64 too large"); + } + if (bccomp($value, "9223372036854775807") > 0) { + $value = bcsub($value, "18446744073709551616"); + } + return $value; + default: + return $value; + } + } + + /** + * Populates the message from a user-supplied PHP array. Array keys + * correspond to Message properties and nested message properties. + * + * Example: + * ``` + * $message->mergeFromArray([ + * 'name' => 'This is a message name', + * 'interval' => [ + * 'startTime' => time() - 60, + * 'endTime' => time(), + * ] + * ]); + * ``` + * + * This method will trigger an error if it is passed data that cannot + * be converted to the correct type. For example, a StringValue field + * must receive data that is either a string or a StringValue object. + * + * @param array $array An array containing message properties and values. + * @return null. + */ + protected function mergeFromArray(array $array) + { + // Just call the setters for the field names + foreach ($array as $key => $value) { + $field = $this->desc->getFieldByName($key); + if (is_null($field)) { + throw new \UnexpectedValueException( + 'Invalid message property: ' . $key); + } + $setter = $field->getSetter(); + if ($field->isMap()) { + $valueField = $field->getMessageType()->getFieldByName('value'); + if (!is_null($valueField) && $valueField->isWrapperType()) { + self::normalizeArrayElementsToMessageType($value, $valueField->getMessageType()->getClass()); + } + } elseif ($field->isWrapperType()) { + $class = $field->getMessageType()->getClass(); + if ($field->isRepeated()) { + self::normalizeArrayElementsToMessageType($value, $class); + } else { + self::normalizeToMessageType($value, $class); + } + } + $this->$setter($value); + } + } + + /** + * Tries to normalize the elements in $value into a provided protobuf + * wrapper type $class. If $value is any type other than array, we do + * not do any conversion, and instead rely on the existing protobuf + * type checking. If $value is an array, we process each element and + * try to convert it to an instance of $class. + * + * @param mixed $value The array of values to normalize. + * @param string $class The expected wrapper class name + */ + private static function normalizeArrayElementsToMessageType(&$value, $class) + { + if (!is_array($value)) { + // In the case that $value is not an array, we do not want to + // attempt any conversion. Note that this includes the cases + // when $value is a RepeatedField of MapField. In those cases, + // we do not need to convert the elements, as they should + // already be the correct types. + return; + } else { + // Normalize each element in the array. + foreach ($value as $key => &$elementValue) { + self::normalizeToMessageType($elementValue, $class); + } + } + } + + /** + * Tries to normalize $value into a provided protobuf wrapper type $class. + * If $value is any type other than an object, we attempt to construct an + * instance of $class and assign $value to it using the setValue method + * shared by all wrapper types. + * + * This method will raise an error if it receives a type that cannot be + * assigned to the wrapper type via setValue. + * + * @param mixed $value The value to normalize. + * @param string $class The expected wrapper class name + */ + private static function normalizeToMessageType(&$value, $class) + { + if (is_null($value) || is_object($value)) { + // This handles the case that $value is an instance of $class. We + // choose not to do any more strict checking here, relying on the + // existing type checking done by GPBUtil. + return; + } else { + // Try to instantiate $class and set the value + try { + $msg = new $class; + $msg->setValue($value); + $value = $msg; + return; + } catch (\Exception $exception) { + trigger_error( + "Error normalizing value to type '$class': " . $exception->getMessage(), + E_USER_ERROR + ); + } + } + } + + protected function mergeFromJsonArray($array, $ignore_unknown) + { + if (is_a($this, "Google\Protobuf\Any")) { + $this->clear(); + $this->setTypeUrl($array["@type"]); + $msg = $this->unpack(); + if (GPBUtil::hasSpecialJsonMapping($msg)) { + $msg->mergeFromJsonArray($array["value"], $ignore_unknown); + } else { + unset($array["@type"]); + $msg->mergeFromJsonArray($array, $ignore_unknown); + } + $this->setValue($msg->serializeToString()); + return; + } + if (is_a($this, "Google\Protobuf\DoubleValue") || + is_a($this, "Google\Protobuf\FloatValue") || + is_a($this, "Google\Protobuf\Int64Value") || + is_a($this, "Google\Protobuf\UInt64Value") || + is_a($this, "Google\Protobuf\Int32Value") || + is_a($this, "Google\Protobuf\UInt32Value") || + is_a($this, "Google\Protobuf\BoolValue") || + is_a($this, "Google\Protobuf\StringValue")) { + $this->setValue($array); + return; + } + if (is_a($this, "Google\Protobuf\BytesValue")) { + $this->setValue(base64_decode($array)); + return; + } + if (is_a($this, "Google\Protobuf\Duration")) { + $this->mergeFrom(GPBUtil::parseDuration($array)); + return; + } + if (is_a($this, "Google\Protobuf\FieldMask")) { + $this->mergeFrom(GPBUtil::parseFieldMask($array)); + return; + } + if (is_a($this, "Google\Protobuf\Timestamp")) { + $this->mergeFrom(GPBUtil::parseTimestamp($array)); + return; + } + if (is_a($this, "Google\Protobuf\Struct")) { + $fields = $this->getFields(); + foreach($array as $key => $value) { + $v = new Value(); + $v->mergeFromJsonArray($value, $ignore_unknown); + $fields[$key] = $v; + } + return; + } + if (is_a($this, "Google\Protobuf\Value")) { + if (is_bool($array)) { + $this->setBoolValue($array); + } elseif (is_string($array)) { + $this->setStringValue($array); + } elseif (is_null($array)) { + $this->setNullValue(0); + } elseif (is_double($array) || is_integer($array)) { + $this->setNumberValue($array); + } elseif (is_array($array)) { + if (array_values($array) !== $array) { + // Associative array + $struct_value = $this->getStructValue(); + if (is_null($struct_value)) { + $struct_value = new Struct(); + $this->setStructValue($struct_value); + } + foreach ($array as $key => $v) { + $value = new Value(); + $value->mergeFromJsonArray($v, $ignore_unknown); + $values = $struct_value->getFields(); + $values[$key]= $value; + } + } else { + // Array + $list_value = $this->getListValue(); + if (is_null($list_value)) { + $list_value = new ListValue(); + $this->setListValue($list_value); + } + foreach ($array as $v) { + $value = new Value(); + $value->mergeFromJsonArray($v, $ignore_unknown); + $values = $list_value->getValues(); + $values[]= $value; + } + } + } else { + throw new GPBDecodeException("Invalid type for Value."); + } + return; + } + $this->mergeFromArrayJsonImpl($array, $ignore_unknown); + } + + private function mergeFromArrayJsonImpl($array, $ignore_unknown) + { + foreach ($array as $key => $value) { + $field = $this->desc->getFieldByJsonName($key); + if (is_null($field)) { + $field = $this->desc->getFieldByName($key); + if (is_null($field)) { + if ($ignore_unknown) { + continue; + } else { + throw new GPBDecodeException( + $key . ' is unknown.' + ); + } + } + } + if ($field->isMap()) { + if (is_null($value)) { + continue; + } + $key_field = $field->getMessageType()->getFieldByNumber(1); + $value_field = $field->getMessageType()->getFieldByNumber(2); + foreach ($value as $tmp_key => $tmp_value) { + if (is_null($tmp_value)) { + throw new \Exception( + "Map value field element cannot be null."); + } + $proto_key = $this->convertJsonValueToProtoValue( + $tmp_key, + $key_field, + $ignore_unknown, + true); + $proto_value = $this->convertJsonValueToProtoValue( + $tmp_value, + $value_field, + $ignore_unknown); + self::kvUpdateHelper($field, $proto_key, $proto_value); + } + } else if ($field->isRepeated()) { + if (is_null($value)) { + continue; + } + foreach ($value as $tmp) { + if (is_null($tmp)) { + throw new \Exception( + "Repeated field elements cannot be null."); + } + $proto_value = $this->convertJsonValueToProtoValue( + $tmp, + $field, + $ignore_unknown); + self::appendHelper($field, $proto_value); + } + } else { + $setter = $field->getSetter(); + $proto_value = $this->convertJsonValueToProtoValue( + $value, + $field, + $ignore_unknown); + if ($field->getType() === GPBType::MESSAGE) { + if (is_null($proto_value)) { + continue; + } + $getter = $field->getGetter(); + $submsg = $this->$getter(); + if (!is_null($submsg)) { + $submsg->mergeFrom($proto_value); + continue; + } + } + $this->$setter($proto_value); + } + } + } + + /** + * @ignore + */ + public function parseFromJsonStream($input, $ignore_unknown) + { + $array = json_decode($input->getData(), true, 512, JSON_BIGINT_AS_STRING); + if ($this instanceof \Google\Protobuf\ListValue) { + $array = ["values"=>$array]; + } + if (is_null($array)) { + if ($this instanceof \Google\Protobuf\Value) { + $this->setNullValue(\Google\Protobuf\NullValue::NULL_VALUE); + return; + } else { + throw new GPBDecodeException( + "Cannot decode json string: " . $input->getData()); + } + } + try { + $this->mergeFromJsonArray($array, $ignore_unknown); + } catch (\Exception $e) { + throw new GPBDecodeException($e->getMessage()); + } + } + + /** + * @ignore + */ + private function serializeSingularFieldToStream($field, &$output) + { + if (!$this->existField($field)) { + return true; + } + $getter = $field->getGetter(); + $value = $this->$getter(); + if (!GPBWire::serializeFieldToStream($value, $field, true, $output)) { + return false; + } + return true; + } + + /** + * @ignore + */ + private function serializeRepeatedFieldToStream($field, &$output) + { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count === 0) { + return true; + } + + $packed = $field->getPacked(); + if ($packed) { + if (!GPBWire::writeTag( + $output, + GPBWire::makeTag($field->getNumber(), GPBType::STRING))) { + return false; + } + $size = 0; + foreach ($values as $value) { + $size += $this->fieldDataOnlyByteSize($field, $value); + } + if (!$output->writeVarint32($size, true)) { + return false; + } + } + + foreach ($values as $value) { + if (!GPBWire::serializeFieldToStream( + $value, + $field, + !$packed, + $output)) { + return false; + } + } + return true; + } + + /** + * @ignore + */ + private function serializeMapFieldToStream($field, $output) + { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count === 0) { + return true; + } + + foreach ($values as $key => $value) { + $map_entry = new MapEntry($field->getMessageType()); + $map_entry->setKey($key); + $map_entry->setValue($value); + if (!GPBWire::serializeFieldToStream( + $map_entry, + $field, + true, + $output)) { + return false; + } + } + return true; + } + + /** + * @ignore + */ + private function serializeFieldToStream(&$output, $field) + { + if ($field->isMap()) { + return $this->serializeMapFieldToStream($field, $output); + } elseif ($field->isRepeated()) { + return $this->serializeRepeatedFieldToStream($field, $output); + } else { + return $this->serializeSingularFieldToStream($field, $output); + } + } + + /** + * @ignore + */ + private function serializeFieldToJsonStream(&$output, $field) + { + $getter = $field->getGetter(); + $values = $this->$getter(); + return GPBJsonWire::serializeFieldToStream( + $values, $field, $output, !GPBUtil::hasSpecialJsonMapping($this)); + } + + /** + * @ignore + */ + public function serializeToStream(&$output) + { + $fields = $this->desc->getField(); + foreach ($fields as $field) { + if (!$this->serializeFieldToStream($output, $field)) { + return false; + } + } + $output->writeRaw($this->unknown, strlen($this->unknown)); + return true; + } + + /** + * @ignore + */ + public function serializeToJsonStream(&$output) + { + if (is_a($this, 'Google\Protobuf\Any')) { + $output->writeRaw("{", 1); + $type_field = $this->desc->getFieldByNumber(1); + $value_msg = $this->unpack(); + + // Serialize type url. + $output->writeRaw("\"@type\":", 8); + $output->writeRaw("\"", 1); + $output->writeRaw($this->getTypeUrl(), strlen($this->getTypeUrl())); + $output->writeRaw("\"", 1); + + // Serialize value + if (GPBUtil::hasSpecialJsonMapping($value_msg)) { + $output->writeRaw(",\"value\":", 9); + $value_msg->serializeToJsonStream($output); + } else { + $value_fields = $value_msg->desc->getField(); + foreach ($value_fields as $field) { + if ($value_msg->existField($field)) { + $output->writeRaw(",", 1); + if (!$value_msg->serializeFieldToJsonStream($output, $field)) { + return false; + } + } + } + } + + $output->writeRaw("}", 1); + } elseif (is_a($this, 'Google\Protobuf\FieldMask')) { + $field_mask = GPBUtil::formatFieldMask($this); + $output->writeRaw("\"", 1); + $output->writeRaw($field_mask, strlen($field_mask)); + $output->writeRaw("\"", 1); + } elseif (is_a($this, 'Google\Protobuf\Duration')) { + $duration = GPBUtil::formatDuration($this) . "s"; + $output->writeRaw("\"", 1); + $output->writeRaw($duration, strlen($duration)); + $output->writeRaw("\"", 1); + } elseif (get_class($this) === 'Google\Protobuf\Timestamp') { + $timestamp = GPBUtil::formatTimestamp($this); + $timestamp = json_encode($timestamp); + $output->writeRaw($timestamp, strlen($timestamp)); + } elseif (get_class($this) === 'Google\Protobuf\ListValue') { + $field = $this->desc->getField()[1]; + if (!$this->existField($field)) { + $output->writeRaw("[]", 2); + } else { + if (!$this->serializeFieldToJsonStream($output, $field)) { + return false; + } + } + } elseif (get_class($this) === 'Google\Protobuf\Struct') { + $field = $this->desc->getField()[1]; + if (!$this->existField($field)) { + $output->writeRaw("{}", 2); + } else { + if (!$this->serializeFieldToJsonStream($output, $field)) { + return false; + } + } + } else { + if (!GPBUtil::hasSpecialJsonMapping($this)) { + $output->writeRaw("{", 1); + } + $fields = $this->desc->getField(); + $first = true; + foreach ($fields as $field) { + if ($this->existField($field) || + GPBUtil::hasJsonValue($this)) { + if ($first) { + $first = false; + } else { + $output->writeRaw(",", 1); + } + if (!$this->serializeFieldToJsonStream($output, $field)) { + return false; + } + } + } + if (!GPBUtil::hasSpecialJsonMapping($this)) { + $output->writeRaw("}", 1); + } + } + return true; + } + + /** + * Serialize the message to string. + * @return string Serialized binary protobuf data. + */ + public function serializeToString() + { + $output = new CodedOutputStream($this->byteSize()); + $this->serializeToStream($output); + return $output->getData(); + } + + /** + * Serialize the message to json string. + * @return string Serialized json protobuf data. + */ + public function serializeToJsonString() + { + $output = new CodedOutputStream($this->jsonByteSize()); + $this->serializeToJsonStream($output); + return $output->getData(); + } + + /** + * @ignore + */ + private function existField($field) + { + $getter = $field->getGetter(); + $hazzer = "has" . substr($getter, 3); + + if (method_exists($this, $hazzer)) { + return $this->$hazzer(); + } else if ($field->getOneofIndex() !== -1) { + // For old generated code, which does not have hazzers for oneof + // fields. + $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; + $oneof_name = $oneof->getName(); + return $this->$oneof_name->getNumber() === $field->getNumber(); + } + + $values = $this->$getter(); + if ($field->isMap()) { + return count($values) !== 0; + } elseif ($field->isRepeated()) { + return count($values) !== 0; + } else { + return $values !== $this->defaultValue($field); + } + } + + /** + * @ignore + */ + private function repeatedFieldDataOnlyByteSize($field) + { + $size = 0; + + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count !== 0) { + $size += $count * GPBWire::tagSize($field); + foreach ($values as $value) { + $size += $this->singularFieldDataOnlyByteSize($field); + } + } + } + + /** + * @ignore + */ + private function fieldDataOnlyByteSize($field, $value) + { + $size = 0; + + switch ($field->getType()) { + case GPBType::BOOL: + $size += 1; + break; + case GPBType::FLOAT: + case GPBType::FIXED32: + case GPBType::SFIXED32: + $size += 4; + break; + case GPBType::DOUBLE: + case GPBType::FIXED64: + case GPBType::SFIXED64: + $size += 8; + break; + case GPBType::INT32: + case GPBType::ENUM: + $size += GPBWire::varint32Size($value, true); + break; + case GPBType::UINT32: + $size += GPBWire::varint32Size($value); + break; + case GPBType::UINT64: + case GPBType::INT64: + $size += GPBWire::varint64Size($value); + break; + case GPBType::SINT32: + $size += GPBWire::sint32Size($value); + break; + case GPBType::SINT64: + $size += GPBWire::sint64Size($value); + break; + case GPBType::STRING: + case GPBType::BYTES: + $size += strlen($value); + $size += GPBWire::varint32Size($size); + break; + case GPBType::MESSAGE: + $size += $value->byteSize(); + $size += GPBWire::varint32Size($size); + break; + case GPBType::GROUP: + // TODO(teboring): Add support. + user_error("Unsupported type."); + break; + default: + user_error("Unsupported type."); + return 0; + } + + return $size; + } + + /** + * @ignore + */ + private function fieldDataOnlyJsonByteSize($field, $value) + { + $size = 0; + + switch ($field->getType()) { + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::INT32: + $size += strlen(strval($value)); + break; + case GPBType::FIXED32: + case GPBType::UINT32: + if ($value < 0) { + $value = bcadd($value, "4294967296"); + } + $size += strlen(strval($value)); + break; + case GPBType::FIXED64: + case GPBType::UINT64: + if ($value < 0) { + $value = bcadd($value, "18446744073709551616"); + } + // Intentional fall through. + case GPBType::SFIXED64: + case GPBType::INT64: + case GPBType::SINT64: + $size += 2; // size for "" + $size += strlen(strval($value)); + break; + case GPBType::FLOAT: + if (is_nan($value)) { + $size += strlen("NaN") + 2; + } elseif ($value === INF) { + $size += strlen("Infinity") + 2; + } elseif ($value === -INF) { + $size += strlen("-Infinity") + 2; + } else { + $size += strlen(sprintf("%.8g", $value)); + } + break; + case GPBType::DOUBLE: + if (is_nan($value)) { + $size += strlen("NaN") + 2; + } elseif ($value === INF) { + $size += strlen("Infinity") + 2; + } elseif ($value === -INF) { + $size += strlen("-Infinity") + 2; + } else { + $size += strlen(sprintf("%.17g", $value)); + } + break; + case GPBType::ENUM: + $enum_desc = $field->getEnumType(); + if ($enum_desc->getClass() === "Google\Protobuf\NullValue") { + $size += 4; + break; + } + $enum_value_desc = $enum_desc->getValueByNumber($value); + if (!is_null($enum_value_desc)) { + $size += 2; // size for "" + $size += strlen($enum_value_desc->getName()); + } else { + $str_value = strval($value); + $size += strlen($str_value); + } + break; + case GPBType::BOOL: + if ($value) { + $size += 4; + } else { + $size += 5; + } + break; + case GPBType::STRING: + $value = json_encode($value, JSON_UNESCAPED_UNICODE); + $size += strlen($value); + break; + case GPBType::BYTES: + # if (is_a($this, "Google\Protobuf\BytesValue")) { + # $size += strlen(json_encode($value)); + # } else { + # $size += strlen(base64_encode($value)); + # $size += 2; // size for \"\" + # } + $size += strlen(base64_encode($value)); + $size += 2; // size for \"\" + break; + case GPBType::MESSAGE: + $size += $value->jsonByteSize(); + break; +# case GPBType::GROUP: +# // TODO(teboring): Add support. +# user_error("Unsupported type."); +# break; + default: + user_error("Unsupported type " . $field->getType()); + return 0; + } + + return $size; + } + + /** + * @ignore + */ + private function fieldByteSize($field) + { + $size = 0; + if ($field->isMap()) { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count !== 0) { + $size += $count * GPBWire::tagSize($field); + $message_type = $field->getMessageType(); + $key_field = $message_type->getFieldByNumber(1); + $value_field = $message_type->getFieldByNumber(2); + foreach ($values as $key => $value) { + $data_size = 0; + if ($key != $this->defaultValue($key_field)) { + $data_size += $this->fieldDataOnlyByteSize( + $key_field, + $key); + $data_size += GPBWire::tagSize($key_field); + } + if ($value != $this->defaultValue($value_field)) { + $data_size += $this->fieldDataOnlyByteSize( + $value_field, + $value); + $data_size += GPBWire::tagSize($value_field); + } + $size += GPBWire::varint32Size($data_size) + $data_size; + } + } + } elseif ($field->isRepeated()) { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count !== 0) { + if ($field->getPacked()) { + $data_size = 0; + foreach ($values as $value) { + $data_size += $this->fieldDataOnlyByteSize($field, $value); + } + $size += GPBWire::tagSize($field); + $size += GPBWire::varint32Size($data_size); + $size += $data_size; + } else { + $size += $count * GPBWire::tagSize($field); + foreach ($values as $value) { + $size += $this->fieldDataOnlyByteSize($field, $value); + } + } + } + } elseif ($this->existField($field)) { + $size += GPBWire::tagSize($field); + $getter = $field->getGetter(); + $value = $this->$getter(); + $size += $this->fieldDataOnlyByteSize($field, $value); + } + return $size; + } + + /** + * @ignore + */ + private function fieldJsonByteSize($field) + { + $size = 0; + + if ($field->isMap()) { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count !== 0) { + if (!GPBUtil::hasSpecialJsonMapping($this)) { + $size += 3; // size for "\"\":". + $size += strlen($field->getJsonName()); // size for field name + } + $size += 2; // size for "{}". + $size += $count - 1; // size for commas + $getter = $field->getGetter(); + $map_entry = $field->getMessageType(); + $key_field = $map_entry->getFieldByNumber(1); + $value_field = $map_entry->getFieldByNumber(2); + switch ($key_field->getType()) { + case GPBType::STRING: + case GPBType::SFIXED64: + case GPBType::INT64: + case GPBType::SINT64: + case GPBType::FIXED64: + case GPBType::UINT64: + $additional_quote = false; + break; + default: + $additional_quote = true; + } + foreach ($values as $key => $value) { + if ($additional_quote) { + $size += 2; // size for "" + } + $size += $this->fieldDataOnlyJsonByteSize($key_field, $key); + $size += $this->fieldDataOnlyJsonByteSize($value_field, $value); + $size += 1; // size for : + } + } + } elseif ($field->isRepeated()) { + $getter = $field->getGetter(); + $values = $this->$getter(); + $count = count($values); + if ($count !== 0) { + if (!GPBUtil::hasSpecialJsonMapping($this)) { + $size += 3; // size for "\"\":". + $size += strlen($field->getJsonName()); // size for field name + } + $size += 2; // size for "[]". + $size += $count - 1; // size for commas + $getter = $field->getGetter(); + foreach ($values as $value) { + $size += $this->fieldDataOnlyJsonByteSize($field, $value); + } + } + } elseif ($this->existField($field) || GPBUtil::hasJsonValue($this)) { + if (!GPBUtil::hasSpecialJsonMapping($this)) { + $size += 3; // size for "\"\":". + $size += strlen($field->getJsonName()); // size for field name + } + $getter = $field->getGetter(); + $value = $this->$getter(); + $size += $this->fieldDataOnlyJsonByteSize($field, $value); + } + return $size; + } + + /** + * @ignore + */ + public function byteSize() + { + $size = 0; + + $fields = $this->desc->getField(); + foreach ($fields as $field) { + $size += $this->fieldByteSize($field); + } + $size += strlen($this->unknown); + return $size; + } + + private function appendHelper($field, $append_value) + { + $getter = $field->getGetter(); + $setter = $field->getSetter(); + + $field_arr_value = $this->$getter(); + $field_arr_value[] = $append_value; + + if (!is_object($field_arr_value)) { + $this->$setter($field_arr_value); + } + } + + private function kvUpdateHelper($field, $update_key, $update_value) + { + $getter = $field->getGetter(); + $setter = $field->getSetter(); + + $field_arr_value = $this->$getter(); + $field_arr_value[$update_key] = $update_value; + + if (!is_object($field_arr_value)) { + $this->$setter($field_arr_value); + } + } + + /** + * @ignore + */ + public function jsonByteSize() + { + $size = 0; + if (is_a($this, 'Google\Protobuf\Any')) { + // Size for "{}". + $size += 2; + + // Size for "\"@type\":". + $size += 8; + + // Size for url. +2 for "" /. + $size += strlen($this->getTypeUrl()) + 2; + + $value_msg = $this->unpack(); + if (GPBUtil::hasSpecialJsonMapping($value_msg)) { + // Size for "\",value\":". + $size += 9; + $size += $value_msg->jsonByteSize(); + } else { + // Size for value. +1 for comma, -2 for "{}". + $size += $value_msg->jsonByteSize() -1; + } + } elseif (get_class($this) === 'Google\Protobuf\FieldMask') { + $field_mask = GPBUtil::formatFieldMask($this); + $size += strlen($field_mask) + 2; // 2 for "" + } elseif (get_class($this) === 'Google\Protobuf\Duration') { + $duration = GPBUtil::formatDuration($this) . "s"; + $size += strlen($duration) + 2; // 2 for "" + } elseif (get_class($this) === 'Google\Protobuf\Timestamp') { + $timestamp = GPBUtil::formatTimestamp($this); + $timestamp = json_encode($timestamp); + $size += strlen($timestamp); + } elseif (get_class($this) === 'Google\Protobuf\ListValue') { + $field = $this->desc->getField()[1]; + if ($this->existField($field)) { + $field_size = $this->fieldJsonByteSize($field); + $size += $field_size; + } else { + // Size for "[]". + $size += 2; + } + } elseif (get_class($this) === 'Google\Protobuf\Struct') { + $field = $this->desc->getField()[1]; + if ($this->existField($field)) { + $field_size = $this->fieldJsonByteSize($field); + $size += $field_size; + } else { + // Size for "{}". + $size += 2; + } + } else { + if (!GPBUtil::hasSpecialJsonMapping($this)) { + // Size for "{}". + $size += 2; + } + + $fields = $this->desc->getField(); + $count = 0; + foreach ($fields as $field) { + $field_size = $this->fieldJsonByteSize($field); + $size += $field_size; + if ($field_size != 0) { + $count++; + } + } + // size for comma + $size += $count > 0 ? ($count - 1) : 0; + } + return $size; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php new file mode 100644 index 0000000..2724d26 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php @@ -0,0 +1,120 @@ +descriptor = new Descriptor(); + $this->descriptor->setFullName($full_name); + $this->descriptor->setClass($klass); + $this->pool = $pool; + } + + private function getFieldDescriptor($name, $label, $type, + $number, $type_name = null) + { + $field = new FieldDescriptor(); + $field->setName($name); + $camel_name = implode('', array_map('ucwords', explode('_', $name))); + $field->setGetter('get' . $camel_name); + $field->setSetter('set' . $camel_name); + $field->setType($type); + $field->setNumber($number); + $field->setLabel($label); + + // At this time, the message/enum type may have not been added to pool. + // So we use the type name as place holder and will replace it with the + // actual descriptor in cross building. + switch ($type) { + case GPBType::MESSAGE: + $field->setMessageType($type_name); + break; + case GPBType::ENUM: + $field->setEnumType($type_name); + break; + default: + break; + } + + return $field; + } + + public function optional($name, $type, $number, $type_name = null) + { + $this->descriptor->addField($this->getFieldDescriptor( + $name, + GPBLabel::OPTIONAL, + $type, + $number, + $type_name)); + return $this; + } + + public function repeated($name, $type, $number, $type_name = null) + { + $this->descriptor->addField($this->getFieldDescriptor( + $name, + GPBLabel::REPEATED, + $type, + $number, + $type_name)); + return $this; + } + + public function required($name, $type, $number, $type_name = null) + { + $this->descriptor->addField($this->getFieldDescriptor( + $name, + GPBLabel::REQUIRED, + $type, + $number, + $type_name)); + return $this; + } + + public function finalizeToPool() + { + $this->pool->addDescriptor($this->descriptor); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php new file mode 100644 index 0000000..5c61580 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php @@ -0,0 +1,387 @@ +google.protobuf.MessageOptions + */ +class MessageOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Set true to use the old proto1 MessageSet wire format for extensions. + * This is provided for backwards-compatibility with the MessageSet wire + * format. You should not use this for any other reason: It's less + * efficient, has fewer features, and is more complicated. + * The message must be defined exactly as follows: + * message Foo { + * option message_set_wire_format = true; + * extensions 4 to max; + * } + * Note that the message cannot have any defined fields; MessageSets only + * have extensions. + * All extensions of your type must be singular messages; e.g. they cannot + * be int32s, enums, or repeated messages. + * Because this is an option, the above two restrictions are not enforced by + * the protocol compiler. + * + * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; + */ + protected $message_set_wire_format = null; + /** + * Disables the generation of the standard "descriptor()" accessor, which can + * conflict with a field of the same name. This is meant to make migration + * from proto1 easier; new code should avoid fields named "descriptor". + * + * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; + */ + protected $no_standard_descriptor_accessor = null; + /** + * Is this message deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the message, or it will be completely ignored; in the very least, + * this is a formalization for deprecating messages. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + */ + protected $deprecated = null; + /** + * Whether the message is an automatically generated map entry type for the + * maps field. + * For maps fields: + * map map_field = 1; + * The parsed descriptor looks like: + * message MapFieldEntry { + * option map_entry = true; + * optional KeyType key = 1; + * optional ValueType value = 2; + * } + * repeated MapFieldEntry map_field = 1; + * Implementations may choose not to generate the map_entry=true message, but + * use a native map in the target language to hold the keys and values. + * The reflection APIs in such implementations still need to work as + * if the field is a repeated message field. + * NOTE: Do not set the option in .proto files. Always use the maps syntax + * instead. The option should only be implicitly set by the proto compiler + * parser. + * + * Generated from protobuf field optional bool map_entry = 7; + */ + protected $map_entry = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $message_set_wire_format + * Set true to use the old proto1 MessageSet wire format for extensions. + * This is provided for backwards-compatibility with the MessageSet wire + * format. You should not use this for any other reason: It's less + * efficient, has fewer features, and is more complicated. + * The message must be defined exactly as follows: + * message Foo { + * option message_set_wire_format = true; + * extensions 4 to max; + * } + * Note that the message cannot have any defined fields; MessageSets only + * have extensions. + * All extensions of your type must be singular messages; e.g. they cannot + * be int32s, enums, or repeated messages. + * Because this is an option, the above two restrictions are not enforced by + * the protocol compiler. + * @type bool $no_standard_descriptor_accessor + * Disables the generation of the standard "descriptor()" accessor, which can + * conflict with a field of the same name. This is meant to make migration + * from proto1 easier; new code should avoid fields named "descriptor". + * @type bool $deprecated + * Is this message deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the message, or it will be completely ignored; in the very least, + * this is a formalization for deprecating messages. + * @type bool $map_entry + * Whether the message is an automatically generated map entry type for the + * maps field. + * For maps fields: + * map map_field = 1; + * The parsed descriptor looks like: + * message MapFieldEntry { + * option map_entry = true; + * optional KeyType key = 1; + * optional ValueType value = 2; + * } + * repeated MapFieldEntry map_field = 1; + * Implementations may choose not to generate the map_entry=true message, but + * use a native map in the target language to hold the keys and values. + * The reflection APIs in such implementations still need to work as + * if the field is a repeated message field. + * NOTE: Do not set the option in .proto files. Always use the maps syntax + * instead. The option should only be implicitly set by the proto compiler + * parser. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Set true to use the old proto1 MessageSet wire format for extensions. + * This is provided for backwards-compatibility with the MessageSet wire + * format. You should not use this for any other reason: It's less + * efficient, has fewer features, and is more complicated. + * The message must be defined exactly as follows: + * message Foo { + * option message_set_wire_format = true; + * extensions 4 to max; + * } + * Note that the message cannot have any defined fields; MessageSets only + * have extensions. + * All extensions of your type must be singular messages; e.g. they cannot + * be int32s, enums, or repeated messages. + * Because this is an option, the above two restrictions are not enforced by + * the protocol compiler. + * + * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; + * @return bool + */ + public function getMessageSetWireFormat() + { + return isset($this->message_set_wire_format) ? $this->message_set_wire_format : false; + } + + public function hasMessageSetWireFormat() + { + return isset($this->message_set_wire_format); + } + + public function clearMessageSetWireFormat() + { + unset($this->message_set_wire_format); + } + + /** + * Set true to use the old proto1 MessageSet wire format for extensions. + * This is provided for backwards-compatibility with the MessageSet wire + * format. You should not use this for any other reason: It's less + * efficient, has fewer features, and is more complicated. + * The message must be defined exactly as follows: + * message Foo { + * option message_set_wire_format = true; + * extensions 4 to max; + * } + * Note that the message cannot have any defined fields; MessageSets only + * have extensions. + * All extensions of your type must be singular messages; e.g. they cannot + * be int32s, enums, or repeated messages. + * Because this is an option, the above two restrictions are not enforced by + * the protocol compiler. + * + * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; + * @param bool $var + * @return $this + */ + public function setMessageSetWireFormat($var) + { + GPBUtil::checkBool($var); + $this->message_set_wire_format = $var; + + return $this; + } + + /** + * Disables the generation of the standard "descriptor()" accessor, which can + * conflict with a field of the same name. This is meant to make migration + * from proto1 easier; new code should avoid fields named "descriptor". + * + * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; + * @return bool + */ + public function getNoStandardDescriptorAccessor() + { + return isset($this->no_standard_descriptor_accessor) ? $this->no_standard_descriptor_accessor : false; + } + + public function hasNoStandardDescriptorAccessor() + { + return isset($this->no_standard_descriptor_accessor); + } + + public function clearNoStandardDescriptorAccessor() + { + unset($this->no_standard_descriptor_accessor); + } + + /** + * Disables the generation of the standard "descriptor()" accessor, which can + * conflict with a field of the same name. This is meant to make migration + * from proto1 easier; new code should avoid fields named "descriptor". + * + * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; + * @param bool $var + * @return $this + */ + public function setNoStandardDescriptorAccessor($var) + { + GPBUtil::checkBool($var); + $this->no_standard_descriptor_accessor = $var; + + return $this; + } + + /** + * Is this message deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the message, or it will be completely ignored; in the very least, + * this is a formalization for deprecating messages. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this message deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the message, or it will be completely ignored; in the very least, + * this is a formalization for deprecating messages. + * + * Generated from protobuf field optional bool deprecated = 3 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * Whether the message is an automatically generated map entry type for the + * maps field. + * For maps fields: + * map map_field = 1; + * The parsed descriptor looks like: + * message MapFieldEntry { + * option map_entry = true; + * optional KeyType key = 1; + * optional ValueType value = 2; + * } + * repeated MapFieldEntry map_field = 1; + * Implementations may choose not to generate the map_entry=true message, but + * use a native map in the target language to hold the keys and values. + * The reflection APIs in such implementations still need to work as + * if the field is a repeated message field. + * NOTE: Do not set the option in .proto files. Always use the maps syntax + * instead. The option should only be implicitly set by the proto compiler + * parser. + * + * Generated from protobuf field optional bool map_entry = 7; + * @return bool + */ + public function getMapEntry() + { + return isset($this->map_entry) ? $this->map_entry : false; + } + + public function hasMapEntry() + { + return isset($this->map_entry); + } + + public function clearMapEntry() + { + unset($this->map_entry); + } + + /** + * Whether the message is an automatically generated map entry type for the + * maps field. + * For maps fields: + * map map_field = 1; + * The parsed descriptor looks like: + * message MapFieldEntry { + * option map_entry = true; + * optional KeyType key = 1; + * optional ValueType value = 2; + * } + * repeated MapFieldEntry map_field = 1; + * Implementations may choose not to generate the map_entry=true message, but + * use a native map in the target language to hold the keys and values. + * The reflection APIs in such implementations still need to work as + * if the field is a repeated message field. + * NOTE: Do not set the option in .proto files. Always use the maps syntax + * instead. The option should only be implicitly set by the proto compiler + * parser. + * + * Generated from protobuf field optional bool map_entry = 7; + * @param bool $var + * @return $this + */ + public function setMapEntry($var) + { + GPBUtil::checkBool($var); + $this->map_entry = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php new file mode 100644 index 0000000..96efb02 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php @@ -0,0 +1,282 @@ +google.protobuf.MethodDescriptorProto + */ +class MethodDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Input and output type names. These are resolved in the same way as + * FieldDescriptorProto.type_name, but must refer to a message type. + * + * Generated from protobuf field optional string input_type = 2; + */ + protected $input_type = null; + /** + * Generated from protobuf field optional string output_type = 3; + */ + protected $output_type = null; + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; + */ + protected $options = null; + /** + * Identifies if client streams multiple client messages + * + * Generated from protobuf field optional bool client_streaming = 5 [default = false]; + */ + protected $client_streaming = null; + /** + * Identifies if server streams multiple server messages + * + * Generated from protobuf field optional bool server_streaming = 6 [default = false]; + */ + protected $server_streaming = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type string $input_type + * Input and output type names. These are resolved in the same way as + * FieldDescriptorProto.type_name, but must refer to a message type. + * @type string $output_type + * @type \Google\Protobuf\Internal\MethodOptions $options + * @type bool $client_streaming + * Identifies if client streams multiple client messages + * @type bool $server_streaming + * Identifies if server streams multiple server messages + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Input and output type names. These are resolved in the same way as + * FieldDescriptorProto.type_name, but must refer to a message type. + * + * Generated from protobuf field optional string input_type = 2; + * @return string + */ + public function getInputType() + { + return isset($this->input_type) ? $this->input_type : ''; + } + + public function hasInputType() + { + return isset($this->input_type); + } + + public function clearInputType() + { + unset($this->input_type); + } + + /** + * Input and output type names. These are resolved in the same way as + * FieldDescriptorProto.type_name, but must refer to a message type. + * + * Generated from protobuf field optional string input_type = 2; + * @param string $var + * @return $this + */ + public function setInputType($var) + { + GPBUtil::checkString($var, True); + $this->input_type = $var; + + return $this; + } + + /** + * Generated from protobuf field optional string output_type = 3; + * @return string + */ + public function getOutputType() + { + return isset($this->output_type) ? $this->output_type : ''; + } + + public function hasOutputType() + { + return isset($this->output_type); + } + + public function clearOutputType() + { + unset($this->output_type); + } + + /** + * Generated from protobuf field optional string output_type = 3; + * @param string $var + * @return $this + */ + public function setOutputType($var) + { + GPBUtil::checkString($var, True); + $this->output_type = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; + * @return \Google\Protobuf\Internal\MethodOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; + * @param \Google\Protobuf\Internal\MethodOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\MethodOptions::class); + $this->options = $var; + + return $this; + } + + /** + * Identifies if client streams multiple client messages + * + * Generated from protobuf field optional bool client_streaming = 5 [default = false]; + * @return bool + */ + public function getClientStreaming() + { + return isset($this->client_streaming) ? $this->client_streaming : false; + } + + public function hasClientStreaming() + { + return isset($this->client_streaming); + } + + public function clearClientStreaming() + { + unset($this->client_streaming); + } + + /** + * Identifies if client streams multiple client messages + * + * Generated from protobuf field optional bool client_streaming = 5 [default = false]; + * @param bool $var + * @return $this + */ + public function setClientStreaming($var) + { + GPBUtil::checkBool($var); + $this->client_streaming = $var; + + return $this; + } + + /** + * Identifies if server streams multiple server messages + * + * Generated from protobuf field optional bool server_streaming = 6 [default = false]; + * @return bool + */ + public function getServerStreaming() + { + return isset($this->server_streaming) ? $this->server_streaming : false; + } + + public function hasServerStreaming() + { + return isset($this->server_streaming); + } + + public function clearServerStreaming() + { + unset($this->server_streaming); + } + + /** + * Identifies if server streams multiple server messages + * + * Generated from protobuf field optional bool server_streaming = 6 [default = false]; + * @param bool $var + * @return $this + */ + public function setServerStreaming($var) + { + GPBUtil::checkBool($var); + $this->server_streaming = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php new file mode 100644 index 0000000..87af451 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php @@ -0,0 +1,160 @@ +google.protobuf.MethodOptions + */ +class MethodOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Is this method deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the method, or it will be completely ignored; in the very least, + * this is a formalization for deprecating methods. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + */ + protected $deprecated = null; + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; + */ + protected $idempotency_level = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $deprecated + * Is this method deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the method, or it will be completely ignored; in the very least, + * this is a formalization for deprecating methods. + * @type int $idempotency_level + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Is this method deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the method, or it will be completely ignored; in the very least, + * this is a formalization for deprecating methods. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this method deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the method, or it will be completely ignored; in the very least, + * this is a formalization for deprecating methods. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; + * @return int + */ + public function getIdempotencyLevel() + { + return isset($this->idempotency_level) ? $this->idempotency_level : 0; + } + + public function hasIdempotencyLevel() + { + return isset($this->idempotency_level); + } + + public function clearIdempotencyLevel() + { + unset($this->idempotency_level); + } + + /** + * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; + * @param int $var + * @return $this + */ + public function setIdempotencyLevel($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Internal\MethodOptions\IdempotencyLevel::class); + $this->idempotency_level = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php new file mode 100644 index 0000000..ce3c062 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php @@ -0,0 +1,64 @@ +google.protobuf.MethodOptions.IdempotencyLevel + */ +class IdempotencyLevel +{ + /** + * Generated from protobuf enum IDEMPOTENCY_UNKNOWN = 0; + */ + const IDEMPOTENCY_UNKNOWN = 0; + /** + * implies idempotent + * + * Generated from protobuf enum NO_SIDE_EFFECTS = 1; + */ + const NO_SIDE_EFFECTS = 1; + /** + * idempotent, but may have side effects + * + * Generated from protobuf enum IDEMPOTENT = 2; + */ + const IDEMPOTENT = 2; + + private static $valueToName = [ + self::IDEMPOTENCY_UNKNOWN => 'IDEMPOTENCY_UNKNOWN', + self::NO_SIDE_EFFECTS => 'NO_SIDE_EFFECTS', + self::IDEMPOTENT => 'IDEMPOTENT', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(IdempotencyLevel::class, \Google\Protobuf\Internal\MethodOptions_IdempotencyLevel::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php new file mode 100644 index 0000000..a291311 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php @@ -0,0 +1,16 @@ +public_desc = new \Google\Protobuf\OneofDescriptor($this); + } + + public function setName($name) + { + $this->name = $name; + } + + public function getName() + { + return $this->name; + } + + public function addField(FieldDescriptor $field) + { + $this->fields[] = $field; + } + + public function getFields() + { + return $this->fields; + } + + public static function buildFromProto($oneof_proto, $desc, $index) + { + $oneof = new OneofDescriptor(); + $oneof->setName($oneof_proto->getName()); + foreach ($desc->getField() as $field) { + if ($field->getOneofIndex() == $index) { + $oneof->addField($field); + } + } + return $oneof; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php new file mode 100644 index 0000000..3cb9f25 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php @@ -0,0 +1,109 @@ +google.protobuf.OneofDescriptorProto + */ +class OneofDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; + */ + protected $options = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type \Google\Protobuf\Internal\OneofOptions $options + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; + * @return \Google\Protobuf\Internal\OneofOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; + * @param \Google\Protobuf\Internal\OneofOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\OneofOptions::class); + $this->options = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php new file mode 100644 index 0000000..2c689e8 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php @@ -0,0 +1,77 @@ +desc = $desc; + } + + public function setValue($value) + { + $this->value = $value; + } + + public function getValue() + { + return $this->value; + } + + public function setFieldName($field_name) + { + $this->field_name = $field_name; + } + + public function getFieldName() + { + return $this->field_name; + } + + public function setNumber($number) + { + $this->number = $number; + } + + public function getNumber() + { + return $this->number; + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php new file mode 100644 index 0000000..b44d194 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php @@ -0,0 +1,67 @@ +google.protobuf.OneofOptions + */ +class OneofOptions extends \Google\Protobuf\Internal\Message +{ + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php new file mode 100644 index 0000000..4e7ed5c --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php @@ -0,0 +1,50 @@ +buffer = $buffer; + } + + public function getData() + { + return $this->buffer; + } + +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php new file mode 100644 index 0000000..ea7971f --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php @@ -0,0 +1,264 @@ +container = []; + $this->type = $type; + if ($this->type == GPBType::MESSAGE) { + $pool = DescriptorPool::getGeneratedPool(); + $desc = $pool->getDescriptorByClassName($klass); + if ($desc == NULL) { + new $klass; // No msg class instance has been created before. + $desc = $pool->getDescriptorByClassName($klass); + } + $this->klass = $desc->getClass(); + $this->legacy_klass = $desc->getLegacyClass(); + } + } + + /** + * @ignore + */ + public function getType() + { + return $this->type; + } + + /** + * @ignore + */ + public function getClass() + { + return $this->klass; + } + + /** + * @ignore + */ + public function getLegacyClass() + { + return $this->legacy_klass; + } + + /** + * Return the element at the given index. + * + * This will also be called for: $ele = $arr[0] + * + * @param integer $offset The index of the element to be fetched. + * @return mixed The stored element at given index. + * @throws \ErrorException Invalid type for index. + * @throws \ErrorException Non-existing index. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function offsetGet($offset) + { + return $this->container[$offset]; + } + + /** + * Assign the element at the given index. + * + * This will also be called for: $arr []= $ele and $arr[0] = ele + * + * @param int|null $offset The index of the element to be assigned. + * @param mixed $value The element to be assigned. + * @return void + * @throws \ErrorException Invalid type for index. + * @throws \ErrorException Non-existing index. + * @throws \ErrorException Incorrect type of the element. + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function offsetSet($offset, $value) + { + switch ($this->type) { + case GPBType::SFIXED32: + case GPBType::SINT32: + case GPBType::INT32: + case GPBType::ENUM: + GPBUtil::checkInt32($value); + break; + case GPBType::FIXED32: + case GPBType::UINT32: + GPBUtil::checkUint32($value); + break; + case GPBType::SFIXED64: + case GPBType::SINT64: + case GPBType::INT64: + GPBUtil::checkInt64($value); + break; + case GPBType::FIXED64: + case GPBType::UINT64: + GPBUtil::checkUint64($value); + break; + case GPBType::FLOAT: + GPBUtil::checkFloat($value); + break; + case GPBType::DOUBLE: + GPBUtil::checkDouble($value); + break; + case GPBType::BOOL: + GPBUtil::checkBool($value); + break; + case GPBType::BYTES: + GPBUtil::checkString($value, false); + break; + case GPBType::STRING: + GPBUtil::checkString($value, true); + break; + case GPBType::MESSAGE: + if (is_null($value)) { + throw new \TypeError("RepeatedField element cannot be null."); + } + GPBUtil::checkMessage($value, $this->klass); + break; + default: + break; + } + if (is_null($offset)) { + $this->container[] = $value; + } else { + $count = count($this->container); + if (!is_numeric($offset) || $offset < 0 || $offset >= $count) { + trigger_error( + "Cannot modify element at the given index", + E_USER_ERROR); + return; + } + $this->container[$offset] = $value; + } + } + + /** + * Remove the element at the given index. + * + * This will also be called for: unset($arr) + * + * @param integer $offset The index of the element to be removed. + * @return void + * @throws \ErrorException Invalid type for index. + * @throws \ErrorException The element to be removed is not at the end of the + * RepeatedField. + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function offsetUnset($offset) + { + $count = count($this->container); + if (!is_numeric($offset) || $count === 0 || $offset !== $count - 1) { + trigger_error( + "Cannot remove element at the given index", + E_USER_ERROR); + return; + } + array_pop($this->container); + } + + /** + * Check the existence of the element at the given index. + * + * This will also be called for: isset($arr) + * + * @param integer $offset The index of the element to be removed. + * @return bool True if the element at the given offset exists. + * @throws \ErrorException Invalid type for index. + */ + public function offsetExists($offset): bool + { + return isset($this->container[$offset]); + } + + /** + * @ignore + */ + public function getIterator(): Traversable + { + return new RepeatedFieldIter($this->container); + } + + /** + * Return the number of stored elements. + * + * This will also be called for: count($arr) + * + * @return integer The number of stored elements. + */ + public function count(): int + { + return count($this->container); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php new file mode 100644 index 0000000..ec99b64 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php @@ -0,0 +1,126 @@ +position = 0; + $this->container = $container; + } + + /** + * Reset the status of the iterator + * + * @return void + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function rewind() + { + $this->position = 0; + } + + /** + * Return the element at the current position. + * + * @return object The element at the current position. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function current() + { + return $this->container[$this->position]; + } + + /** + * Return the current position. + * + * @return integer The current position. + * @todo need to add return type mixed (require update php version to 8.0) + */ + #[\ReturnTypeWillChange] + public function key() + { + return $this->position; + } + + /** + * Move to the next position. + * + * @return void + * @todo need to add return type void (require update php version to 7.1) + */ + #[\ReturnTypeWillChange] + public function next() + { + ++$this->position; + } + + /** + * Check whether there are more elements to iterate. + * + * @return bool True if there are more elements to iterate. + */ + public function valid(): bool + { + return isset($this->container[$this->position]); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php new file mode 100644 index 0000000..e322e2a --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php @@ -0,0 +1,136 @@ +google.protobuf.ServiceDescriptorProto + */ +class ServiceDescriptorProto extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field optional string name = 1; + */ + protected $name = null; + /** + * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; + */ + private $method; + /** + * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; + */ + protected $options = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * @type array<\Google\Protobuf\Internal\MethodDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $method + * @type \Google\Protobuf\Internal\ServiceOptions $options + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field optional string name = 1; + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : ''; + } + + public function hasName() + { + return isset($this->name); + } + + public function clearName() + { + unset($this->name); + } + + /** + * Generated from protobuf field optional string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getMethod() + { + return $this->method; + } + + /** + * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; + * @param array<\Google\Protobuf\Internal\MethodDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setMethod($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\MethodDescriptorProto::class); + $this->method = $arr; + + return $this; + } + + /** + * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; + * @return \Google\Protobuf\Internal\ServiceOptions|null + */ + public function getOptions() + { + return $this->options; + } + + public function hasOptions() + { + return isset($this->options); + } + + public function clearOptions() + { + unset($this->options); + } + + /** + * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; + * @param \Google\Protobuf\Internal\ServiceOptions $var + * @return $this + */ + public function setOptions($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Internal\ServiceOptions::class); + $this->options = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php new file mode 100644 index 0000000..8ac27ee --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php @@ -0,0 +1,123 @@ +google.protobuf.ServiceOptions + */ +class ServiceOptions extends \Google\Protobuf\Internal\Message +{ + /** + * Is this service deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the service, or it will be completely ignored; in the very least, + * this is a formalization for deprecating services. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + */ + protected $deprecated = null; + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + */ + private $uninterpreted_option; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type bool $deprecated + * Is this service deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the service, or it will be completely ignored; in the very least, + * this is a formalization for deprecating services. + * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option + * The parser stores options it doesn't recognize here. See above. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Is this service deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the service, or it will be completely ignored; in the very least, + * this is a formalization for deprecating services. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + * @return bool + */ + public function getDeprecated() + { + return isset($this->deprecated) ? $this->deprecated : false; + } + + public function hasDeprecated() + { + return isset($this->deprecated); + } + + public function clearDeprecated() + { + unset($this->deprecated); + } + + /** + * Is this service deprecated? + * Depending on the target platform, this can emit Deprecated annotations + * for the service, or it will be completely ignored; in the very least, + * this is a formalization for deprecating services. + * + * Generated from protobuf field optional bool deprecated = 33 [default = false]; + * @param bool $var + * @return $this + */ + public function setDeprecated($var) + { + GPBUtil::checkBool($var); + $this->deprecated = $var; + + return $this; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getUninterpretedOption() + { + return $this->uninterpreted_option; + } + + /** + * The parser stores options it doesn't recognize here. See above. + * + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setUninterpretedOption($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); + $this->uninterpreted_option = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php new file mode 100644 index 0000000..0005bc6 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php @@ -0,0 +1,230 @@ +google.protobuf.SourceCodeInfo + */ +class SourceCodeInfo extends \Google\Protobuf\Internal\Message +{ + /** + * A Location identifies a piece of source code in a .proto file which + * corresponds to a particular definition. This information is intended + * to be useful to IDEs, code indexers, documentation generators, and similar + * tools. + * For example, say we have a file like: + * message Foo { + * optional string foo = 1; + * } + * Let's look at just the field definition: + * optional string foo = 1; + * ^ ^^ ^^ ^ ^^^ + * a bc de f ghi + * We have the following locations: + * span path represents + * [a,i) [ 4, 0, 2, 0 ] The whole field definition. + * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + * Notes: + * - A location may refer to a repeated field itself (i.e. not to any + * particular index within it). This is used whenever a set of elements are + * logically enclosed in a single code segment. For example, an entire + * extend block (possibly containing multiple extension definitions) will + * have an outer location whose path refers to the "extensions" repeated + * field without an index. + * - Multiple locations may have the same path. This happens when a single + * logical declaration is spread out across multiple places. The most + * obvious example is the "extend" block again -- there may be multiple + * extend blocks in the same scope, each of which will have the same path. + * - A location's span is not always a subset of its parent's span. For + * example, the "extendee" of an extension declaration appears at the + * beginning of the "extend" block and is shared by all extensions within + * the block. + * - Just because a location's span is a subset of some other location's span + * does not mean that it is a descendant. For example, a "group" defines + * both a type and a field in a single declaration. Thus, the locations + * corresponding to the type and field and their components will overlap. + * - Code which tries to interpret locations should probably be designed to + * ignore those that it doesn't understand, as more types of locations could + * be recorded in the future. + * + * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; + */ + private $location; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\SourceCodeInfo\Location>|\Google\Protobuf\Internal\RepeatedField $location + * A Location identifies a piece of source code in a .proto file which + * corresponds to a particular definition. This information is intended + * to be useful to IDEs, code indexers, documentation generators, and similar + * tools. + * For example, say we have a file like: + * message Foo { + * optional string foo = 1; + * } + * Let's look at just the field definition: + * optional string foo = 1; + * ^ ^^ ^^ ^ ^^^ + * a bc de f ghi + * We have the following locations: + * span path represents + * [a,i) [ 4, 0, 2, 0 ] The whole field definition. + * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + * Notes: + * - A location may refer to a repeated field itself (i.e. not to any + * particular index within it). This is used whenever a set of elements are + * logically enclosed in a single code segment. For example, an entire + * extend block (possibly containing multiple extension definitions) will + * have an outer location whose path refers to the "extensions" repeated + * field without an index. + * - Multiple locations may have the same path. This happens when a single + * logical declaration is spread out across multiple places. The most + * obvious example is the "extend" block again -- there may be multiple + * extend blocks in the same scope, each of which will have the same path. + * - A location's span is not always a subset of its parent's span. For + * example, the "extendee" of an extension declaration appears at the + * beginning of the "extend" block and is shared by all extensions within + * the block. + * - Just because a location's span is a subset of some other location's span + * does not mean that it is a descendant. For example, a "group" defines + * both a type and a field in a single declaration. Thus, the locations + * corresponding to the type and field and their components will overlap. + * - Code which tries to interpret locations should probably be designed to + * ignore those that it doesn't understand, as more types of locations could + * be recorded in the future. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * A Location identifies a piece of source code in a .proto file which + * corresponds to a particular definition. This information is intended + * to be useful to IDEs, code indexers, documentation generators, and similar + * tools. + * For example, say we have a file like: + * message Foo { + * optional string foo = 1; + * } + * Let's look at just the field definition: + * optional string foo = 1; + * ^ ^^ ^^ ^ ^^^ + * a bc de f ghi + * We have the following locations: + * span path represents + * [a,i) [ 4, 0, 2, 0 ] The whole field definition. + * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + * Notes: + * - A location may refer to a repeated field itself (i.e. not to any + * particular index within it). This is used whenever a set of elements are + * logically enclosed in a single code segment. For example, an entire + * extend block (possibly containing multiple extension definitions) will + * have an outer location whose path refers to the "extensions" repeated + * field without an index. + * - Multiple locations may have the same path. This happens when a single + * logical declaration is spread out across multiple places. The most + * obvious example is the "extend" block again -- there may be multiple + * extend blocks in the same scope, each of which will have the same path. + * - A location's span is not always a subset of its parent's span. For + * example, the "extendee" of an extension declaration appears at the + * beginning of the "extend" block and is shared by all extensions within + * the block. + * - Just because a location's span is a subset of some other location's span + * does not mean that it is a descendant. For example, a "group" defines + * both a type and a field in a single declaration. Thus, the locations + * corresponding to the type and field and their components will overlap. + * - Code which tries to interpret locations should probably be designed to + * ignore those that it doesn't understand, as more types of locations could + * be recorded in the future. + * + * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getLocation() + { + return $this->location; + } + + /** + * A Location identifies a piece of source code in a .proto file which + * corresponds to a particular definition. This information is intended + * to be useful to IDEs, code indexers, documentation generators, and similar + * tools. + * For example, say we have a file like: + * message Foo { + * optional string foo = 1; + * } + * Let's look at just the field definition: + * optional string foo = 1; + * ^ ^^ ^^ ^ ^^^ + * a bc de f ghi + * We have the following locations: + * span path represents + * [a,i) [ 4, 0, 2, 0 ] The whole field definition. + * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + * Notes: + * - A location may refer to a repeated field itself (i.e. not to any + * particular index within it). This is used whenever a set of elements are + * logically enclosed in a single code segment. For example, an entire + * extend block (possibly containing multiple extension definitions) will + * have an outer location whose path refers to the "extensions" repeated + * field without an index. + * - Multiple locations may have the same path. This happens when a single + * logical declaration is spread out across multiple places. The most + * obvious example is the "extend" block again -- there may be multiple + * extend blocks in the same scope, each of which will have the same path. + * - A location's span is not always a subset of its parent's span. For + * example, the "extendee" of an extension declaration appears at the + * beginning of the "extend" block and is shared by all extensions within + * the block. + * - Just because a location's span is a subset of some other location's span + * does not mean that it is a descendant. For example, a "group" defines + * both a type and a field in a single declaration. Thus, the locations + * corresponding to the type and field and their components will overlap. + * - Code which tries to interpret locations should probably be designed to + * ignore those that it doesn't understand, as more types of locations could + * be recorded in the future. + * + * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; + * @param array<\Google\Protobuf\Internal\SourceCodeInfo\Location>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setLocation($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\SourceCodeInfo\Location::class); + $this->location = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php new file mode 100644 index 0000000..032be39 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php @@ -0,0 +1,448 @@ +google.protobuf.SourceCodeInfo.Location + */ +class Location extends \Google\Protobuf\Internal\Message +{ + /** + * Identifies which part of the FileDescriptorProto was defined at this + * location. + * Each element is a field number or an index. They form a path from + * the root FileDescriptorProto to the place where the definition occurs. + * For example, this path: + * [ 4, 3, 2, 7, 1 ] + * refers to: + * file.message_type(3) // 4, 3 + * .field(7) // 2, 7 + * .name() // 1 + * This is because FileDescriptorProto.message_type has field number 4: + * repeated DescriptorProto message_type = 4; + * and DescriptorProto.field has field number 2: + * repeated FieldDescriptorProto field = 2; + * and FieldDescriptorProto.name has field number 1: + * optional string name = 1; + * Thus, the above path gives the location of a field name. If we removed + * the last element: + * [ 4, 3, 2, 7 ] + * this path refers to the whole field declaration (from the beginning + * of the label to the terminating semicolon). + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + */ + private $path; + /** + * Always has exactly three or four elements: start line, start column, + * end line (optional, otherwise assumed same as start line), end column. + * These are packed into a single field for efficiency. Note that line + * and column numbers are zero-based -- typically you will want to add + * 1 to each before displaying to a user. + * + * Generated from protobuf field repeated int32 span = 2 [packed = true]; + */ + private $span; + /** + * If this SourceCodeInfo represents a complete declaration, these are any + * comments appearing before and after the declaration which appear to be + * attached to the declaration. + * A series of line comments appearing on consecutive lines, with no other + * tokens appearing on those lines, will be treated as a single comment. + * leading_detached_comments will keep paragraphs of comments that appear + * before (but not connected to) the current element. Each paragraph, + * separated by empty lines, will be one comment element in the repeated + * field. + * Only the comment content is provided; comment markers (e.g. //) are + * stripped out. For block comments, leading whitespace and an asterisk + * will be stripped from the beginning of each line other than the first. + * Newlines are included in the output. + * Examples: + * optional int32 foo = 1; // Comment attached to foo. + * // Comment attached to bar. + * optional int32 bar = 2; + * optional string baz = 3; + * // Comment attached to baz. + * // Another line attached to baz. + * // Comment attached to moo. + * // + * // Another line attached to moo. + * optional double moo = 4; + * // Detached comment for corge. This is not leading or trailing comments + * // to moo or corge because there are blank lines separating it from + * // both. + * // Detached comment for corge paragraph 2. + * optional string corge = 5; + * /* Block comment attached + * * to corge. Leading asterisks + * * will be removed. */ + * /* Block comment attached to + * * grault. */ + * optional int32 grault = 6; + * // ignored detached comments. + * + * Generated from protobuf field optional string leading_comments = 3; + */ + protected $leading_comments = null; + /** + * Generated from protobuf field optional string trailing_comments = 4; + */ + protected $trailing_comments = null; + /** + * Generated from protobuf field repeated string leading_detached_comments = 6; + */ + private $leading_detached_comments; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array|\Google\Protobuf\Internal\RepeatedField $path + * Identifies which part of the FileDescriptorProto was defined at this + * location. + * Each element is a field number or an index. They form a path from + * the root FileDescriptorProto to the place where the definition occurs. + * For example, this path: + * [ 4, 3, 2, 7, 1 ] + * refers to: + * file.message_type(3) // 4, 3 + * .field(7) // 2, 7 + * .name() // 1 + * This is because FileDescriptorProto.message_type has field number 4: + * repeated DescriptorProto message_type = 4; + * and DescriptorProto.field has field number 2: + * repeated FieldDescriptorProto field = 2; + * and FieldDescriptorProto.name has field number 1: + * optional string name = 1; + * Thus, the above path gives the location of a field name. If we removed + * the last element: + * [ 4, 3, 2, 7 ] + * this path refers to the whole field declaration (from the beginning + * of the label to the terminating semicolon). + * @type array|\Google\Protobuf\Internal\RepeatedField $span + * Always has exactly three or four elements: start line, start column, + * end line (optional, otherwise assumed same as start line), end column. + * These are packed into a single field for efficiency. Note that line + * and column numbers are zero-based -- typically you will want to add + * 1 to each before displaying to a user. + * @type string $leading_comments + * If this SourceCodeInfo represents a complete declaration, these are any + * comments appearing before and after the declaration which appear to be + * attached to the declaration. + * A series of line comments appearing on consecutive lines, with no other + * tokens appearing on those lines, will be treated as a single comment. + * leading_detached_comments will keep paragraphs of comments that appear + * before (but not connected to) the current element. Each paragraph, + * separated by empty lines, will be one comment element in the repeated + * field. + * Only the comment content is provided; comment markers (e.g. //) are + * stripped out. For block comments, leading whitespace and an asterisk + * will be stripped from the beginning of each line other than the first. + * Newlines are included in the output. + * Examples: + * optional int32 foo = 1; // Comment attached to foo. + * // Comment attached to bar. + * optional int32 bar = 2; + * optional string baz = 3; + * // Comment attached to baz. + * // Another line attached to baz. + * // Comment attached to moo. + * // + * // Another line attached to moo. + * optional double moo = 4; + * // Detached comment for corge. This is not leading or trailing comments + * // to moo or corge because there are blank lines separating it from + * // both. + * // Detached comment for corge paragraph 2. + * optional string corge = 5; + * /* Block comment attached + * * to corge. Leading asterisks + * * will be removed. */ + * /* Block comment attached to + * * grault. */ + * optional int32 grault = 6; + * // ignored detached comments. + * @type string $trailing_comments + * @type array|\Google\Protobuf\Internal\RepeatedField $leading_detached_comments + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Identifies which part of the FileDescriptorProto was defined at this + * location. + * Each element is a field number or an index. They form a path from + * the root FileDescriptorProto to the place where the definition occurs. + * For example, this path: + * [ 4, 3, 2, 7, 1 ] + * refers to: + * file.message_type(3) // 4, 3 + * .field(7) // 2, 7 + * .name() // 1 + * This is because FileDescriptorProto.message_type has field number 4: + * repeated DescriptorProto message_type = 4; + * and DescriptorProto.field has field number 2: + * repeated FieldDescriptorProto field = 2; + * and FieldDescriptorProto.name has field number 1: + * optional string name = 1; + * Thus, the above path gives the location of a field name. If we removed + * the last element: + * [ 4, 3, 2, 7 ] + * this path refers to the whole field declaration (from the beginning + * of the label to the terminating semicolon). + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getPath() + { + return $this->path; + } + + /** + * Identifies which part of the FileDescriptorProto was defined at this + * location. + * Each element is a field number or an index. They form a path from + * the root FileDescriptorProto to the place where the definition occurs. + * For example, this path: + * [ 4, 3, 2, 7, 1 ] + * refers to: + * file.message_type(3) // 4, 3 + * .field(7) // 2, 7 + * .name() // 1 + * This is because FileDescriptorProto.message_type has field number 4: + * repeated DescriptorProto message_type = 4; + * and DescriptorProto.field has field number 2: + * repeated FieldDescriptorProto field = 2; + * and FieldDescriptorProto.name has field number 1: + * optional string name = 1; + * Thus, the above path gives the location of a field name. If we removed + * the last element: + * [ 4, 3, 2, 7 ] + * this path refers to the whole field declaration (from the beginning + * of the label to the terminating semicolon). + * + * Generated from protobuf field repeated int32 path = 1 [packed = true]; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setPath($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->path = $arr; + + return $this; + } + + /** + * Always has exactly three or four elements: start line, start column, + * end line (optional, otherwise assumed same as start line), end column. + * These are packed into a single field for efficiency. Note that line + * and column numbers are zero-based -- typically you will want to add + * 1 to each before displaying to a user. + * + * Generated from protobuf field repeated int32 span = 2 [packed = true]; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getSpan() + { + return $this->span; + } + + /** + * Always has exactly three or four elements: start line, start column, + * end line (optional, otherwise assumed same as start line), end column. + * These are packed into a single field for efficiency. Note that line + * and column numbers are zero-based -- typically you will want to add + * 1 to each before displaying to a user. + * + * Generated from protobuf field repeated int32 span = 2 [packed = true]; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setSpan($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->span = $arr; + + return $this; + } + + /** + * If this SourceCodeInfo represents a complete declaration, these are any + * comments appearing before and after the declaration which appear to be + * attached to the declaration. + * A series of line comments appearing on consecutive lines, with no other + * tokens appearing on those lines, will be treated as a single comment. + * leading_detached_comments will keep paragraphs of comments that appear + * before (but not connected to) the current element. Each paragraph, + * separated by empty lines, will be one comment element in the repeated + * field. + * Only the comment content is provided; comment markers (e.g. //) are + * stripped out. For block comments, leading whitespace and an asterisk + * will be stripped from the beginning of each line other than the first. + * Newlines are included in the output. + * Examples: + * optional int32 foo = 1; // Comment attached to foo. + * // Comment attached to bar. + * optional int32 bar = 2; + * optional string baz = 3; + * // Comment attached to baz. + * // Another line attached to baz. + * // Comment attached to moo. + * // + * // Another line attached to moo. + * optional double moo = 4; + * // Detached comment for corge. This is not leading or trailing comments + * // to moo or corge because there are blank lines separating it from + * // both. + * // Detached comment for corge paragraph 2. + * optional string corge = 5; + * /* Block comment attached + * * to corge. Leading asterisks + * * will be removed. */ + * /* Block comment attached to + * * grault. */ + * optional int32 grault = 6; + * // ignored detached comments. + * + * Generated from protobuf field optional string leading_comments = 3; + * @return string + */ + public function getLeadingComments() + { + return isset($this->leading_comments) ? $this->leading_comments : ''; + } + + public function hasLeadingComments() + { + return isset($this->leading_comments); + } + + public function clearLeadingComments() + { + unset($this->leading_comments); + } + + /** + * If this SourceCodeInfo represents a complete declaration, these are any + * comments appearing before and after the declaration which appear to be + * attached to the declaration. + * A series of line comments appearing on consecutive lines, with no other + * tokens appearing on those lines, will be treated as a single comment. + * leading_detached_comments will keep paragraphs of comments that appear + * before (but not connected to) the current element. Each paragraph, + * separated by empty lines, will be one comment element in the repeated + * field. + * Only the comment content is provided; comment markers (e.g. //) are + * stripped out. For block comments, leading whitespace and an asterisk + * will be stripped from the beginning of each line other than the first. + * Newlines are included in the output. + * Examples: + * optional int32 foo = 1; // Comment attached to foo. + * // Comment attached to bar. + * optional int32 bar = 2; + * optional string baz = 3; + * // Comment attached to baz. + * // Another line attached to baz. + * // Comment attached to moo. + * // + * // Another line attached to moo. + * optional double moo = 4; + * // Detached comment for corge. This is not leading or trailing comments + * // to moo or corge because there are blank lines separating it from + * // both. + * // Detached comment for corge paragraph 2. + * optional string corge = 5; + * /* Block comment attached + * * to corge. Leading asterisks + * * will be removed. */ + * /* Block comment attached to + * * grault. */ + * optional int32 grault = 6; + * // ignored detached comments. + * + * Generated from protobuf field optional string leading_comments = 3; + * @param string $var + * @return $this + */ + public function setLeadingComments($var) + { + GPBUtil::checkString($var, True); + $this->leading_comments = $var; + + return $this; + } + + /** + * Generated from protobuf field optional string trailing_comments = 4; + * @return string + */ + public function getTrailingComments() + { + return isset($this->trailing_comments) ? $this->trailing_comments : ''; + } + + public function hasTrailingComments() + { + return isset($this->trailing_comments); + } + + public function clearTrailingComments() + { + unset($this->trailing_comments); + } + + /** + * Generated from protobuf field optional string trailing_comments = 4; + * @param string $var + * @return $this + */ + public function setTrailingComments($var) + { + GPBUtil::checkString($var, True); + $this->trailing_comments = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated string leading_detached_comments = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getLeadingDetachedComments() + { + return $this->leading_detached_comments; + } + + /** + * Generated from protobuf field repeated string leading_detached_comments = 6; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setLeadingDetachedComments($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->leading_detached_comments = $arr; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Location::class, \Google\Protobuf\Internal\SourceCodeInfo_Location::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php new file mode 100644 index 0000000..1346492 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php @@ -0,0 +1,16 @@ +seconds = $datetime->getTimestamp(); + $this->nanos = 1000 * $datetime->format('u'); + } + + /** + * Converts Timestamp to PHP DateTime. + * + * @return \DateTime $datetime + */ + public function toDateTime() + { + $time = sprintf('%s.%06d', $this->seconds, $this->nanos / 1000); + return \DateTime::createFromFormat('U.u', $time); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php new file mode 100644 index 0000000..a1cdca5 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php @@ -0,0 +1,300 @@ +google.protobuf.UninterpretedOption + */ +class UninterpretedOption extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; + */ + private $name; + /** + * The value of the uninterpreted option, in whatever type the tokenizer + * identified it as during parsing. Exactly one of these should be set. + * + * Generated from protobuf field optional string identifier_value = 3; + */ + protected $identifier_value = null; + /** + * Generated from protobuf field optional uint64 positive_int_value = 4; + */ + protected $positive_int_value = null; + /** + * Generated from protobuf field optional int64 negative_int_value = 5; + */ + protected $negative_int_value = null; + /** + * Generated from protobuf field optional double double_value = 6; + */ + protected $double_value = null; + /** + * Generated from protobuf field optional bytes string_value = 7; + */ + protected $string_value = null; + /** + * Generated from protobuf field optional string aggregate_value = 8; + */ + protected $aggregate_value = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Internal\UninterpretedOption\NamePart>|\Google\Protobuf\Internal\RepeatedField $name + * @type string $identifier_value + * The value of the uninterpreted option, in whatever type the tokenizer + * identified it as during parsing. Exactly one of these should be set. + * @type int|string $positive_int_value + * @type int|string $negative_int_value + * @type float $double_value + * @type string $string_value + * @type string $aggregate_value + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getName() + { + return $this->name; + } + + /** + * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; + * @param array<\Google\Protobuf\Internal\UninterpretedOption\NamePart>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setName($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption\NamePart::class); + $this->name = $arr; + + return $this; + } + + /** + * The value of the uninterpreted option, in whatever type the tokenizer + * identified it as during parsing. Exactly one of these should be set. + * + * Generated from protobuf field optional string identifier_value = 3; + * @return string + */ + public function getIdentifierValue() + { + return isset($this->identifier_value) ? $this->identifier_value : ''; + } + + public function hasIdentifierValue() + { + return isset($this->identifier_value); + } + + public function clearIdentifierValue() + { + unset($this->identifier_value); + } + + /** + * The value of the uninterpreted option, in whatever type the tokenizer + * identified it as during parsing. Exactly one of these should be set. + * + * Generated from protobuf field optional string identifier_value = 3; + * @param string $var + * @return $this + */ + public function setIdentifierValue($var) + { + GPBUtil::checkString($var, True); + $this->identifier_value = $var; + + return $this; + } + + /** + * Generated from protobuf field optional uint64 positive_int_value = 4; + * @return int|string + */ + public function getPositiveIntValue() + { + return isset($this->positive_int_value) ? $this->positive_int_value : 0; + } + + public function hasPositiveIntValue() + { + return isset($this->positive_int_value); + } + + public function clearPositiveIntValue() + { + unset($this->positive_int_value); + } + + /** + * Generated from protobuf field optional uint64 positive_int_value = 4; + * @param int|string $var + * @return $this + */ + public function setPositiveIntValue($var) + { + GPBUtil::checkUint64($var); + $this->positive_int_value = $var; + + return $this; + } + + /** + * Generated from protobuf field optional int64 negative_int_value = 5; + * @return int|string + */ + public function getNegativeIntValue() + { + return isset($this->negative_int_value) ? $this->negative_int_value : 0; + } + + public function hasNegativeIntValue() + { + return isset($this->negative_int_value); + } + + public function clearNegativeIntValue() + { + unset($this->negative_int_value); + } + + /** + * Generated from protobuf field optional int64 negative_int_value = 5; + * @param int|string $var + * @return $this + */ + public function setNegativeIntValue($var) + { + GPBUtil::checkInt64($var); + $this->negative_int_value = $var; + + return $this; + } + + /** + * Generated from protobuf field optional double double_value = 6; + * @return float + */ + public function getDoubleValue() + { + return isset($this->double_value) ? $this->double_value : 0.0; + } + + public function hasDoubleValue() + { + return isset($this->double_value); + } + + public function clearDoubleValue() + { + unset($this->double_value); + } + + /** + * Generated from protobuf field optional double double_value = 6; + * @param float $var + * @return $this + */ + public function setDoubleValue($var) + { + GPBUtil::checkDouble($var); + $this->double_value = $var; + + return $this; + } + + /** + * Generated from protobuf field optional bytes string_value = 7; + * @return string + */ + public function getStringValue() + { + return isset($this->string_value) ? $this->string_value : ''; + } + + public function hasStringValue() + { + return isset($this->string_value); + } + + public function clearStringValue() + { + unset($this->string_value); + } + + /** + * Generated from protobuf field optional bytes string_value = 7; + * @param string $var + * @return $this + */ + public function setStringValue($var) + { + GPBUtil::checkString($var, False); + $this->string_value = $var; + + return $this; + } + + /** + * Generated from protobuf field optional string aggregate_value = 8; + * @return string + */ + public function getAggregateValue() + { + return isset($this->aggregate_value) ? $this->aggregate_value : ''; + } + + public function hasAggregateValue() + { + return isset($this->aggregate_value); + } + + public function clearAggregateValue() + { + unset($this->aggregate_value); + } + + /** + * Generated from protobuf field optional string aggregate_value = 8; + * @param string $var + * @return $this + */ + public function setAggregateValue($var) + { + GPBUtil::checkString($var, True); + $this->aggregate_value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php new file mode 100644 index 0000000..2debf83 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php @@ -0,0 +1,116 @@ +google.protobuf.UninterpretedOption.NamePart + */ +class NamePart extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field required string name_part = 1; + */ + protected $name_part = null; + /** + * Generated from protobuf field required bool is_extension = 2; + */ + protected $is_extension = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name_part + * @type bool $is_extension + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field required string name_part = 1; + * @return string + */ + public function getNamePart() + { + return isset($this->name_part) ? $this->name_part : ''; + } + + public function hasNamePart() + { + return isset($this->name_part); + } + + public function clearNamePart() + { + unset($this->name_part); + } + + /** + * Generated from protobuf field required string name_part = 1; + * @param string $var + * @return $this + */ + public function setNamePart($var) + { + GPBUtil::checkString($var, True); + $this->name_part = $var; + + return $this; + } + + /** + * Generated from protobuf field required bool is_extension = 2; + * @return bool + */ + public function getIsExtension() + { + return isset($this->is_extension) ? $this->is_extension : false; + } + + public function hasIsExtension() + { + return isset($this->is_extension); + } + + public function clearIsExtension() + { + unset($this->is_extension); + } + + /** + * Generated from protobuf field required bool is_extension = 2; + * @param bool $var + * @return $this + */ + public function setIsExtension($var) + { + GPBUtil::checkBool($var); + $this->is_extension = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(NamePart::class, \Google\Protobuf\Internal\UninterpretedOption_NamePart::class); + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php new file mode 100644 index 0000000..9750eb0 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php @@ -0,0 +1,16 @@ +google.protobuf.ListValue + */ +class ListValue extends \Google\Protobuf\Internal\Message +{ + /** + * Repeated field of dynamically typed values. + * + * Generated from protobuf field repeated .google.protobuf.Value values = 1; + */ + private $values; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array<\Google\Protobuf\Value>|\Google\Protobuf\Internal\RepeatedField $values + * Repeated field of dynamically typed values. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Struct::initOnce(); + parent::__construct($data); + } + + /** + * Repeated field of dynamically typed values. + * + * Generated from protobuf field repeated .google.protobuf.Value values = 1; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getValues() + { + return $this->values; + } + + /** + * Repeated field of dynamically typed values. + * + * Generated from protobuf field repeated .google.protobuf.Value values = 1; + * @param array<\Google\Protobuf\Value>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setValues($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Value::class); + $this->values = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Method.php b/vendor/google/protobuf/src/Google/Protobuf/Method.php new file mode 100644 index 0000000..eda00bf --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Method.php @@ -0,0 +1,271 @@ +google.protobuf.Method + */ +class Method extends \Google\Protobuf\Internal\Message +{ + /** + * The simple name of this method. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * A URL of the input message type. + * + * Generated from protobuf field string request_type_url = 2; + */ + protected $request_type_url = ''; + /** + * If true, the request is streamed. + * + * Generated from protobuf field bool request_streaming = 3; + */ + protected $request_streaming = false; + /** + * The URL of the output message type. + * + * Generated from protobuf field string response_type_url = 4; + */ + protected $response_type_url = ''; + /** + * If true, the response is streamed. + * + * Generated from protobuf field bool response_streaming = 5; + */ + protected $response_streaming = false; + /** + * Any metadata attached to the method. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 6; + */ + private $options; + /** + * The source syntax of this method. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + */ + protected $syntax = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * The simple name of this method. + * @type string $request_type_url + * A URL of the input message type. + * @type bool $request_streaming + * If true, the request is streamed. + * @type string $response_type_url + * The URL of the output message type. + * @type bool $response_streaming + * If true, the response is streamed. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * Any metadata attached to the method. + * @type int $syntax + * The source syntax of this method. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Api::initOnce(); + parent::__construct($data); + } + + /** + * The simple name of this method. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The simple name of this method. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * A URL of the input message type. + * + * Generated from protobuf field string request_type_url = 2; + * @return string + */ + public function getRequestTypeUrl() + { + return $this->request_type_url; + } + + /** + * A URL of the input message type. + * + * Generated from protobuf field string request_type_url = 2; + * @param string $var + * @return $this + */ + public function setRequestTypeUrl($var) + { + GPBUtil::checkString($var, True); + $this->request_type_url = $var; + + return $this; + } + + /** + * If true, the request is streamed. + * + * Generated from protobuf field bool request_streaming = 3; + * @return bool + */ + public function getRequestStreaming() + { + return $this->request_streaming; + } + + /** + * If true, the request is streamed. + * + * Generated from protobuf field bool request_streaming = 3; + * @param bool $var + * @return $this + */ + public function setRequestStreaming($var) + { + GPBUtil::checkBool($var); + $this->request_streaming = $var; + + return $this; + } + + /** + * The URL of the output message type. + * + * Generated from protobuf field string response_type_url = 4; + * @return string + */ + public function getResponseTypeUrl() + { + return $this->response_type_url; + } + + /** + * The URL of the output message type. + * + * Generated from protobuf field string response_type_url = 4; + * @param string $var + * @return $this + */ + public function setResponseTypeUrl($var) + { + GPBUtil::checkString($var, True); + $this->response_type_url = $var; + + return $this; + } + + /** + * If true, the response is streamed. + * + * Generated from protobuf field bool response_streaming = 5; + * @return bool + */ + public function getResponseStreaming() + { + return $this->response_streaming; + } + + /** + * If true, the response is streamed. + * + * Generated from protobuf field bool response_streaming = 5; + * @param bool $var + * @return $this + */ + public function setResponseStreaming($var) + { + GPBUtil::checkBool($var); + $this->response_streaming = $var; + + return $this; + } + + /** + * Any metadata attached to the method. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * Any metadata attached to the method. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 6; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + + /** + * The source syntax of this method. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + * @return int + */ + public function getSyntax() + { + return $this->syntax; + } + + /** + * The source syntax of this method. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 7; + * @param int $var + * @return $this + */ + public function setSyntax($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); + $this->syntax = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Mixin.php b/vendor/google/protobuf/src/Google/Protobuf/Mixin.php new file mode 100644 index 0000000..4f7bf84 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Mixin.php @@ -0,0 +1,166 @@ +google.protobuf.Mixin + */ +class Mixin extends \Google\Protobuf\Internal\Message +{ + /** + * The fully qualified name of the interface which is included. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * If non-empty specifies a path under which inherited HTTP paths + * are rooted. + * + * Generated from protobuf field string root = 2; + */ + protected $root = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * The fully qualified name of the interface which is included. + * @type string $root + * If non-empty specifies a path under which inherited HTTP paths + * are rooted. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Api::initOnce(); + parent::__construct($data); + } + + /** + * The fully qualified name of the interface which is included. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The fully qualified name of the interface which is included. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * If non-empty specifies a path under which inherited HTTP paths + * are rooted. + * + * Generated from protobuf field string root = 2; + * @return string + */ + public function getRoot() + { + return $this->root; + } + + /** + * If non-empty specifies a path under which inherited HTTP paths + * are rooted. + * + * Generated from protobuf field string root = 2; + * @param string $var + * @return $this + */ + public function setRoot($var) + { + GPBUtil::checkString($var, True); + $this->root = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/NullValue.php b/vendor/google/protobuf/src/Google/Protobuf/NullValue.php new file mode 100644 index 0000000..61569f8 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/NullValue.php @@ -0,0 +1,49 @@ +google.protobuf.NullValue + */ +class NullValue +{ + /** + * Null value. + * + * Generated from protobuf enum NULL_VALUE = 0; + */ + const NULL_VALUE = 0; + + private static $valueToName = [ + self::NULL_VALUE => 'NULL_VALUE', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php new file mode 100644 index 0000000..92b4e27 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php @@ -0,0 +1,80 @@ +internal_desc = $internal_desc; + } + + /** + * @return string The name of the oneof + */ + public function getName() + { + return $this->internal_desc->getName(); + } + + /** + * @param int $index Must be >= 0 and < getFieldCount() + * @return FieldDescriptor + */ + public function getField($index) + { + return $this->getPublicDescriptor($this->internal_desc->getFields()[$index]); + } + + /** + * @return int Number of fields in the oneof + */ + public function getFieldCount() + { + return count($this->internal_desc->getFields()); + } + + public function isSynthetic() + { + return $this->internal_desc->isSynthetic(); + } +} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Option.php b/vendor/google/protobuf/src/Google/Protobuf/Option.php new file mode 100644 index 0000000..31249e5 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Option.php @@ -0,0 +1,136 @@ +google.protobuf.Option + */ +class Option extends \Google\Protobuf\Internal\Message +{ + /** + * The option's name. For protobuf built-in options (options defined in + * descriptor.proto), this is the short name. For example, `"map_entry"`. + * For custom options, it should be the fully-qualified name. For example, + * `"google.api.http"`. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * The option's value packed in an Any message. If the value is a primitive, + * the corresponding wrapper type defined in google/protobuf/wrappers.proto + * should be used. If the value is an enum, it should be stored as an int32 + * value using the google.protobuf.Int32Value type. + * + * Generated from protobuf field .google.protobuf.Any value = 2; + */ + protected $value = null; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * The option's name. For protobuf built-in options (options defined in + * descriptor.proto), this is the short name. For example, `"map_entry"`. + * For custom options, it should be the fully-qualified name. For example, + * `"google.api.http"`. + * @type \Google\Protobuf\Any $value + * The option's value packed in an Any message. If the value is a primitive, + * the corresponding wrapper type defined in google/protobuf/wrappers.proto + * should be used. If the value is an enum, it should be stored as an int32 + * value using the google.protobuf.Int32Value type. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Type::initOnce(); + parent::__construct($data); + } + + /** + * The option's name. For protobuf built-in options (options defined in + * descriptor.proto), this is the short name. For example, `"map_entry"`. + * For custom options, it should be the fully-qualified name. For example, + * `"google.api.http"`. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The option's name. For protobuf built-in options (options defined in + * descriptor.proto), this is the short name. For example, `"map_entry"`. + * For custom options, it should be the fully-qualified name. For example, + * `"google.api.http"`. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * The option's value packed in an Any message. If the value is a primitive, + * the corresponding wrapper type defined in google/protobuf/wrappers.proto + * should be used. If the value is an enum, it should be stored as an int32 + * value using the google.protobuf.Int32Value type. + * + * Generated from protobuf field .google.protobuf.Any value = 2; + * @return \Google\Protobuf\Any|null + */ + public function getValue() + { + return $this->value; + } + + public function hasValue() + { + return isset($this->value); + } + + public function clearValue() + { + unset($this->value); + } + + /** + * The option's value packed in an Any message. If the value is a primitive, + * the corresponding wrapper type defined in google/protobuf/wrappers.proto + * should be used. If the value is an enum, it should be stored as an int32 + * value using the google.protobuf.Int32Value type. + * + * Generated from protobuf field .google.protobuf.Any value = 2; + * @param \Google\Protobuf\Any $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Any::class); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php b/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php new file mode 100644 index 0000000..8b3ea11 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php @@ -0,0 +1,72 @@ +google.protobuf.SourceContext + */ +class SourceContext extends \Google\Protobuf\Internal\Message +{ + /** + * The path-qualified name of the .proto file that contained the associated + * protobuf element. For example: `"google/protobuf/source_context.proto"`. + * + * Generated from protobuf field string file_name = 1; + */ + protected $file_name = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $file_name + * The path-qualified name of the .proto file that contained the associated + * protobuf element. For example: `"google/protobuf/source_context.proto"`. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\SourceContext::initOnce(); + parent::__construct($data); + } + + /** + * The path-qualified name of the .proto file that contained the associated + * protobuf element. For example: `"google/protobuf/source_context.proto"`. + * + * Generated from protobuf field string file_name = 1; + * @return string + */ + public function getFileName() + { + return $this->file_name; + } + + /** + * The path-qualified name of the .proto file that contained the associated + * protobuf element. For example: `"google/protobuf/source_context.proto"`. + * + * Generated from protobuf field string file_name = 1; + * @param string $var + * @return $this + */ + public function setFileName($var) + { + GPBUtil::checkString($var, True); + $this->file_name = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/StringValue.php b/vendor/google/protobuf/src/Google/Protobuf/StringValue.php new file mode 100644 index 0000000..ad98316 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/StringValue.php @@ -0,0 +1,68 @@ +google.protobuf.StringValue + */ +class StringValue extends \Google\Protobuf\Internal\Message +{ + /** + * The string value. + * + * Generated from protobuf field string value = 1; + */ + protected $value = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $value + * The string value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The string value. + * + * Generated from protobuf field string value = 1; + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * The string value. + * + * Generated from protobuf field string value = 1; + * @param string $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkString($var, True); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Struct.php b/vendor/google/protobuf/src/Google/Protobuf/Struct.php new file mode 100644 index 0000000..0456541 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Struct.php @@ -0,0 +1,73 @@ +google.protobuf.Struct + */ +class Struct extends \Google\Protobuf\Internal\Message +{ + /** + * Unordered map of dynamically typed values. + * + * Generated from protobuf field map fields = 1; + */ + private $fields; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type array|\Google\Protobuf\Internal\MapField $fields + * Unordered map of dynamically typed values. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Struct::initOnce(); + parent::__construct($data); + } + + /** + * Unordered map of dynamically typed values. + * + * Generated from protobuf field map fields = 1; + * @return \Google\Protobuf\Internal\MapField + */ + public function getFields() + { + return $this->fields; + } + + /** + * Unordered map of dynamically typed values. + * + * Generated from protobuf field map fields = 1; + * @param array|\Google\Protobuf\Internal\MapField $var + * @return $this + */ + public function setFields($var) + { + $arr = GPBUtil::checkMapField($var, \Google\Protobuf\Internal\GPBType::STRING, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Value::class); + $this->fields = $arr; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Syntax.php b/vendor/google/protobuf/src/Google/Protobuf/Syntax.php new file mode 100644 index 0000000..10952bf --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Syntax.php @@ -0,0 +1,54 @@ +google.protobuf.Syntax + */ +class Syntax +{ + /** + * Syntax `proto2`. + * + * Generated from protobuf enum SYNTAX_PROTO2 = 0; + */ + const SYNTAX_PROTO2 = 0; + /** + * Syntax `proto3`. + * + * Generated from protobuf enum SYNTAX_PROTO3 = 1; + */ + const SYNTAX_PROTO3 = 1; + + private static $valueToName = [ + self::SYNTAX_PROTO2 => 'SYNTAX_PROTO2', + self::SYNTAX_PROTO3 => 'SYNTAX_PROTO3', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php b/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php new file mode 100644 index 0000000..a12f485 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php @@ -0,0 +1,186 @@ +google.protobuf.Timestamp + */ +class Timestamp extends \Google\Protobuf\Internal\TimestampBase +{ + /** + * Represents seconds of UTC time since Unix epoch + * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + * 9999-12-31T23:59:59Z inclusive. + * + * Generated from protobuf field int64 seconds = 1; + */ + protected $seconds = 0; + /** + * Non-negative fractions of a second at nanosecond resolution. Negative + * second values with fractions must still have non-negative nanos values + * that count forward in time. Must be from 0 to 999,999,999 + * inclusive. + * + * Generated from protobuf field int32 nanos = 2; + */ + protected $nanos = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int|string $seconds + * Represents seconds of UTC time since Unix epoch + * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + * 9999-12-31T23:59:59Z inclusive. + * @type int $nanos + * Non-negative fractions of a second at nanosecond resolution. Negative + * second values with fractions must still have non-negative nanos values + * that count forward in time. Must be from 0 to 999,999,999 + * inclusive. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Timestamp::initOnce(); + parent::__construct($data); + } + + /** + * Represents seconds of UTC time since Unix epoch + * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + * 9999-12-31T23:59:59Z inclusive. + * + * Generated from protobuf field int64 seconds = 1; + * @return int|string + */ + public function getSeconds() + { + return $this->seconds; + } + + /** + * Represents seconds of UTC time since Unix epoch + * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + * 9999-12-31T23:59:59Z inclusive. + * + * Generated from protobuf field int64 seconds = 1; + * @param int|string $var + * @return $this + */ + public function setSeconds($var) + { + GPBUtil::checkInt64($var); + $this->seconds = $var; + + return $this; + } + + /** + * Non-negative fractions of a second at nanosecond resolution. Negative + * second values with fractions must still have non-negative nanos values + * that count forward in time. Must be from 0 to 999,999,999 + * inclusive. + * + * Generated from protobuf field int32 nanos = 2; + * @return int + */ + public function getNanos() + { + return $this->nanos; + } + + /** + * Non-negative fractions of a second at nanosecond resolution. Negative + * second values with fractions must still have non-negative nanos values + * that count forward in time. Must be from 0 to 999,999,999 + * inclusive. + * + * Generated from protobuf field int32 nanos = 2; + * @param int $var + * @return $this + */ + public function setNanos($var) + { + GPBUtil::checkInt32($var); + $this->nanos = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Type.php b/vendor/google/protobuf/src/Google/Protobuf/Type.php new file mode 100644 index 0000000..d4af7df --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Type.php @@ -0,0 +1,247 @@ +google.protobuf.Type + */ +class Type extends \Google\Protobuf\Internal\Message +{ + /** + * The fully qualified message name. + * + * Generated from protobuf field string name = 1; + */ + protected $name = ''; + /** + * The list of fields. + * + * Generated from protobuf field repeated .google.protobuf.Field fields = 2; + */ + private $fields; + /** + * The list of types appearing in `oneof` definitions in this type. + * + * Generated from protobuf field repeated string oneofs = 3; + */ + private $oneofs; + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 4; + */ + private $options; + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + */ + protected $source_context = null; + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 6; + */ + protected $syntax = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type string $name + * The fully qualified message name. + * @type array<\Google\Protobuf\Field>|\Google\Protobuf\Internal\RepeatedField $fields + * The list of fields. + * @type array|\Google\Protobuf\Internal\RepeatedField $oneofs + * The list of types appearing in `oneof` definitions in this type. + * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options + * The protocol buffer options. + * @type \Google\Protobuf\SourceContext $source_context + * The source context. + * @type int $syntax + * The source syntax. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Type::initOnce(); + parent::__construct($data); + } + + /** + * The fully qualified message name. + * + * Generated from protobuf field string name = 1; + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * The fully qualified message name. + * + * Generated from protobuf field string name = 1; + * @param string $var + * @return $this + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + + return $this; + } + + /** + * The list of fields. + * + * Generated from protobuf field repeated .google.protobuf.Field fields = 2; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getFields() + { + return $this->fields; + } + + /** + * The list of fields. + * + * Generated from protobuf field repeated .google.protobuf.Field fields = 2; + * @param array<\Google\Protobuf\Field>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setFields($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Field::class); + $this->fields = $arr; + + return $this; + } + + /** + * The list of types appearing in `oneof` definitions in this type. + * + * Generated from protobuf field repeated string oneofs = 3; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOneofs() + { + return $this->oneofs; + } + + /** + * The list of types appearing in `oneof` definitions in this type. + * + * Generated from protobuf field repeated string oneofs = 3; + * @param array|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOneofs($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->oneofs = $arr; + + return $this; + } + + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 4; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getOptions() + { + return $this->options; + } + + /** + * The protocol buffer options. + * + * Generated from protobuf field repeated .google.protobuf.Option options = 4; + * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setOptions($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); + $this->options = $arr; + + return $this; + } + + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + * @return \Google\Protobuf\SourceContext|null + */ + public function getSourceContext() + { + return $this->source_context; + } + + public function hasSourceContext() + { + return isset($this->source_context); + } + + public function clearSourceContext() + { + unset($this->source_context); + } + + /** + * The source context. + * + * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; + * @param \Google\Protobuf\SourceContext $var + * @return $this + */ + public function setSourceContext($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); + $this->source_context = $var; + + return $this; + } + + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 6; + * @return int + */ + public function getSyntax() + { + return $this->syntax; + } + + /** + * The source syntax. + * + * Generated from protobuf field .google.protobuf.Syntax syntax = 6; + * @param int $var + * @return $this + */ + public function setSyntax($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); + $this->syntax = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php b/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php new file mode 100644 index 0000000..ae5fc5b --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php @@ -0,0 +1,68 @@ +google.protobuf.UInt32Value + */ +class UInt32Value extends \Google\Protobuf\Internal\Message +{ + /** + * The uint32 value. + * + * Generated from protobuf field uint32 value = 1; + */ + protected $value = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $value + * The uint32 value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The uint32 value. + * + * Generated from protobuf field uint32 value = 1; + * @return int + */ + public function getValue() + { + return $this->value; + } + + /** + * The uint32 value. + * + * Generated from protobuf field uint32 value = 1; + * @param int $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkUint32($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php b/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php new file mode 100644 index 0000000..aa96867 --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php @@ -0,0 +1,68 @@ +google.protobuf.UInt64Value + */ +class UInt64Value extends \Google\Protobuf\Internal\Message +{ + /** + * The uint64 value. + * + * Generated from protobuf field uint64 value = 1; + */ + protected $value = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int|string $value + * The uint64 value. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); + parent::__construct($data); + } + + /** + * The uint64 value. + * + * Generated from protobuf field uint64 value = 1; + * @return int|string + */ + public function getValue() + { + return $this->value; + } + + /** + * The uint64 value. + * + * Generated from protobuf field uint64 value = 1; + * @param int|string $var + * @return $this + */ + public function setValue($var) + { + GPBUtil::checkUint64($var); + $this->value = $var; + + return $this; + } + +} + diff --git a/vendor/google/protobuf/src/Google/Protobuf/Value.php b/vendor/google/protobuf/src/Google/Protobuf/Value.php new file mode 100644 index 0000000..dcc0bdf --- /dev/null +++ b/vendor/google/protobuf/src/Google/Protobuf/Value.php @@ -0,0 +1,244 @@ +google.protobuf.Value + */ +class Value extends \Google\Protobuf\Internal\Message +{ + protected $kind; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $null_value + * Represents a null value. + * @type float $number_value + * Represents a double value. + * @type string $string_value + * Represents a string value. + * @type bool $bool_value + * Represents a boolean value. + * @type \Google\Protobuf\Struct $struct_value + * Represents a structured value. + * @type \Google\Protobuf\ListValue $list_value + * Represents a repeated `Value`. + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Google\Protobuf\Struct::initOnce(); + parent::__construct($data); + } + + /** + * Represents a null value. + * + * Generated from protobuf field .google.protobuf.NullValue null_value = 1; + * @return int + */ + public function getNullValue() + { + return $this->readOneof(1); + } + + public function hasNullValue() + { + return $this->hasOneof(1); + } + + /** + * Represents a null value. + * + * Generated from protobuf field .google.protobuf.NullValue null_value = 1; + * @param int $var + * @return $this + */ + public function setNullValue($var) + { + GPBUtil::checkEnum($var, \Google\Protobuf\NullValue::class); + $this->writeOneof(1, $var); + + return $this; + } + + /** + * Represents a double value. + * + * Generated from protobuf field double number_value = 2; + * @return float + */ + public function getNumberValue() + { + return $this->readOneof(2); + } + + public function hasNumberValue() + { + return $this->hasOneof(2); + } + + /** + * Represents a double value. + * + * Generated from protobuf field double number_value = 2; + * @param float $var + * @return $this + */ + public function setNumberValue($var) + { + GPBUtil::checkDouble($var); + $this->writeOneof(2, $var); + + return $this; + } + + /** + * Represents a string value. + * + * Generated from protobuf field string string_value = 3; + * @return string + */ + public function getStringValue() + { + return $this->readOneof(3); + } + + public function hasStringValue() + { + return $this->hasOneof(3); + } + + /** + * Represents a string value. + * + * Generated from protobuf field string string_value = 3; + * @param string $var + * @return $this + */ + public function setStringValue($var) + { + GPBUtil::checkString($var, True); + $this->writeOneof(3, $var); + + return $this; + } + + /** + * Represents a boolean value. + * + * Generated from protobuf field bool bool_value = 4; + * @return bool + */ + public function getBoolValue() + { + return $this->readOneof(4); + } + + public function hasBoolValue() + { + return $this->hasOneof(4); + } + + /** + * Represents a boolean value. + * + * Generated from protobuf field bool bool_value = 4; + * @param bool $var + * @return $this + */ + public function setBoolValue($var) + { + GPBUtil::checkBool($var); + $this->writeOneof(4, $var); + + return $this; + } + + /** + * Represents a structured value. + * + * Generated from protobuf field .google.protobuf.Struct struct_value = 5; + * @return \Google\Protobuf\Struct|null + */ + public function getStructValue() + { + return $this->readOneof(5); + } + + public function hasStructValue() + { + return $this->hasOneof(5); + } + + /** + * Represents a structured value. + * + * Generated from protobuf field .google.protobuf.Struct struct_value = 5; + * @param \Google\Protobuf\Struct $var + * @return $this + */ + public function setStructValue($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Struct::class); + $this->writeOneof(5, $var); + + return $this; + } + + /** + * Represents a repeated `Value`. + * + * Generated from protobuf field .google.protobuf.ListValue list_value = 6; + * @return \Google\Protobuf\ListValue|null + */ + public function getListValue() + { + return $this->readOneof(6); + } + + public function hasListValue() + { + return $this->hasOneof(6); + } + + /** + * Represents a repeated `Value`. + * + * Generated from protobuf field .google.protobuf.ListValue list_value = 6; + * @param \Google\Protobuf\ListValue $var + * @return $this + */ + public function setListValue($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\ListValue::class); + $this->writeOneof(6, $var); + + return $this; + } + + /** + * @return string + */ + public function getKind() + { + return $this->whichOneof("kind"); + } + +} + diff --git a/vendor/google/protobuf/src/phpdoc.dist.xml b/vendor/google/protobuf/src/phpdoc.dist.xml new file mode 100644 index 0000000..dd31302 --- /dev/null +++ b/vendor/google/protobuf/src/phpdoc.dist.xml @@ -0,0 +1,15 @@ + + + + + doc + + + doc + + + Google/Protobuf/Internal/MapField.php + Google/Protobuf/Internal/Message.php + Google/Protobuf/Internal/RepeatedField.php + + diff --git a/vendor/grpc/grpc/LICENSE b/vendor/grpc/grpc/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/vendor/grpc/grpc/LICENSE @@ -0,0 +1,201 @@ + 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 {yyyy} {name of copyright owner} + + 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/vendor/grpc/grpc/MAINTAINERS.md b/vendor/grpc/grpc/MAINTAINERS.md new file mode 100644 index 0000000..975a694 --- /dev/null +++ b/vendor/grpc/grpc/MAINTAINERS.md @@ -0,0 +1,16 @@ +This page lists all active maintainers of this repository. If you were a +maintainer and would like to add your name to the Emeritus list, please send us a +PR. + +See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md) +for governance guidelines and how to become a maintainer. +See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) +for general contribution guidelines. + +## Maintainers (in alphabetical order) +- [stanley-cheung](https://github.com/stanley-cheung), Google Inc. +- [wenbozhu](https://github.com/wenbozhu), Google Inc. +- [zhouyihaiding](https://github.com/zhouyihaiding), Google Inc. + +## Emeritus Maintainers (in alphabetical order) +- [murgatroid99](https://github.com/murgatroid99), Google Inc. diff --git a/vendor/grpc/grpc/README.md b/vendor/grpc/grpc/README.md new file mode 100644 index 0000000..293c27b --- /dev/null +++ b/vendor/grpc/grpc/README.md @@ -0,0 +1,9 @@ +# gRPC PHP Client Library + +This repository contains only PHP files to support Composer installation. + +This repository is a mirror of [gRPC](https://github.com/grpc/grpc). Any support +requests, bug reports, or development contributions should be directed to +that project. + +To install gRPC for PHP, please see https://github.com/grpc/grpc/tree/master/src/php diff --git a/vendor/grpc/grpc/composer.json b/vendor/grpc/grpc/composer.json new file mode 100644 index 0000000..bf91659 --- /dev/null +++ b/vendor/grpc/grpc/composer.json @@ -0,0 +1,24 @@ +{ + "name": "grpc/grpc", + "type": "library", + "description": "gRPC library for PHP", + "keywords": ["rpc"], + "homepage": "https://grpc.io", + "license": "Apache-2.0", + "version": "1.42.0", + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "google/auth": "^v1.3.0" + }, + "suggest": { + "ext-protobuf": "For better performance, install the protobuf C extension.", + "google/protobuf": "To get started using grpc quickly, install the native protobuf library." + }, + "autoload": { + "psr-4": { + "Grpc\\": "src/lib/" + } + } +} diff --git a/vendor/grpc/grpc/etc/roots.pem b/vendor/grpc/grpc/etc/roots.pem new file mode 100644 index 0000000..e5c84fa --- /dev/null +++ b/vendor/grpc/grpc/etc/roots.pem @@ -0,0 +1,4337 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA +# Label: "GlobalSign Root CA" +# Serial: 4835703278459707669005204 +# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a +# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c +# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 +# Label: "GlobalSign Root CA - R2" +# Serial: 4835703278459682885658125 +# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 +# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe +# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited +# Label: "Entrust.net Premium 2048 Secure Server CA" +# Serial: 946069240 +# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 +# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 +# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust +# Label: "Baltimore CyberTrust Root" +# Serial: 33554617 +# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 +# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 +# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. +# Label: "Entrust Root Certification Authority" +# Serial: 1164660820 +# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 +# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 +# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +# Issuer: CN=AAA Certificate Services O=Comodo CA Limited +# Subject: CN=AAA Certificate Services O=Comodo CA Limited +# Label: "Comodo AAA Services root" +# Serial: 1 +# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 +# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 +# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2" +# Serial: 1289 +# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b +# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 +# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3" +# Serial: 1478 +# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf +# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 +# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 +# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 +# Label: "Security Communication Root CA" +# Serial: 0 +# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a +# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 +# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- + +# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com +# Label: "XRamp Global CA Root" +# Serial: 107108908803651509692980124233745014957 +# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 +# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 +# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority +# Label: "Go Daddy Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 +# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 +# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- + +# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority +# Label: "Starfield Class 2 CA" +# Serial: 0 +# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 +# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a +# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root CA" +# Serial: 17154717934120587862167794914071425081 +# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 +# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 +# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root CA" +# Serial: 10944719598952040374951832963794454346 +# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e +# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 +# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert High Assurance EV Root CA" +# Serial: 3553400076410547919724730734378100087 +# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a +# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 +# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG +# Label: "SwissSign Gold CA - G2" +# Serial: 13492815561806991280 +# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 +# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 +# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG +# Label: "SwissSign Silver CA - G2" +# Serial: 5700383053117599563 +# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 +# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb +# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +# Issuer: CN=SecureTrust CA O=SecureTrust Corporation +# Subject: CN=SecureTrust CA O=SecureTrust Corporation +# Label: "SecureTrust CA" +# Serial: 17199774589125277788362757014266862032 +# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 +# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 +# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +# Issuer: CN=Secure Global CA O=SecureTrust Corporation +# Subject: CN=Secure Global CA O=SecureTrust Corporation +# Label: "Secure Global CA" +# Serial: 9751836167731051554232119481456978597 +# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de +# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b +# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO Certification Authority O=COMODO CA Limited +# Label: "COMODO Certification Authority" +# Serial: 104350513648249232941998508985834464573 +# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 +# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b +# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. +# Label: "Network Solutions Certificate Authority" +# Serial: 116697915152937497490437556386812487904 +# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e +# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce +# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited +# Label: "COMODO ECC Certification Authority" +# Serial: 41578283867086692638256921589707938090 +# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 +# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 +# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +# Issuer: CN=Certigna O=Dhimyotis +# Subject: CN=Certigna O=Dhimyotis +# Label: "Certigna" +# Serial: 18364802974209362175 +# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff +# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 +# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc +# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc +# Label: "Cybertrust Global Root" +# Serial: 4835703278459682877484360 +# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 +# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 +# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority +# Label: "ePKI Root Certification Authority" +# Serial: 28956088682735189655030529057352760477 +# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 +# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 +# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +# Issuer: O=certSIGN OU=certSIGN ROOT CA +# Subject: O=certSIGN OU=certSIGN ROOT CA +# Label: "certSIGN ROOT CA" +# Serial: 35210227249154 +# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 +# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b +# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +# Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) +# Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) +# Label: "NetLock Arany (Class Gold) Főtanúsítvány" +# Serial: 80544274841616 +# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 +# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 +# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post +# Label: "Hongkong Post Root CA 1" +# Serial: 1000 +# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca +# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 +# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. +# Label: "SecureSign RootCA11" +# Serial: 1 +# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 +# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 +# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. +# Label: "Microsec e-Szigno Root CA 2009" +# Serial: 14014712776195784473 +# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 +# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e +# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 +# Label: "GlobalSign Root CA - R3" +# Serial: 4835703278459759426209954 +# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 +# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad +# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- + +# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 +# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" +# Serial: 6047274297262753887 +# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 +# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa +# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +# Issuer: CN=Izenpe.com O=IZENPE S.A. +# Subject: CN=Izenpe.com O=IZENPE S.A. +# Label: "Izenpe.com" +# Serial: 917563065490389241595536686991402621 +# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 +# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 +# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. +# Label: "Go Daddy Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 +# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b +# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 +# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e +# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. +# Label: "Starfield Services Root Certificate Authority - G2" +# Serial: 0 +# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 +# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f +# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Commercial O=AffirmTrust +# Subject: CN=AffirmTrust Commercial O=AffirmTrust +# Label: "AffirmTrust Commercial" +# Serial: 8608355977964138876 +# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 +# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 +# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Networking O=AffirmTrust +# Subject: CN=AffirmTrust Networking O=AffirmTrust +# Label: "AffirmTrust Networking" +# Serial: 8957382827206547757 +# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f +# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f +# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium O=AffirmTrust +# Subject: CN=AffirmTrust Premium O=AffirmTrust +# Label: "AffirmTrust Premium" +# Serial: 7893706540734352110 +# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 +# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 +# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- + +# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust +# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust +# Label: "AffirmTrust Premium ECC" +# Serial: 8401224907861490260 +# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d +# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb +# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA" +# Serial: 279744 +# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 +# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e +# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA +# Label: "TWCA Root Certification Authority" +# Serial: 1 +# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 +# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 +# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 +# Label: "Security Communication RootCA2" +# Serial: 0 +# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 +# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 +# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +# Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes +# Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes +# Label: "EC-ACC" +# Serial: -23701579247955709139626555126524820479 +# MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09 +# SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8 +# SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99 +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB +8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy +dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 +YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 +dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh +IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD +LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG +EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g +KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD +ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu +bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg +ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R +85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm +4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV +HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd +QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t +lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB +o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 +opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo +dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW +ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN +AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y +/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k +SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy +Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS +Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl +nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2011" +# Serial: 0 +# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 +# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d +# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 +# Label: "Actalis Authentication Root CA" +# Serial: 6271844772424770508 +# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 +# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac +# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 2 Root CA" +# Serial: 2 +# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 +# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 +# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 +# Label: "Buypass Class 3 Root CA" +# Serial: 2 +# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec +# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 +# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 3" +# Serial: 1 +# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef +# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 +# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 2009" +# Serial: 623603 +# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f +# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 +# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH +# Label: "D-TRUST Root Class 3 CA 2 EV 2009" +# Serial: 623604 +# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 +# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 +# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +# Issuer: CN=CA Disig Root R2 O=Disig a.s. +# Subject: CN=CA Disig Root R2 O=Disig a.s. +# Label: "CA Disig Root R2" +# Serial: 10572350602393338211 +# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 +# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 +# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV +# Label: "ACCVRAIZ1" +# Serial: 6828503384748696800 +# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 +# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 +# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA +# Label: "TWCA Global Root CA" +# Serial: 3262 +# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 +# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 +# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- + +# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera +# Label: "TeliaSonera Root CA v1" +# Serial: 199041966741090107964904287217786801558 +# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c +# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 +# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +# Issuer: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi +# Subject: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi +# Label: "E-Tugra Certification Authority" +# Serial: 7667447206703254355 +# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 +# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 +# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center +# Label: "T-TeleSec GlobalRoot Class 2" +# Serial: 1 +# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a +# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 +# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- + +# Issuer: CN=Atos TrustedRoot 2011 O=Atos +# Subject: CN=Atos TrustedRoot 2011 O=Atos +# Label: "Atos TrustedRoot 2011" +# Serial: 6643877497813316402 +# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 +# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 +# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 1 G3" +# Serial: 687049649626669250736271037606554624078720034195 +# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab +# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 +# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 2 G3" +# Serial: 390156079458959257446133169266079962026824725800 +# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 +# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 +# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited +# Label: "QuoVadis Root CA 3 G3" +# Serial: 268090761170461462463995952157327242137089239581 +# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 +# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d +# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G2" +# Serial: 15385348160840213938643033620894905419 +# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d +# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f +# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Assured ID Root G3" +# Serial: 15459312981008553731928384953135426796 +# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb +# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 +# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G2" +# Serial: 4293743540046975378534879503202253541 +# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 +# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 +# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Global Root G3" +# Serial: 7089244469030293291760083333884364146 +# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca +# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e +# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- + +# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com +# Label: "DigiCert Trusted Root G4" +# Serial: 7451500558977370777930084869016614236 +# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 +# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 +# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- + +# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited +# Label: "COMODO RSA Certification Authority" +# Serial: 101909084537582093308941363524873193117 +# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 +# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 +# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network +# Label: "USERTrust RSA Certification Authority" +# Serial: 2645093764781058787591871645665788717 +# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 +# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e +# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network +# Label: "USERTrust ECC Certification Authority" +# Serial: 123013823720199481456569720443997572134 +# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 +# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 +# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 +# Label: "GlobalSign ECC Root CA - R4" +# Serial: 14367148294922964480859022125800977897474 +# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e +# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb +# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 +# Label: "GlobalSign ECC Root CA - R5" +# Serial: 32785792099990507226680698011560947931244 +# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 +# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa +# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden +# Label: "Staat der Nederlanden EV Root CA" +# Serial: 10000013 +# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba +# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb +# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust +# Label: "IdenTrust Commercial Root CA 1" +# Serial: 13298821034946342390520003877796839426 +# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 +# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 +# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust +# Label: "IdenTrust Public Sector Root CA 1" +# Serial: 13298821034946342390521976156843933698 +# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba +# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd +# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G2" +# Serial: 1246989352 +# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 +# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 +# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - EC1" +# Serial: 51543124481930649114116133369 +# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc +# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 +# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority +# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority +# Label: "CFCA EV ROOT" +# Serial: 407555286 +# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 +# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 +# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GB CA" +# Serial: 157768595616588414422159278966750757568 +# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d +# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed +# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. +# Label: "SZAFIR ROOT CA2" +# Serial: 357043034767186914217277344587386743377558296292 +# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 +# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de +# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Network CA 2" +# Serial: 44979900017204383099463764357512596969 +# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 +# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 +# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce +# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 +# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority +# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" +# Serial: 0 +# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef +# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 +# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +# Issuer: CN=ISRG Root X1 O=Internet Security Research Group +# Subject: CN=ISRG Root X1 O=Internet Security Research Group +# Label: "ISRG Root X1" +# Serial: 172886928669790476064670243504169061120 +# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e +# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 +# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM +# Label: "AC RAIZ FNMT-RCM" +# Serial: 485876308206448804701554682760554759 +# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d +# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 +# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 1 O=Amazon +# Subject: CN=Amazon Root CA 1 O=Amazon +# Label: "Amazon Root CA 1" +# Serial: 143266978916655856878034712317230054538369994 +# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 +# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 +# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 2 O=Amazon +# Subject: CN=Amazon Root CA 2 O=Amazon +# Label: "Amazon Root CA 2" +# Serial: 143266982885963551818349160658925006970653239 +# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 +# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a +# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 3 O=Amazon +# Subject: CN=Amazon Root CA 3 O=Amazon +# Label: "Amazon Root CA 3" +# Serial: 143266986699090766294700635381230934788665930 +# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 +# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e +# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +# Issuer: CN=Amazon Root CA 4 O=Amazon +# Subject: CN=Amazon Root CA 4 O=Amazon +# Label: "Amazon Root CA 4" +# Serial: 143266989758080763974105200630763877849284878 +# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd +# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be +# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM +# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" +# Serial: 1 +# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 +# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca +# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. +# Label: "GDCA TrustAUTH R5 ROOT" +# Serial: 9009899650740120186 +# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 +# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 +# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-1" +# Serial: 15752444095811006489 +# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 +# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a +# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y +IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB +pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h +IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG +A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU +cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid +RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V +seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme +9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV +EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW +hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ +DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD +ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I +/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ +yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts +L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN +zl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor RootCert CA-2" +# Serial: 2711694510199101698 +# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 +# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 +# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig +Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk +MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg +Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD +VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy +dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ +QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq +1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp +2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK +DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape +az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF +3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 +oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM +g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 +mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd +BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U +nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw +DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX +dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ +MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL +/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX +CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa +ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW +2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 +N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 +Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB +As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp +5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu +1uwJ +-----END CERTIFICATE----- + +# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority +# Label: "TrustCor ECA-1" +# Serial: 9548242946988625984 +# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c +# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd +# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD +VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk +MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y +IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV +BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw +IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy +dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig +RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb +3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA +BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 +3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou +owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ +wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF +ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf +BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv +civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 +AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 +soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI +WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi +tJ/X5g== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation +# Label: "SSL.com Root Certification Authority RSA" +# Serial: 8875640296558310041 +# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 +# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb +# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com Root Certification Authority ECC" +# Serial: 8495723813297216424 +# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e +# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a +# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority RSA R2" +# Serial: 6248227494352943350 +# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 +# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a +# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation +# Label: "SSL.com EV Root Certification Authority ECC" +# Serial: 3182246526754555285 +# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 +# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d +# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 +# Label: "GlobalSign Root CA - R6" +# Serial: 1417766617973444989252670301619537 +# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae +# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 +# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed +# Label: "OISTE WISeKey Global Root GC CA" +# Serial: 44084345621038548146064804565436152554 +# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 +# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 +# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R1 O=Google Trust Services LLC +# Subject: CN=GTS Root R1 O=Google Trust Services LLC +# Label: "GTS Root R1" +# Serial: 146587175971765017618439757810265552097 +# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 +# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 +# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX +mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 +zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P +fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc +vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 +Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp +zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO +Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW +k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ +DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF +lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW +Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z +XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR +gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 +d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv +J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg +DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM ++SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy +F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 +SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws +E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R2 O=Google Trust Services LLC +# Subject: CN=GTS Root R2 O=Google Trust Services LLC +# Label: "GTS Root R2" +# Serial: 146587176055767053814479386953112547951 +# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b +# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d +# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH +MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM +QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy +MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl +cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg +GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu +XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd +re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu +PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 +mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K +8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj +x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR +nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 +kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok +twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp +8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT +z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA +pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb +pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB +R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R +RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk +0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC +5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF +izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn +yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R3 O=Google Trust Services LLC +# Subject: CN=GTS Root R3 O=Google Trust Services LLC +# Label: "GTS Root R3" +# Serial: 146587176140553309517047991083707763997 +# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 +# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 +# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A +DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk +fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA +njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +# Issuer: CN=GTS Root R4 O=Google Trust Services LLC +# Subject: CN=GTS Root R4 O=Google Trust Services LLC +# Label: "GTS Root R4" +# Serial: 146587176229350439916519468929765261721 +# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 +# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb +# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l +xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 +CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx +sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Global G2 Root O=UniTrust +# Subject: CN=UCA Global G2 Root O=UniTrust +# Label: "UCA Global G2 Root" +# Serial: 124779693093741543919145257850076631279 +# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 +# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a +# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- + +# Issuer: CN=UCA Extended Validation Root O=UniTrust +# Subject: CN=UCA Extended Validation Root O=UniTrust +# Label: "UCA Extended Validation Root" +# Serial: 106100277556486529736699587978573607008 +# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 +# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a +# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- + +# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 +# Label: "Certigna Root CA" +# Serial: 269714418870597844693661054334862075617 +# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 +# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 +# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign Root CA - G1" +# Serial: 235931866688319308814040 +# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac +# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c +# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI +# Label: "emSign ECC Root CA - G3" +# Serial: 287880440101571086945156 +# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 +# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 +# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI +# Label: "emSign Root CA - C1" +# Serial: 825510296613316004955058 +# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 +# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 +# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI +# Label: "emSign ECC Root CA - C3" +# Serial: 582948710642506000014504 +# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 +# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 +# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post +# Label: "Hongkong Post Root CA 3" +# Serial: 46170865288971385588281144162979347873371282084 +# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 +# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 +# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL +BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ +SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n +a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 +NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT +CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u +Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO +dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI +VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV +9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY +2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY +vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt +bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb +x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ +l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK +TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj +Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw +DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG +7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk +MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr +gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk +GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS +3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm +Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ +l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c +JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP +L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa +LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG +mpv0 +-----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G4" +# Serial: 289383649854506086828220374796556676440 +# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 +# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 +# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft ECC Root Certificate Authority 2017" +# Serial: 136839042543790627607696632466672567020 +# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 +# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 +# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation +# Label: "Microsoft RSA Root Certificate Authority 2017" +# Serial: 40975477897264996090493496164228220339 +# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 +# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 +# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. +# Label: "e-Szigno Root CA 2017" +# Serial: 411379200276854331539784714 +# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 +# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 +# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- + +# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 +# Label: "certSIGN Root CA G2" +# Serial: 313609486401300475190 +# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 +# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 +# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global Certification Authority" +# Serial: 1846098327275375458322922162 +# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e +# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 +# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P256 Certification Authority" +# Serial: 4151900041497450638097112925 +# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 +# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf +# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. +# Label: "Trustwave Global ECC P384 Certification Authority" +# Serial: 2704997926503831671788816187 +# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 +# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 +# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- + +# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. +# Label: "NAVER Global Root Certification Authority" +# Serial: 9013692873798656336226253319739695165984492813 +# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b +# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 +# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- + +# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres +# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" +# Serial: 131542671362353147877283741781055151509 +# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb +# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a +# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa +# Label: "GlobalSign Root R46" +# Serial: 1552617688466950547958867513931858518042577 +# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef +# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 +# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- + +# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa +# Label: "GlobalSign Root E46" +# Serial: 1552617690338932563915843282459653771421763 +# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f +# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 +# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH +# Label: "GLOBALTRUST 2020" +# Serial: 109160994242082918454945253 +# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 +# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 +# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG +A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw +FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx +MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u +aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b +RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z +YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 +QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw +yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ +BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ +SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH +r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 +4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me +dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw +q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 +nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu +H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC +XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd +6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf ++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi +kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 +wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB +TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C +MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn +4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I +aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy +qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz +# Label: "ANF Secure Server Root CA" +# Serial: 996390341000653745 +# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 +# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 +# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 +-----BEGIN CERTIFICATE----- +MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV +BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk +YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV +BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN +MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF +UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD +VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v +dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj +cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q +yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH +2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX +H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL +zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR +p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz +W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ +SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn +LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 +n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B +u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj +o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC +AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L +9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej +rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK +pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 +vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq +OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ +/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 +2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI ++PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 +MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo +tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= +-----END CERTIFICATE----- + +# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum EC-384 CA" +# Serial: 160250656287871593594747141429395092468 +# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 +# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed +# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority +# Label: "Certum Trusted Root CA" +# Serial: 40870380103424195783807378461123655149 +# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 +# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 +# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd +-----BEGIN CERTIFICATE----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 +MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu +MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV +BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw +MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg +U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ +n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q +p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq +NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF +8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 +HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa +mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi +7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF +ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P +qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ +v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 +Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD +ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 +WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo +zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR +5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ +GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf +5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq +0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D +P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM +qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP +0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf +E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----END CERTIFICATE----- + +# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique +# Label: "TunTrust Root CA" +# Serial: 108534058042236574382096126452369648152337120275 +# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 +# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb +# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS RSA Root CA 2021" +# Serial: 76817823531813593706434026085292783742 +# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 +# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d +# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- + +# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA +# Label: "HARICA TLS ECC Root CA 2021" +# Serial: 137515985548005187474074462014555733966 +# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 +# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 +# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- diff --git a/vendor/grpc/grpc/src/lib/AbstractCall.php b/vendor/grpc/grpc/src/lib/AbstractCall.php new file mode 100644 index 0000000..d1a186a --- /dev/null +++ b/vendor/grpc/grpc/src/lib/AbstractCall.php @@ -0,0 +1,147 @@ +add($delta); + } else { + $deadline = Timeval::infFuture(); + } + $this->call = new Call($channel, $method, $deadline); + $this->deserialize = $deserialize; + $this->metadata = null; + $this->trailing_metadata = null; + if (array_key_exists('call_credentials_callback', $options) && + is_callable($call_credentials_callback = + $options['call_credentials_callback']) + ) { + $call_credentials = CallCredentials::createFromPlugin( + $call_credentials_callback + ); + $this->call->setCredentials($call_credentials); + } + } + + /** + * @return mixed The metadata sent by the server + */ + public function getMetadata() + { + return $this->metadata; + } + + /** + * @return mixed The trailing metadata sent by the server + */ + public function getTrailingMetadata() + { + return $this->trailing_metadata; + } + + /** + * @return string The URI of the endpoint + */ + public function getPeer() + { + return $this->call->getPeer(); + } + + /** + * Cancels the call. + */ + public function cancel() + { + $this->call->cancel(); + } + + /** + * Serialize a message to the protobuf binary format. + * + * @param mixed $data The Protobuf message + * + * @return string The protobuf binary format + */ + protected function _serializeMessage($data) + { + // Proto3 implementation + return $data->serializeToString(); + } + + /** + * Deserialize a response value to an object. + * + * @param string $value The binary value to deserialize + * + * @return mixed The deserialized value + */ + protected function _deserializeResponse($value) + { + if ($value === null) { + return; + } + list($className, $deserializeFunc) = $this->deserialize; + $obj = new $className(); + $obj->mergeFromString($value); + return $obj; + } + + /** + * Set the CallCredentials for the underlying Call. + * + * @param CallCredentials $call_credentials The CallCredentials object + */ + public function setCallCredentials($call_credentials) + { + $this->call->setCredentials($call_credentials); + } +} diff --git a/vendor/grpc/grpc/src/lib/BaseStub.php b/vendor/grpc/grpc/src/lib/BaseStub.php new file mode 100644 index 0000000..cb44ef6 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/BaseStub.php @@ -0,0 +1,618 @@ +hostname = $hostname; + $this->update_metadata = null; + if (isset($opts['update_metadata'])) { + if (is_callable($opts['update_metadata'])) { + $this->update_metadata = $opts['update_metadata']; + } + unset($opts['update_metadata']); + } + if (!empty($opts['grpc.ssl_target_name_override'])) { + $this->hostname_override = $opts['grpc.ssl_target_name_override']; + } + if (isset($opts['grpc_call_invoker'])) { + $this->call_invoker = $opts['grpc_call_invoker']; + unset($opts['grpc_call_invoker']); + $channel_opts = $this->updateOpts($opts); + // If the grpc_call_invoker is defined, use the channel created by the call invoker. + $this->channel = $this->call_invoker->createChannelFactory($hostname, $channel_opts); + return; + } + $this->call_invoker = new DefaultCallInvoker(); + if ($channel) { + if (!is_a($channel, 'Grpc\Channel') && + !is_a($channel, 'Grpc\Internal\InterceptorChannel')) { + throw new \Exception('The channel argument is not a Channel object '. + 'or an InterceptorChannel object created by '. + 'Interceptor::intercept($channel, Interceptor|Interceptor[] $interceptors)'); + } + $this->channel = $channel; + return; + } + + $this->channel = static::getDefaultChannel($hostname, $opts); + } + + private static function updateOpts($opts) { + if (!empty($opts['grpc.primary_user_agent'])) { + $opts['grpc.primary_user_agent'] .= ' '; + } else { + $opts['grpc.primary_user_agent'] = ''; + } + if (defined('\Grpc\VERSION')) { + $version_str = \Grpc\VERSION; + } else { + if (!file_exists($composerFile = __DIR__.'/../../composer.json')) { + // for grpc/grpc-php subpackage + $composerFile = __DIR__.'/../composer.json'; + } + $package_config = json_decode(file_get_contents($composerFile), true); + $version_str = $package_config['version']; + } + $opts['grpc.primary_user_agent'] .= 'grpc-php/'.$version_str; + if (!array_key_exists('credentials', $opts)) { + throw new \Exception("The opts['credentials'] key is now ". + 'required. Please see one of the '. + 'ChannelCredentials::create methods'); + } + return $opts; + } + + /** + * Creates and returns the default Channel + * + * @param array $opts Channel constructor options + * + * @return Channel The channel + */ + public static function getDefaultChannel($hostname, array $opts) + { + $channel_opts = self::updateOpts($opts); + return new Channel($hostname, $opts); + } + + /** + * @return string The URI of the endpoint + */ + public function getTarget() + { + return $this->channel->getTarget(); + } + + /** + * @param bool $try_to_connect (optional) + * + * @return int The grpc connectivity state + */ + public function getConnectivityState($try_to_connect = false) + { + return $this->channel->getConnectivityState($try_to_connect); + } + + /** + * @param int $timeout in microseconds + * + * @return bool true if channel is ready + * @throw Exception if channel is in FATAL_ERROR state + */ + public function waitForReady($timeout) + { + $new_state = $this->getConnectivityState(true); + if ($this->_checkConnectivityState($new_state)) { + return true; + } + + $now = Timeval::now(); + $delta = new Timeval($timeout); + $deadline = $now->add($delta); + + while ($this->channel->watchConnectivityState($new_state, $deadline)) { + // state has changed before deadline + $new_state = $this->getConnectivityState(); + if ($this->_checkConnectivityState($new_state)) { + return true; + } + } + // deadline has passed + $new_state = $this->getConnectivityState(); + + return $this->_checkConnectivityState($new_state); + } + + /** + * Close the communication channel associated with this stub. + */ + public function close() + { + $this->channel->close(); + } + + /** + * @param $new_state Connect state + * + * @return bool true if state is CHANNEL_READY + * @throw Exception if state is CHANNEL_FATAL_FAILURE + */ + private function _checkConnectivityState($new_state) + { + if ($new_state == \Grpc\CHANNEL_READY) { + return true; + } + if ($new_state == \Grpc\CHANNEL_FATAL_FAILURE) { + throw new \Exception('Failed to connect to server'); + } + + return false; + } + + /** + * constructs the auth uri for the jwt. + * + * @param string $method The method string + * + * @return string The URL string + */ + private function _get_jwt_aud_uri($method) + { + // TODO(jtattermusch): This is not the correct implementation + // of extracting JWT "aud" claim. We should rely on + // grpc_metadata_credentials_plugin which + // also provides the correct value of "aud" claim + // in the grpc_auth_metadata_context.service_url field. + // Trying to do the construction of "aud" field ourselves + // is bad. + $last_slash_idx = strrpos($method, '/'); + if ($last_slash_idx === false) { + throw new \InvalidArgumentException( + 'service name must have a slash' + ); + } + $service_name = substr($method, 0, $last_slash_idx); + + if ($this->hostname_override) { + $hostname = $this->hostname_override; + } else { + $hostname = $this->hostname; + } + + // Remove the port if it is 443 + // See https://github.com/grpc/grpc/blob/07c9f7a36b2a0d34fcffebc85649cf3b8c339b5d/src/core/lib/security/transport/client_auth_filter.cc#L205 + if ((strlen($hostname) > 4) && (substr($hostname, -4) === ":443")) { + $hostname = substr($hostname, 0, -4); + } + + return 'https://'.$hostname.$service_name; + } + + /** + * validate and normalize the metadata array. + * + * @param array $metadata The metadata map + * + * @return array $metadata Validated and key-normalized metadata map + * @throw InvalidArgumentException if key contains invalid characters + */ + private function _validate_and_normalize_metadata($metadata) + { + $metadata_copy = []; + foreach ($metadata as $key => $value) { + if (!preg_match('/^[.A-Za-z\d_-]+$/', $key)) { + throw new \InvalidArgumentException( + 'Metadata keys must be nonempty strings containing only '. + 'alphanumeric characters, hyphens, underscores and dots' + ); + } + $metadata_copy[strtolower($key)] = $value; + } + + return $metadata_copy; + } + + /** + * Create a function which can be used to create UnaryCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _GrpcUnaryUnary($channel) + { + return function ($method, + $argument, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + $call = $this->call_invoker->UnaryCall( + $channel, + $method, + $deserialize, + $options + ); + $jwt_aud_uri = $this->_get_jwt_aud_uri($method); + if (is_callable($this->update_metadata)) { + $metadata = call_user_func( + $this->update_metadata, + $metadata, + $jwt_aud_uri + ); + } + $metadata = $this->_validate_and_normalize_metadata( + $metadata + ); + $call->start($argument, $metadata, $options); + return $call; + }; + } + + /** + * Create a function which can be used to create ServerStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _GrpcStreamUnary($channel) + { + return function ($method, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + $call = $this->call_invoker->ClientStreamingCall( + $channel, + $method, + $deserialize, + $options + ); + $jwt_aud_uri = $this->_get_jwt_aud_uri($method); + if (is_callable($this->update_metadata)) { + $metadata = call_user_func( + $this->update_metadata, + $metadata, + $jwt_aud_uri + ); + } + $metadata = $this->_validate_and_normalize_metadata( + $metadata + ); + $call->start($metadata); + return $call; + }; + } + + /** + * Create a function which can be used to create ClientStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _GrpcUnaryStream($channel) + { + return function ($method, + $argument, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + $call = $this->call_invoker->ServerStreamingCall( + $channel, + $method, + $deserialize, + $options + ); + $jwt_aud_uri = $this->_get_jwt_aud_uri($method); + if (is_callable($this->update_metadata)) { + $metadata = call_user_func( + $this->update_metadata, + $metadata, + $jwt_aud_uri + ); + } + $metadata = $this->_validate_and_normalize_metadata( + $metadata + ); + $call->start($argument, $metadata, $options); + return $call; + }; + } + + /** + * Create a function which can be used to create BidiStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _GrpcStreamStream($channel) + { + return function ($method, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + $call = $this->call_invoker->BidiStreamingCall( + $channel, + $method, + $deserialize, + $options + ); + $jwt_aud_uri = $this->_get_jwt_aud_uri($method); + if (is_callable($this->update_metadata)) { + $metadata = call_user_func( + $this->update_metadata, + $metadata, + $jwt_aud_uri + ); + } + $metadata = $this->_validate_and_normalize_metadata( + $metadata + ); + $call->start($metadata); + + return $call; + }; + } + + /** + * Create a function which can be used to create UnaryCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _UnaryUnaryCallFactory($channel) + { + if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { + return function ($method, + $argument, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + return $channel->getInterceptor()->interceptUnaryUnary( + $method, + $argument, + $deserialize, + $this->_UnaryUnaryCallFactory($channel->getNext()), + $metadata, + $options + ); + }; + } + return $this->_GrpcUnaryUnary($channel); + } + + /** + * Create a function which can be used to create ServerStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _UnaryStreamCallFactory($channel) + { + if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { + return function ($method, + $argument, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + return $channel->getInterceptor()->interceptUnaryStream( + $method, + $argument, + $deserialize, + $this->_UnaryStreamCallFactory($channel->getNext()), + $metadata, + $options + ); + }; + } + return $this->_GrpcUnaryStream($channel); + } + + /** + * Create a function which can be used to create ClientStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _StreamUnaryCallFactory($channel) + { + if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { + return function ($method, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + return $channel->getInterceptor()->interceptStreamUnary( + $method, + $deserialize, + $this->_StreamUnaryCallFactory($channel->getNext()), + $metadata, + $options + ); + }; + } + return $this->_GrpcStreamUnary($channel); + } + + /** + * Create a function which can be used to create BidiStreamingCall + * + * @param Channel|InterceptorChannel $channel + * @param callable $deserialize A function that deserializes the response + * + * @return \Closure + */ + private function _StreamStreamCallFactory($channel) + { + if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { + return function ($method, + $deserialize, + array $metadata = [], + array $options = []) use ($channel) { + return $channel->getInterceptor()->interceptStreamStream( + $method, + $deserialize, + $this->_StreamStreamCallFactory($channel->getNext()), + $metadata, + $options + ); + }; + } + return $this->_GrpcStreamStream($channel); + } + + /* This class is intended to be subclassed by generated code, so + * all functions begin with "_" to avoid name collisions. */ + /** + * Call a remote method that takes a single argument and has a + * single output. + * + * @param string $method The name of the method to call + * @param mixed $argument The argument to the method + * @param callable $deserialize A function that deserializes the response + * @param array $metadata A metadata map to send to the server + * (optional) + * @param array $options An array of options (optional) + * + * @return UnaryCall The active call object + */ + protected function _simpleRequest( + $method, + $argument, + $deserialize, + array $metadata = [], + array $options = [] + ) { + $call_factory = $this->_UnaryUnaryCallFactory($this->channel); + $call = $call_factory($method, $argument, $deserialize, $metadata, $options); + return $call; + } + + /** + * Call a remote method that takes a stream of arguments and has a single + * output. + * + * @param string $method The name of the method to call + * @param callable $deserialize A function that deserializes the response + * @param array $metadata A metadata map to send to the server + * (optional) + * @param array $options An array of options (optional) + * + * @return ClientStreamingCall The active call object + */ + protected function _clientStreamRequest( + $method, + $deserialize, + array $metadata = [], + array $options = [] + ) { + $call_factory = $this->_StreamUnaryCallFactory($this->channel); + $call = $call_factory($method, $deserialize, $metadata, $options); + return $call; + } + + /** + * Call a remote method that takes a single argument and returns a stream + * of responses. + * + * @param string $method The name of the method to call + * @param mixed $argument The argument to the method + * @param callable $deserialize A function that deserializes the responses + * @param array $metadata A metadata map to send to the server + * (optional) + * @param array $options An array of options (optional) + * + * @return ServerStreamingCall The active call object + */ + protected function _serverStreamRequest( + $method, + $argument, + $deserialize, + array $metadata = [], + array $options = [] + ) { + $call_factory = $this->_UnaryStreamCallFactory($this->channel); + $call = $call_factory($method, $argument, $deserialize, $metadata, $options); + return $call; + } + + /** + * Call a remote method with messages streaming in both directions. + * + * @param string $method The name of the method to call + * @param callable $deserialize A function that deserializes the responses + * @param array $metadata A metadata map to send to the server + * (optional) + * @param array $options An array of options (optional) + * + * @return BidiStreamingCall The active call object + */ + protected function _bidiRequest( + $method, + $deserialize, + array $metadata = [], + array $options = [] + ) { + $call_factory = $this->_StreamStreamCallFactory($this->channel); + $call = $call_factory($method, $deserialize, $metadata, $options); + return $call; + } +} diff --git a/vendor/grpc/grpc/src/lib/BidiStreamingCall.php b/vendor/grpc/grpc/src/lib/BidiStreamingCall.php new file mode 100644 index 0000000..be79c5d --- /dev/null +++ b/vendor/grpc/grpc/src/lib/BidiStreamingCall.php @@ -0,0 +1,105 @@ +call->startBatch([ + OP_SEND_INITIAL_METADATA => $metadata, + ]); + } + + /** + * Reads the next value from the server. + * + * @return mixed The next value from the server, or null if there is none + */ + public function read() + { + $batch = [OP_RECV_MESSAGE => true]; + if ($this->metadata === null) { + $batch[OP_RECV_INITIAL_METADATA] = true; + } + $read_event = $this->call->startBatch($batch); + if ($this->metadata === null) { + $this->metadata = $read_event->metadata; + } + + return $this->_deserializeResponse($read_event->message); + } + + /** + * Write a single message to the server. This cannot be called after + * writesDone is called. + * + * @param ByteBuffer $data The data to write + * @param array $options An array of options, possible keys: + * 'flags' => a number (optional) + */ + public function write($data, array $options = []) + { + $message_array = ['message' => $this->_serializeMessage($data)]; + if (array_key_exists('flags', $options)) { + $message_array['flags'] = $options['flags']; + } + $this->call->startBatch([ + OP_SEND_MESSAGE => $message_array, + ]); + } + + /** + * Indicate that no more writes will be sent. + */ + public function writesDone() + { + $this->call->startBatch([ + OP_SEND_CLOSE_FROM_CLIENT => true, + ]); + } + + /** + * Wait for the server to send the status, and return it. + * + * @return \stdClass The status object, with integer $code, string + * $details, and array $metadata members + */ + public function getStatus() + { + $status_event = $this->call->startBatch([ + OP_RECV_STATUS_ON_CLIENT => true, + ]); + + $this->trailing_metadata = $status_event->status->metadata; + + return $status_event->status; + } +} diff --git a/vendor/grpc/grpc/src/lib/CallInvoker.php b/vendor/grpc/grpc/src/lib/CallInvoker.php new file mode 100644 index 0000000..aacd54e --- /dev/null +++ b/vendor/grpc/grpc/src/lib/CallInvoker.php @@ -0,0 +1,32 @@ +call->startBatch([ + OP_SEND_INITIAL_METADATA => $metadata, + ]); + } + + /** + * Write a single message to the server. This cannot be called after + * wait is called. + * + * @param ByteBuffer $data The data to write + * @param array $options An array of options, possible keys: + * 'flags' => a number (optional) + */ + public function write($data, array $options = []) + { + $message_array = ['message' => $this->_serializeMessage($data)]; + if (array_key_exists('flags', $options)) { + $message_array['flags'] = $options['flags']; + } + $this->call->startBatch([ + OP_SEND_MESSAGE => $message_array, + ]); + } + + /** + * Wait for the server to respond with data and a status. + * + * @return array [response data, status] + */ + public function wait() + { + $event = $this->call->startBatch([ + OP_SEND_CLOSE_FROM_CLIENT => true, + OP_RECV_INITIAL_METADATA => true, + OP_RECV_MESSAGE => true, + OP_RECV_STATUS_ON_CLIENT => true, + ]); + $this->metadata = $event->metadata; + + $status = $event->status; + $this->trailing_metadata = $status->metadata; + + return [$this->_deserializeResponse($event->message), $status]; + } +} diff --git a/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php b/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php new file mode 100644 index 0000000..217dafa --- /dev/null +++ b/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php @@ -0,0 +1,46 @@ += 0; $i--) { + $channel = new Internal\InterceptorChannel($channel, $interceptors[$i]); + } + } else { + $channel = new Internal\InterceptorChannel($channel, $interceptors); + } + return $channel; + } +} + diff --git a/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php b/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php new file mode 100644 index 0000000..2f85c35 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php @@ -0,0 +1,76 @@ +interceptor = $interceptor; + $this->next = $channel; + } + + public function getNext() + { + return $this->next; + } + + public function getInterceptor() + { + return $this->interceptor; + } + + public function getTarget() + { + return $this->getNext()->getTarget(); + } + + public function watchConnectivityState($new_state, $deadline) + { + return $this->getNext()->watchConnectivityState($new_state, $deadline); + } + + public function getConnectivityState($try_to_connect = false) + { + return $this->getNext()->getConnectivityState($try_to_connect); + } + + public function close() + { + return $this->getNext()->close(); + } +} diff --git a/vendor/grpc/grpc/src/lib/MethodDescriptor.php b/vendor/grpc/grpc/src/lib/MethodDescriptor.php new file mode 100644 index 0000000..c0faf75 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/MethodDescriptor.php @@ -0,0 +1,52 @@ +service = $service; + $this->method_name = $method_name; + $this->request_type = $request_type; + $this->call_type = $call_type; + } + + public const UNARY_CALL = 0; + public const SERVER_STREAMING_CALL = 1; + public const CLIENT_STREAMING_CALL = 2; + public const BIDI_STREAMING_CALL = 3; + + public $service; + public $method_name; + public $request_type; + public $call_type; +} diff --git a/vendor/grpc/grpc/src/lib/RpcServer.php b/vendor/grpc/grpc/src/lib/RpcServer.php new file mode 100644 index 0000000..c631e58 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/RpcServer.php @@ -0,0 +1,151 @@ + => MethodDescriptor ] + private $paths_map = []; + + private function waitForNextEvent() + { + return $this->requestCall(); + } + + /** + * Add a service to this server + * + * @param Object $service The service to be added + */ + public function handle($service) + { + $methodDescriptors = $service->getMethodDescriptors(); + $exist_methods = array_intersect_key($this->paths_map, $methodDescriptors); + if (!empty($exist_methods)) { + fwrite(STDERR, "WARNING: " . 'override already registered methods: ' . + implode(', ', array_keys($exist_methods)) . PHP_EOL); + } + + $this->paths_map = array_merge($this->paths_map, $methodDescriptors); + return $this->paths_map; + } + + public function run() + { + $this->start(); + while (true) try { + // This blocks until the server receives a request + $event = $this->waitForNextEvent(); + + $full_path = $event->method; + $context = new ServerContext($event); + $server_writer = new ServerCallWriter($event->call, $context); + + if (!array_key_exists($full_path, $this->paths_map)) { + $context->setStatus(Status::unimplemented()); + $server_writer->finish(); + continue; + }; + + $method_desc = $this->paths_map[$full_path]; + $server_reader = new ServerCallReader( + $event->call, + $method_desc->request_type + ); + + try { + $this->processCall( + $method_desc, + $server_reader, + $server_writer, + $context + ); + } catch (\Exception $e) { + $context->setStatus(Status::status( + STATUS_INTERNAL, + $e->getMessage() + )); + $server_writer->finish(); + } + } catch (\Exception $e) { + fwrite(STDERR, "ERROR: " . $e->getMessage() . PHP_EOL); + exit(1); + } + } + + private function processCall( + MethodDescriptor $method_desc, + ServerCallReader $server_reader, + ServerCallWriter $server_writer, + ServerContext $context + ) { + // Dispatch to actual server logic + switch ($method_desc->call_type) { + case MethodDescriptor::UNARY_CALL: + $request = $server_reader->read(); + $response = + call_user_func( + array($method_desc->service, $method_desc->method_name), + $request ?? new $method_desc->request_type, + $context + ); + $server_writer->finish($response); + break; + case MethodDescriptor::SERVER_STREAMING_CALL: + $request = $server_reader->read(); + call_user_func( + array($method_desc->service, $method_desc->method_name), + $request ?? new $method_desc->request_type, + $server_writer, + $context + ); + break; + case MethodDescriptor::CLIENT_STREAMING_CALL: + $response = call_user_func( + array($method_desc->service, $method_desc->method_name), + $server_reader, + $context + ); + $server_writer->finish($response); + break; + case MethodDescriptor::BIDI_STREAMING_CALL: + call_user_func( + array($method_desc->service, $method_desc->method_name), + $server_reader, + $server_writer, + $context + ); + break; + default: + throw new \Exception(); + } + } +} diff --git a/vendor/grpc/grpc/src/lib/ServerCallReader.php b/vendor/grpc/grpc/src/lib/ServerCallReader.php new file mode 100644 index 0000000..a886448 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/ServerCallReader.php @@ -0,0 +1,52 @@ +call_ = $call; + $this->request_type_ = $request_type; + } + + public function read() + { + $event = $this->call_->startBatch([ + OP_RECV_MESSAGE => true, + ]); + if ($event->message === null) { + return null; + } + $data = new $this->request_type_; + $data->mergeFromString($event->message); + return $data; + } + + private $call_; + private $request_type_; +} diff --git a/vendor/grpc/grpc/src/lib/ServerCallWriter.php b/vendor/grpc/grpc/src/lib/ServerCallWriter.php new file mode 100644 index 0000000..aceb20c --- /dev/null +++ b/vendor/grpc/grpc/src/lib/ServerCallWriter.php @@ -0,0 +1,109 @@ +call_ = $call; + $this->serverContext_ = $serverContext; + } + + public function start( + $data = null, + array $options = [] + ) { + $batch = []; + $this->addSendInitialMetadataOpIfNotSent( + $batch, + $this->serverContext_->initialMetadata() + ); + $this->addSendMessageOpIfHasData($batch, $data, $options); + $this->call_->startBatch($batch); + } + + public function write( + $data, + array $options = [] + ) { + $batch = []; + $this->addSendInitialMetadataOpIfNotSent( + $batch, + $this->serverContext_->initialMetadata() + ); + $this->addSendMessageOpIfHasData($batch, $data, $options); + $this->call_->startBatch($batch); + } + + public function finish( + $data = null, + array $options = [] + ) { + $batch = [ + OP_SEND_STATUS_FROM_SERVER => + $this->serverContext_->status() ?? Status::ok(), + OP_RECV_CLOSE_ON_SERVER => true, + ]; + $this->addSendInitialMetadataOpIfNotSent( + $batch, + $this->serverContext_->initialMetadata() + ); + $this->addSendMessageOpIfHasData($batch, $data, $options); + $this->call_->startBatch($batch); + } + + //////////////////////////// + + private function addSendInitialMetadataOpIfNotSent( + array &$batch, + array $initialMetadata = null + ) { + if (!$this->initialMetadataSent_) { + $batch[OP_SEND_INITIAL_METADATA] = $initialMetadata ?? []; + $this->initialMetadataSent_ = true; + } + } + + private function addSendMessageOpIfHasData( + array &$batch, + $data = null, + array $options = [] + ) { + if ($data) { + $message_array = ['message' => $data->serializeToString()]; + if (array_key_exists('flags', $options)) { + $message_array['flags'] = $options['flags']; + } + $batch[OP_SEND_MESSAGE] = $message_array; + } + } + + private $call_; + private $initialMetadataSent_ = false; + private $serverContext_; +} diff --git a/vendor/grpc/grpc/src/lib/ServerContext.php b/vendor/grpc/grpc/src/lib/ServerContext.php new file mode 100644 index 0000000..104250e --- /dev/null +++ b/vendor/grpc/grpc/src/lib/ServerContext.php @@ -0,0 +1,76 @@ +event = $event; + } + + public function clientMetadata() + { + return $this->event->metadata; + } + public function deadline() + { + return $this->event->absolute_deadline; + } + public function host() + { + return $this->event->host; + } + public function method() + { + return $this->event->method; + } + + public function setInitialMetadata($initialMetadata) + { + $this->initialMetadata_ = $initialMetadata; + } + + public function initialMetadata() + { + return $this->initialMetadata_; + } + + public function setStatus($status) + { + $this->status_ = $status; + } + + public function status() + { + return $this->status_; + } + + private $event; + private $initialMetadata_; + private $status_; +} diff --git a/vendor/grpc/grpc/src/lib/ServerStreamingCall.php b/vendor/grpc/grpc/src/lib/ServerStreamingCall.php new file mode 100644 index 0000000..f8fddfe --- /dev/null +++ b/vendor/grpc/grpc/src/lib/ServerStreamingCall.php @@ -0,0 +1,100 @@ + a number (optional) + */ + public function start($data, array $metadata = [], array $options = []) + { + $message_array = ['message' => $this->_serializeMessage($data)]; + if (array_key_exists('flags', $options)) { + $message_array['flags'] = $options['flags']; + } + $this->call->startBatch([ + OP_SEND_INITIAL_METADATA => $metadata, + OP_SEND_MESSAGE => $message_array, + OP_SEND_CLOSE_FROM_CLIENT => true, + ]); + } + + /** + * @return mixed An iterator of response values + */ + public function responses() + { + $batch = [OP_RECV_MESSAGE => true]; + if ($this->metadata === null) { + $batch[OP_RECV_INITIAL_METADATA] = true; + } + $read_event = $this->call->startBatch($batch); + if ($this->metadata === null) { + $this->metadata = $read_event->metadata; + } + $response = $read_event->message; + while ($response !== null) { + yield $this->_deserializeResponse($response); + $response = $this->call->startBatch([ + OP_RECV_MESSAGE => true, + ])->message; + } + } + + /** + * Wait for the server to send the status, and return it. + * + * @return \stdClass The status object, with integer $code, string + * $details, and array $metadata members + */ + public function getStatus() + { + $status_event = $this->call->startBatch([ + OP_RECV_STATUS_ON_CLIENT => true, + ]); + + $this->trailing_metadata = $status_event->status->metadata; + + return $status_event->status; + } + + /** + * @return mixed The metadata sent by the server + */ + public function getMetadata() + { + if ($this->metadata === null) { + $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]); + $this->metadata = $event->metadata; + } + return $this->metadata; + } +} diff --git a/vendor/grpc/grpc/src/lib/Status.php b/vendor/grpc/grpc/src/lib/Status.php new file mode 100644 index 0000000..add208f --- /dev/null +++ b/vendor/grpc/grpc/src/lib/Status.php @@ -0,0 +1,55 @@ + $code, + 'details' => $details, + ]; + if ($metadata) { + $status['metadata'] = $metadata; + } + return $status; + } + + public static function ok(array $metadata = null): array + { + return Status::status(STATUS_OK, 'OK', $metadata); + } + public static function unimplemented(): array + { + return Status::status(STATUS_UNIMPLEMENTED, 'UNIMPLEMENTED'); + } +} diff --git a/vendor/grpc/grpc/src/lib/UnaryCall.php b/vendor/grpc/grpc/src/lib/UnaryCall.php new file mode 100644 index 0000000..e849649 --- /dev/null +++ b/vendor/grpc/grpc/src/lib/UnaryCall.php @@ -0,0 +1,85 @@ + a number (optional) + */ + public function start($data, array $metadata = [], array $options = []) + { + $message_array = ['message' => $this->_serializeMessage($data)]; + if (isset($options['flags'])) { + $message_array['flags'] = $options['flags']; + } + $this->call->startBatch([ + OP_SEND_INITIAL_METADATA => $metadata, + OP_SEND_MESSAGE => $message_array, + OP_SEND_CLOSE_FROM_CLIENT => true, + ]); + } + + /** + * Wait for the server to respond with data and a status. + * + * @return array [response data, status] + */ + public function wait() + { + $batch = [ + OP_RECV_MESSAGE => true, + OP_RECV_STATUS_ON_CLIENT => true, + ]; + if ($this->metadata === null) { + $batch[OP_RECV_INITIAL_METADATA] = true; + } + $event = $this->call->startBatch($batch); + if ($this->metadata === null) { + $this->metadata = $event->metadata; + } + $status = $event->status; + $this->trailing_metadata = $status->metadata; + + return [$this->_deserializeResponse($event->message), $status]; + } + + /** + * @return mixed The metadata sent by the server + */ + public function getMetadata() + { + if ($this->metadata === null) { + $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]); + $this->metadata = $event->metadata; + } + return $this->metadata; + } +} diff --git a/vendor/passkit/vendor/autoload.php b/vendor/passkit/vendor/autoload.php new file mode 100644 index 0000000..f30641a --- /dev/null +++ b/vendor/passkit/vendor/autoload.php @@ -0,0 +1,12 @@ +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'); + exit(0); + } +} + +include __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'; diff --git a/vendor/passkit/vendor/bin/yaml-lint b/vendor/passkit/vendor/bin/yaml-lint new file mode 100755 index 0000000..9e7a09c --- /dev/null +++ b/vendor/passkit/vendor/bin/yaml-lint @@ -0,0 +1,117 @@ +#!/usr/bin/env php +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); + exit(0); + } +} + +include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/vendor/passkit/vendor/composer/ClassLoader.php b/vendor/passkit/vendor/composer/ClassLoader.php new file mode 100644 index 0000000..afef3fa --- /dev/null +++ b/vendor/passkit/vendor/composer/ClassLoader.php @@ -0,0 +1,572 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/passkit/vendor/composer/InstalledVersions.php b/vendor/passkit/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..41bc143 --- /dev/null +++ b/vendor/passkit/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/vendor/passkit/vendor/composer/LICENSE b/vendor/passkit/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/vendor/passkit/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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/vendor/passkit/vendor/composer/autoload_classmap.php b/vendor/passkit/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..0fb0a2c --- /dev/null +++ b/vendor/passkit/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/vendor/passkit/vendor/composer/autoload_files.php b/vendor/passkit/vendor/composer/autoload_files.php new file mode 100644 index 0000000..3f9c14a --- /dev/null +++ b/vendor/passkit/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', +); diff --git a/vendor/passkit/vendor/composer/autoload_namespaces.php b/vendor/passkit/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/vendor/passkit/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), + 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'), + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), + 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), +); diff --git a/vendor/passkit/vendor/composer/autoload_real.php b/vendor/passkit/vendor/composer/autoload_real.php new file mode 100644 index 0000000..2153148 --- /dev/null +++ b/vendor/passkit/vendor/composer/autoload_real.php @@ -0,0 +1,57 @@ +register(true); + + $includeFiles = \Composer\Autoload\ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$files; + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire74b98ee2f4bd7384740ddd7a14b12680($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire74b98ee2f4bd7384740ddd7a14b12680($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/vendor/passkit/vendor/composer/autoload_static.php b/vendor/passkit/vendor/composer/autoload_static.php new file mode 100644 index 0000000..d15d9c0 --- /dev/null +++ b/vendor/passkit/vendor/composer/autoload_static.php @@ -0,0 +1,84 @@ + __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\Finder\\' => 25, + ), + 'P' => + array ( + 'Psr\\Log\\' => 8, + 'Psr\\Cache\\' => 10, + ), + 'O' => + array ( + 'OpenApi\\' => 8, + ), + 'D' => + array ( + 'Doctrine\\Common\\Lexer\\' => 22, + 'Doctrine\\Common\\Annotations\\' => 28, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'Psr\\Log\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/log/src', + ), + 'Psr\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/cache/src', + ), + 'OpenApi\\' => + array ( + 0 => __DIR__ . '/..' . '/zircote/swagger-php/src', + ), + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', + ), + 'Doctrine\\Common\\Annotations\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/vendor/passkit/vendor/composer/installed.json b/vendor/passkit/vendor/composer/installed.json new file mode 100644 index 0000000..e25cb28 --- /dev/null +++ b/vendor/passkit/vendor/composer/installed.json @@ -0,0 +1,574 @@ +{ + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.13.2", + "version_normalized": "1.13.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "time": "2021-08-05T19:00:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "install-path": "../doctrine/annotations" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "version_normalized": "1.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "time": "2022-02-28T11:07:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "install-path": "../doctrine/lexer" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-02-03T23:26:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "install-path": "../psr/cache" + }, + { + "name": "psr/log", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-07-14T16:46:02+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "install-path": "../psr/log" + }, + { + "name": "symfony/finder", + "version": "v6.1.0", + "version_normalized": "6.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "time": "2022-04-15T08:08:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "version_normalized": "1.26.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2022-05-24T11:49:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/yaml", + "version": "v6.1.0", + "version_normalized": "6.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2022-04-15T14:25:02+00:00", + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/yaml" + }, + { + "name": "zircote/swagger-php", + "version": "4.4.5", + "version_normalized": "4.4.5.0", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.7", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || 3.0", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "time": "2022-06-02T21:05:02+00:00", + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.4.5" + }, + "install-path": "../zircote/swagger-php" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/passkit/vendor/composer/installed.php b/vendor/passkit/vendor/composer/installed.php new file mode 100644 index 0000000..3603bfa --- /dev/null +++ b/vendor/passkit/vendor/composer/installed.php @@ -0,0 +1,95 @@ + array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'name' => '__root__', + 'dev' => true, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'reference' => NULL, + 'dev_requirement' => false, + ), + 'doctrine/annotations' => array( + 'pretty_version' => '1.13.2', + 'version' => '1.13.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/annotations', + 'aliases' => array(), + 'reference' => '5b668aef16090008790395c02c893b1ba13f7e08', + 'dev_requirement' => false, + ), + 'doctrine/lexer' => array( + 'pretty_version' => '1.2.3', + 'version' => '1.2.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/lexer', + 'aliases' => array(), + 'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229', + 'dev_requirement' => false, + ), + 'psr/cache' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/cache', + 'aliases' => array(), + 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', + 'dev_requirement' => false, + ), + 'psr/log' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/log', + 'aliases' => array(), + 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', + 'dev_requirement' => false, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v6.1.0', + 'version' => '6.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'reference' => '45b8beb69d6eb3b05a65689ebfd4222326773f8f', + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.26.0', + 'version' => '1.26.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4', + 'dev_requirement' => false, + ), + 'symfony/yaml' => array( + 'pretty_version' => 'v6.1.0', + 'version' => '6.1.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/yaml', + 'aliases' => array(), + 'reference' => '84ce4f9d2d68f306f971a39d949d8f4b5550dba2', + 'dev_requirement' => false, + ), + 'zircote/swagger-php' => array( + 'pretty_version' => '4.4.5', + 'version' => '4.4.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../zircote/swagger-php', + 'aliases' => array(), + 'reference' => 'fd8f1eb8d0165c7a668f307fbccbf3adf33f4017', + 'dev_requirement' => false, + ), + ), +); diff --git a/vendor/passkit/vendor/composer/platform_check.php b/vendor/passkit/vendor/composer/platform_check.php new file mode 100644 index 0000000..4c3a5d6 --- /dev/null +++ b/vendor/passkit/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 80100)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/vendor/passkit/vendor/doctrine/annotations/LICENSE b/vendor/passkit/vendor/doctrine/annotations/LICENSE new file mode 100644 index 0000000..5e781fc --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2013 Doctrine Project + +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/vendor/passkit/vendor/doctrine/annotations/README.md b/vendor/passkit/vendor/doctrine/annotations/README.md new file mode 100644 index 0000000..c2c7eb7 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/README.md @@ -0,0 +1,18 @@ +# Doctrine Annotations + +[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) +[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) +[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) +[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) +[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) + +Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). + +## Documentation + +See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +## Contributing + +When making a pull request, make sure your changes follow the +[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/vendor/passkit/vendor/doctrine/annotations/composer.json b/vendor/passkit/vendor/doctrine/annotations/composer.json new file mode 100644 index 0000000..00d0231 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/composer.json @@ -0,0 +1,44 @@ +{ + "name": "doctrine/annotations", + "type": "library", + "description": "Docblock Annotations Parser", + "keywords": ["annotations", "docblock", "parser"], + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, + {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": "^7.1 || ^8.0", + "ext-tokenizer": "*", + "doctrine/lexer": "1.*", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "config": { + "sort-packages": true + }, + "autoload": { + "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } + }, + "autoload-dev": { + "psr-4": { + "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", + "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" + }, + "files": [ + "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", + "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" + ] + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst new file mode 100644 index 0000000..2c3c428 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst @@ -0,0 +1,252 @@ +Handling Annotations +==================== + +There are several different approaches to handling annotations in PHP. +Doctrine Annotations maps docblock annotations to PHP classes. Because +not all docblock annotations are used for metadata purposes a filter is +applied to ignore or skip classes that are not Doctrine annotations. + +Take a look at the following code snippet: + +.. code-block:: php + + namespace MyProject\Entities; + + use Doctrine\ORM\Mapping AS ORM; + use Symfony\Component\Validator\Constraints AS Assert; + + /** + * @author Benjamin Eberlei + * @ORM\Entity + * @MyProject\Annotations\Foobarable + */ + class User + { + /** + * @ORM\Id @ORM\Column @ORM\GeneratedValue + * @dummy + * @var int + */ + private $id; + + /** + * @ORM\Column(type="string") + * @Assert\NotEmpty + * @Assert\Email + * @var string + */ + private $email; + } + +In this snippet you can see a variety of different docblock annotations: + +- Documentation annotations such as ``@var`` and ``@author``. These + annotations are ignored and never considered for throwing an + exception due to wrongly used annotations. +- Annotations imported through use statements. The statement ``use + Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace + available as ``@ORM\ClassName``. Same goes for the import of + ``@Assert``. +- The ``@dummy`` annotation. It is not a documentation annotation and + not ignored. For Doctrine Annotations it is not entirely clear how + to handle this annotation. Depending on the configuration an exception + (unknown annotation) will be thrown when parsing this annotation. +- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. + This is transformed directly into the given class name. + +How are these annotations loaded? From looking at the code you could +guess that the ORM Mapping, Assert Validation and the fully qualified +annotation can just be loaded using +the defined PHP autoloaders. This is not the case however: For error +handling reasons every check for class existence inside the +``AnnotationReader`` sets the second parameter $autoload +of ``class_exists($name, $autoload)`` to false. To work flawlessly the +``AnnotationReader`` requires silent autoloaders which many autoloaders are +not. Silent autoloading is NOT part of the `PSR-0 specification +`_ +for autoloading. + +This is why Doctrine Annotations uses its own autoloading mechanism +through a global registry. If you are wondering about the annotation +registry being global, there is no other way to solve the architectural +problems of autoloading annotation classes in a straightforward fashion. +Additionally if you think about PHP autoloading then you recognize it is +a global as well. + +To anticipate the configuration section, making the above PHP class work +with Doctrine Annotations requires this setup: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); + AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); + AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); + + $reader = new AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('dummy'); + +The second block with the annotation registry calls registers all the +three different annotation namespaces that are used. +Doctrine Annotations saves all its annotations in a single file, that is +why ``AnnotationRegistry#registerFile`` is used in contrast to +``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 +compatible loading mechanism for class to file names. + +In the third block, we create the actual ``AnnotationReader`` instance. +Note that we also add ``dummy`` to the global list of ignored +annotations for which we do not throw exceptions. Setting this is +necessary in our example case, otherwise ``@dummy`` would trigger an +exception to be thrown during the parsing of the docblock of +``MyProject\Entities\User#id``. + +Setup and Configuration +----------------------- + +To use the annotations library is simple, you just need to create a new +``AnnotationReader`` instance: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + +This creates a simple annotation reader with no caching other than in +memory (in php arrays). Since parsing docblocks can be expensive you +should cache this process by using a caching reader. + +To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. +This reader decorates the original reader and stores all annotations in a PSR-6 +cache: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\PsrCachedReader; + + $cache = ... // instantiate a PSR-6 Cache pool + + $reader = new PsrCachedReader( + new AnnotationReader(), + $cache, + $debug = true + ); + +The ``debug`` flag is used here as well to invalidate the cache files +when the PHP class with annotations changed and should be used during +development. + +.. warning :: + + The ``AnnotationReader`` works and caches under the + assumption that all annotations of a doc-block are processed at + once. That means that annotation classes that do not exist and + aren't loaded and cannot be autoloaded (using the + AnnotationRegistry) would never be visible and not accessible if a + cache is used unless the cache is cleared and the annotations + requested again, this time with all annotations defined. + +By default the annotation reader returns a list of annotations with +numeric indexes. If you want your annotations to be indexed by their +class name you can wrap the reader in an ``IndexedReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\IndexedReader; + + $reader = new IndexedReader(new AnnotationReader()); + +.. warning:: + + You should never wrap the indexed reader inside a cached reader, + only the other way around. This way you can re-use the cache with + indexed or numeric keys, otherwise your code may experience failures + due to caching in a numerical or indexed format. + +Registering Annotations +~~~~~~~~~~~~~~~~~~~~~~~ + +As explained in the introduction, Doctrine Annotations uses its own +autoloading mechanism to determine if a given annotation has a +corresponding PHP class that can be autoloaded. For annotation +autoloading you have to configure the +``Doctrine\Common\Annotations\AnnotationRegistry``. There are three +different mechanisms to configure annotation autoloading: + +- Calling ``AnnotationRegistry#registerFile($file)`` to register a file + that contains one or more annotation classes. +- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = + null)`` to register that the given namespace contains annotations and + that their base directory is located at the given $dirs or in the + include path if ``NULL`` is passed. The given directories should *NOT* + be the directory where classes of the namespace are in, but the base + directory of the root namespace. The AnnotationRegistry uses a + namespace to directory separator approach to resolve the correct path. +- Calling ``AnnotationRegistry#registerLoader($callable)`` to register + an autoloader callback. The callback accepts the class as first and + only parameter and has to return ``true`` if the corresponding file + was found and included. + +.. note:: + + Loaders have to fail silently, if a class is not found even if it + matches for example the namespace prefix of that loader. Never is a + loader to throw a warning or exception if the loading failed + otherwise parsing doc block annotations will become a huge pain. + +A sample loader callback could look like: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationRegistry; + use Symfony\Component\ClassLoader\UniversalClassLoader; + + AnnotationRegistry::registerLoader(function($class) { + $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; + + if (file_exists("/my/base/path/" . $file)) { + // file_exists() makes sure that the loader fails silently + require "/my/base/path/" . $file; + } + }); + + $loader = new UniversalClassLoader(); + AnnotationRegistry::registerLoader(array($loader, "loadClass")); + + +Ignoring missing exceptions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default an exception is thrown from the ``AnnotationReader`` if an +annotation was found that: + +- is not part of the list of ignored "documentation annotations"; +- was not imported through a use statement; +- is not a fully qualified class that exists. + +You can disable this behavior for specific names if your docblocks do +not follow strict requirements: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('foo'); + +PHP Imports +~~~~~~~~~~~ + +By default the annotation reader parses the use-statement of a php file +to gain access to the import rules and register them for the annotation +processing. Only if you are using PHP Imports can you validate the +correct usage of annotations and throw exceptions if you misspelled an +annotation. This mechanism is enabled by default. + +To ease the upgrade path, we still allow you to disable this mechanism. +Note however that we will remove this in future versions: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setEnabledPhpImports(false); diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst new file mode 100644 index 0000000..11fbe1a --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst @@ -0,0 +1,443 @@ +Custom Annotation Classes +========================= + +If you want to define your own annotations, you just have to group them +in a namespace and register this namespace in the ``AnnotationRegistry``. +Annotation classes have to contain a class-level docblock with the text +``@Annotation``: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** @Annotation */ + class Bar + { + // some code + } + +Inject annotation values +------------------------ + +The annotation parser checks if the annotation constructor has arguments, +if so then it will pass the value array, otherwise it will try to inject +values into public properties directly: + + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * + * Some Annotation using a constructor + */ + class Bar + { + private $foo; + + public function __construct(array $values) + { + $this->foo = $values['foo']; + } + } + + /** + * @Annotation + * + * Some Annotation without a constructor + */ + class Foo + { + public $bar; + } + +Optional: Constructors with Named Parameters +-------------------------------------------- + +Starting with Annotations v1.11 a new annotation instantiation strategy +is available that aims at compatibility of Annotation classes with the PHP 8 +attribute feature. You need to declare a constructor with regular parameter +names that match the named arguments in the annotation syntax. + +To enable this feature, you can tag your annotation class with +``@NamedArgumentConstructor`` (available from v1.12) or implement the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface +(available from v1.11 and deprecated as of v1.12). +When using the ``@NamedArgumentConstructor`` tag, the first argument of the +constructor is considered as the default one. + + +Usage with the ``@NamedArgumentContrustor`` tag + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(string $foo) + { + $this->foo = $foo; + } + } + + /** Usable with @Bar(foo="baz") */ + /** Usable with @Bar("baz") */ + +In combination with PHP 8's constructor property promotion feature +you can simplify this to: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + public function __construct(private string $foo) {} + } + + +Usage with the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` +interface (v1.11, deprecated as of v1.12): +.. code-block:: php + + namespace MyCompany\Annotations; + + use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; + + /** @Annotation */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(private string $foo) {} + } + + /** Usable with @Bar(foo="baz") */ + +Annotation Target +----------------- + +``@Target`` indicates the kinds of class elements to which an annotation +type is applicable. Then you could define one or more targets: + +- ``CLASS`` Allowed in class docblocks +- ``PROPERTY`` Allowed in property docblocks +- ``METHOD`` Allowed in the method docblocks +- ``FUNCTION`` Allowed in function dockblocks +- ``ALL`` Allowed in class, property, method and function docblocks +- ``ANNOTATION`` Allowed inside other annotations + +If the annotations is not allowed in the current context, an +``AnnotationException`` is thrown. + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + // some code + } + + /** + * @Annotation + * @Target("CLASS") + */ + class Foo + { + // some code + } + +Attribute types +--------------- + +The annotation parser checks the given parameters using the phpdoc +annotation ``@var``, The data type could be validated using the ``@var`` +annotation on the annotation properties or using the ``@Attributes`` and +``@Attribute`` annotations. + +If the data type does not match you get an ``AnnotationException`` + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + /** @var mixed */ + public $mixed; + + /** @var boolean */ + public $boolean; + + /** @var bool */ + public $bool; + + /** @var float */ + public $float; + + /** @var string */ + public $string; + + /** @var integer */ + public $integer; + + /** @var array */ + public $array; + + /** @var SomeAnnotationClass */ + public $annotation; + + /** @var array */ + public $arrayOfIntegers; + + /** @var array */ + public $arrayOfAnnotations; + } + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + * @Attributes({ + * @Attribute("stringProperty", type = "string"), + * @Attribute("annotProperty", type = "SomeAnnotationClass"), + * }) + */ + class Foo + { + public function __construct(array $values) + { + $this->stringProperty = $values['stringProperty']; + $this->annotProperty = $values['annotProperty']; + } + + // some code + } + +Annotation Required +------------------- + +``@Required`` indicates that the field must be specified when the +annotation is used. If it is not used you get an ``AnnotationException`` +stating that this value can not be null. + +Declaring a required field: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Foo + { + /** @Required */ + public $requiredField; + } + +Usage: + +.. code-block:: php + + /** @Foo(requiredField="value") */ + public $direction; // Valid + + /** @Foo */ + public $direction; // Required field missing, throws an AnnotationException + + +Enumerated values +----------------- + +- An annotation property marked with ``@Enum`` is a field that accepts a + fixed set of scalar values. +- You should use ``@Enum`` fields any time you need to represent fixed + values. +- The annotation parser checks the given value and throws an + ``AnnotationException`` if the value does not match. + + +Declaring an enumerated property: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Direction + { + /** + * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) + */ + public $value; + } + +Annotation usage: + +.. code-block:: php + + /** @Direction("NORTH") */ + public $direction; // Valid value + + /** @Direction("NORTHEAST") */ + public $direction; // Invalid value, throws an AnnotationException + + +Constants +--------- + +The use of constants and class constants is available on the annotations +parser. + +The following usages are allowed: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + use MyCompany\Entity\SomeClass; + + /** + * @Foo(PHP_EOL) + * @Bar(Bar::FOO) + * @Foo({SomeClass::FOO, SomeClass::BAR}) + * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) + */ + class User + { + } + + +Be careful with constants and the cache ! + +.. note:: + + The cached reader will not re-evaluate each time an annotation is + loaded from cache. When a constant is changed the cache must be + cleaned. + + +Usage +----- + +Using the library API is simple. Using the annotations described in the +previous section, you can now annotate other classes with your +annotations: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + + /** + * @Foo(bar="foo") + * @Bar(foo="bar") + */ + class User + { + } + +Now we can write a script to get the annotations above: + +.. code-block:: php + + $reflClass = new ReflectionClass('MyCompany\Entity\User'); + $classAnnotations = $reader->getClassAnnotations($reflClass); + + foreach ($classAnnotations AS $annot) { + if ($annot instanceof \MyCompany\Annotations\Foo) { + echo $annot->bar; // prints "foo"; + } else if ($annot instanceof \MyCompany\Annotations\Bar) { + echo $annot->foo; // prints "bar"; + } + } + +You have a complete API for retrieving annotation class instances from a +class, property or method docblock: + + +Reader API +~~~~~~~~~~ + +Access all annotations of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotations(\ReflectionClass $class); + +Access one annotation of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotation(\ReflectionClass $class, $annotationName); + +Access all annotations of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotations(\ReflectionMethod $method); + +Access one annotation of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); + +Access all annotations of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotations(\ReflectionProperty $property); + +Access one annotation of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); + +Access all annotations of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotations(\ReflectionFunction $property); + +Access one annotation of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst new file mode 100644 index 0000000..95476c3 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst @@ -0,0 +1,101 @@ +Introduction +============ + +Doctrine Annotations allows to implement custom annotation +functionality for PHP classes and functions. + +.. code-block:: php + + class Foo + { + /** + * @MyAnnotation(myProperty="value") + */ + private $bar; + } + +Annotations aren't implemented in PHP itself which is why this component +offers a way to use the PHP doc-blocks as a place for the well known +annotation syntax using the ``@`` char. + +Annotations in Doctrine are used for the ORM configuration to build the +class mapping, but it can be used in other projects for other purposes +too. + +Installation +============ + +You can install the Annotation component with composer: + +.. code-block:: + +   $ composer require doctrine/annotations + +Create an annotation class +========================== + +An annotation class is a representation of the later used annotation +configuration in classes. The annotation class of the previous example +looks like this: + +.. code-block:: php + + /** + * @Annotation + */ + final class MyAnnotation + { + public $myProperty; + } + +The annotation class is declared as an annotation by ``@Annotation``. + +:ref:`Read more about custom annotations. ` + +Reading annotations +=================== + +The access to the annotations happens by reflection of the class or function +containing them. There are multiple reader-classes implementing the +``Doctrine\Common\Annotations\Reader`` interface, that can access the +annotations of a class. A common one is +``Doctrine\Common\Annotations\AnnotationReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + // Deprecated and will be removed in 2.0 but currently needed + AnnotationRegistry::registerLoader('class_exists'); + + $reflectionClass = new ReflectionClass(Foo::class); + $property = $reflectionClass->getProperty('bar'); + + $reader = new AnnotationReader(); + $myAnnotation = $reader->getPropertyAnnotation( + $property, + MyAnnotation::class + ); + + echo $myAnnotation->myProperty; // result: "value" + +Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works +if you already have an autoloader configured (i.e. composer autoloader). +Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. + +A reader has multiple methods to access the annotations of a class or +function. + +:ref:`Read more about handling annotations. ` + +IDE Support +----------- + +Some IDEs already provide support for annotations: + +- Eclipse via the `Symfony2 Plugin `_ +- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ + +.. _Read more about handling annotations.: annotations +.. _Read more about custom annotations.: custom diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst new file mode 100644 index 0000000..6f5d13c --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst @@ -0,0 +1,6 @@ +.. toctree:: + :depth: 3 + + index + annotations + custom diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php new file mode 100644 index 0000000..750270e --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php @@ -0,0 +1,59 @@ + $data Key-value for properties to be defined in this class. + */ + final public function __construct(array $data) + { + foreach ($data as $key => $value) { + $this->$key = $value; + } + } + + /** + * Error handler for unknown property accessor in Annotation class. + * + * @param string $name Unknown property name. + * + * @throws BadMethodCallException + */ + public function __get($name) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } + + /** + * Error handler for unknown property mutator in Annotation class. + * + * @param string $name Unknown property name. + * @param mixed $value Property value. + * + * @throws BadMethodCallException + */ + public function __set($name, $value) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php new file mode 100644 index 0000000..b1f8514 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php @@ -0,0 +1,21 @@ + */ + public $value; +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php new file mode 100644 index 0000000..35d6410 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php @@ -0,0 +1,69 @@ + */ + public $value; + + /** + * Literal target declaration. + * + * @var mixed[] + */ + public $literal; + + /** + * @throws InvalidArgumentException + * + * @phpstan-param array{literal?: mixed[], value: list} $values + */ + public function __construct(array $values) + { + if (! isset($values['literal'])) { + $values['literal'] = []; + } + + foreach ($values['value'] as $var) { + if (! is_scalar($var)) { + throw new InvalidArgumentException(sprintf( + '@Enum supports only scalar values "%s" given.', + is_object($var) ? get_class($var) : gettype($var) + )); + } + } + + foreach ($values['literal'] as $key => $var) { + if (! in_array($key, $values['value'])) { + throw new InvalidArgumentException(sprintf( + 'Undefined enumerator value "%s" for literal "%s".', + $key, + $var + )); + } + } + + $this->value = $values['value']; + $this->literal = $values['literal']; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php new file mode 100644 index 0000000..ae60f7d --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php @@ -0,0 +1,43 @@ + */ + public $names; + + /** + * @throws RuntimeException + * + * @phpstan-param array{value: string|list} $values + */ + public function __construct(array $values) + { + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new RuntimeException(sprintf( + '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', + json_encode($values['value']) + )); + } + + $this->names = $values['value']; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php new file mode 100644 index 0000000..1690601 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php @@ -0,0 +1,13 @@ + */ + private static $map = [ + 'ALL' => self::TARGET_ALL, + 'CLASS' => self::TARGET_CLASS, + 'METHOD' => self::TARGET_METHOD, + 'PROPERTY' => self::TARGET_PROPERTY, + 'FUNCTION' => self::TARGET_FUNCTION, + 'ANNOTATION' => self::TARGET_ANNOTATION, + ]; + + /** @phpstan-var list */ + public $value; + + /** + * Targets as bitmask. + * + * @var int + */ + public $targets; + + /** + * Literal target declaration. + * + * @var string + */ + public $literal; + + /** + * @throws InvalidArgumentException + * + * @phpstan-param array{value?: string|list} $values + */ + public function __construct(array $values) + { + if (! isset($values['value'])) { + $values['value'] = null; + } + + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new InvalidArgumentException( + sprintf( + '@Target expects either a string value, or an array of strings, "%s" given.', + is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) + ) + ); + } + + $bitmask = 0; + foreach ($values['value'] as $literal) { + if (! isset(self::$map[$literal])) { + throw new InvalidArgumentException( + sprintf( + 'Invalid Target "%s". Available targets: [%s]', + $literal, + implode(', ', array_keys(self::$map)) + ) + ); + } + + $bitmask |= self::$map[$literal]; + } + + $this->targets = $bitmask; + $this->value = $values['value']; + $this->literal = implode(', ', $this->value); + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php new file mode 100644 index 0000000..b1ea64e --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php @@ -0,0 +1,171 @@ + $available + */ + public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) + { + return new self(sprintf( + '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', + $attributeName, + $annotationName, + $context, + implode(', ', $available), + is_object($given) ? get_class($given) : $given + )); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusSaveComments() + { + return new self( + 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' + ); + } + + /** + * @return AnnotationException + */ + public static function optimizerPlusLoadComments() + { + return new self( + 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' + ); + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php new file mode 100644 index 0000000..1f538ee --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php @@ -0,0 +1,389 @@ + + */ + private static $globalImports = [ + 'ignoreannotation' => Annotation\IgnoreAnnotation::class, + ]; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNamespaces = []; + + /** + * Add a new annotation to the globally ignored annotation names with regard to exception handling. + * + * @param string $name + */ + public static function addGlobalIgnoredName($name) + { + self::$globalIgnoredNames[$name] = true; + } + + /** + * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. + * + * @param string $namespace + */ + public static function addGlobalIgnoredNamespace($namespace) + { + self::$globalIgnoredNamespaces[$namespace] = true; + } + + /** + * Annotations parser. + * + * @var DocParser + */ + private $parser; + + /** + * Annotations parser used to collect parsing metadata. + * + * @var DocParser + */ + private $preParser; + + /** + * PHP parser used to collect imports. + * + * @var PhpParser + */ + private $phpParser; + + /** + * In-memory cache mechanism to store imported annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $imports = []; + + /** + * In-memory cache mechanism to store ignored annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $ignoredAnnotationNames = []; + + /** + * Initializes a new AnnotationReader. + * + * @throws AnnotationException + */ + public function __construct(?DocParser $parser = null) + { + if ( + extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || + ini_get('opcache.save_comments') === '0') + ) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + // Make sure that the IgnoreAnnotation annotation is loaded + class_exists(IgnoreAnnotation::class); + + $this->parser = $parser ?: new DocParser(); + + $this->preParser = new DocParser(); + + $this->preParser->setImports(self::$globalImports); + $this->preParser->setIgnoreNotImportedAnnotations(true); + $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); + + $this->phpParser = new PhpParser(); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $this->parser->setTarget(Target::TARGET_CLASS); + $this->parser->setImports($this->getImports($class)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $context = 'property ' . $class->getName() . '::$' . $property->getName(); + + $this->parser->setTarget(Target::TARGET_PROPERTY); + $this->parser->setImports($this->getPropertyImports($property)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($property->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; + + $this->parser->setTarget(Target::TARGET_METHOD); + $this->parser->setImports($this->getMethodImports($method)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($method->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Gets the annotations applied to a function. + * + * @phpstan-return list An array of Annotations. + */ + public function getFunctionAnnotations(ReflectionFunction $function): array + { + $context = 'function ' . $function->getName(); + + $this->parser->setTarget(Target::TARGET_FUNCTION); + $this->parser->setImports($this->getImports($function)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($function->getDocComment(), $context); + } + + /** + * Gets a function annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) + { + $annotations = $this->getFunctionAnnotations($function); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Returns the ignored annotations for the given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getIgnoredAnnotationNames($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->ignoredAnnotationNames[$type][$name])) { + return $this->ignoredAnnotationNames[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->ignoredAnnotationNames[$type][$name]; + } + + /** + * Retrieves imports for a class or a function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getImports($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->imports[$type][$name])) { + return $this->imports[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->imports[$type][$name]; + } + + /** + * Retrieves imports for methods. + * + * @return array + */ + private function getMethodImports(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if ( + ! $trait->hasMethod($method->getName()) + || $trait->getFileName() !== $method->getFileName() + ) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Retrieves imports for properties. + * + * @return array + */ + private function getPropertyImports(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if (! $trait->hasProperty($property->getName())) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Collects parsing metadata for a given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + */ + private function collectParsingMetadata($reflection): void + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + $ignoredAnnotationNames = self::$globalIgnoredNames; + $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); + + foreach ($annotations as $annotation) { + if (! ($annotation instanceof IgnoreAnnotation)) { + continue; + } + + foreach ($annotation->names as $annot) { + $ignoredAnnotationNames[$annot] = true; + } + } + + $this->imports[$type][$name] = array_merge( + self::$globalImports, + $this->phpParser->parseUseStatements($reflection), + [ + '__NAMESPACE__' => $reflection->getNamespaceName(), + 'self' => $name, + ] + ); + + $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php new file mode 100644 index 0000000..259d497 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php @@ -0,0 +1,190 @@ +|null $dirs + */ + public static function registerAutoloadNamespace(string $namespace, $dirs = null): void + { + self::$autoloadNamespaces[$namespace] = $dirs; + } + + /** + * Registers multiple namespaces. + * + * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + * + * @param string[][]|string[]|null[] $namespaces indexed by namespace name + */ + public static function registerAutoloadNamespaces(array $namespaces): void + { + self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); + } + + /** + * Registers an autoloading callable for annotations, much like spl_autoload_register(). + * + * NOTE: These class loaders HAVE to be silent when a class was not found! + * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerLoader(callable $callable): void + { + // Reset our static cache now that we have a new loader to work with + self::$failedToAutoload = []; + self::$loaders[] = $callable; + } + + /** + * Registers an autoloading callable for annotations, if it is not already registered + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerUniqueLoader(callable $callable): void + { + if (in_array($callable, self::$loaders, true)) { + return; + } + + self::registerLoader($callable); + } + + /** + * Autoloads an annotation class silently. + */ + public static function loadAnnotationClass(string $class): bool + { + if (class_exists($class, false)) { + return true; + } + + if (array_key_exists($class, self::$failedToAutoload)) { + return false; + } + + foreach (self::$autoloadNamespaces as $namespace => $dirs) { + if (strpos($class, $namespace) !== 0) { + continue; + } + + $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; + + if ($dirs === null) { + $path = stream_resolve_include_path($file); + if ($path) { + require $path; + + return true; + } + } else { + foreach ((array) $dirs as $dir) { + if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { + require $dir . DIRECTORY_SEPARATOR . $file; + + return true; + } + } + } + } + + foreach (self::$loaders as $loader) { + if ($loader($class) === true) { + return true; + } + } + + if ( + self::$loaders === [] && + self::$autoloadNamespaces === [] && + self::$registerFileUsed === false && + class_exists($class) + ) { + return true; + } + + self::$failedToAutoload[$class] = null; + + return false; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php new file mode 100644 index 0000000..c036b2d --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php @@ -0,0 +1,268 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + /** + * @param bool $debug + */ + public function __construct(Reader $reader, Cache $cache, $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getClassAnnotations($class); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getPropertyAnnotations($property); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getMethodAnnotations($method); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** + * Fetches a value from the cache. + * + * @param string $cacheKey The cache key. + * + * @return mixed The cached value or false when the value is not in cache. + */ + private function fetchFromCache($cacheKey, ReflectionClass $class) + { + $data = $this->cache->fetch($cacheKey); + if ($data !== false) { + if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { + return $data; + } + } + + return false; + } + + /** + * Saves a value to the cache. + * + * @param string $cacheKey The cache key. + * @param mixed $value The value. + * + * @return void + */ + private function saveToCache($cacheKey, $value) + { + $this->cache->save($cacheKey, $value); + if (! $this->debug) { + return; + } + + $this->cache->save('[C]' . $cacheKey, time()); + } + + /** + * Checks if the cache is fresh. + * + * @param string $cacheKey + * + * @return bool + */ + private function isCacheFresh($cacheKey, ReflectionClass $class) + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php new file mode 100644 index 0000000..f6567c5 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php @@ -0,0 +1,129 @@ += 100 + public const T_IDENTIFIER = 100; + public const T_AT = 101; + public const T_CLOSE_CURLY_BRACES = 102; + public const T_CLOSE_PARENTHESIS = 103; + public const T_COMMA = 104; + public const T_EQUALS = 105; + public const T_FALSE = 106; + public const T_NAMESPACE_SEPARATOR = 107; + public const T_OPEN_CURLY_BRACES = 108; + public const T_OPEN_PARENTHESIS = 109; + public const T_TRUE = 110; + public const T_NULL = 111; + public const T_COLON = 112; + public const T_MINUS = 113; + + /** @var array */ + protected $noCase = [ + '@' => self::T_AT, + ',' => self::T_COMMA, + '(' => self::T_OPEN_PARENTHESIS, + ')' => self::T_CLOSE_PARENTHESIS, + '{' => self::T_OPEN_CURLY_BRACES, + '}' => self::T_CLOSE_CURLY_BRACES, + '=' => self::T_EQUALS, + ':' => self::T_COLON, + '-' => self::T_MINUS, + '\\' => self::T_NAMESPACE_SEPARATOR, + ]; + + /** @var array */ + protected $withCase = [ + 'true' => self::T_TRUE, + 'false' => self::T_FALSE, + 'null' => self::T_NULL, + ]; + + /** + * Whether the next token starts immediately, or if there were + * non-captured symbols before that + */ + public function nextTokenIsAdjacent(): bool + { + return $this->token === null + || ($this->lookahead !== null + && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); + } + + /** + * {@inheritdoc} + */ + protected function getCatchablePatterns() + { + return [ + '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', + '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', + '"(?:""|[^"])*+"', + ]; + } + + /** + * {@inheritdoc} + */ + protected function getNonCatchablePatterns() + { + return ['\s+', '\*+', '(.)']; + } + + /** + * {@inheritdoc} + */ + protected function getType(&$value) + { + $type = self::T_NONE; + + if ($value[0] === '"') { + $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); + + return self::T_STRING; + } + + if (isset($this->noCase[$value])) { + return $this->noCase[$value]; + } + + if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { + return self::T_IDENTIFIER; + } + + $lowerValue = strtolower($value); + + if (isset($this->withCase[$lowerValue])) { + return $this->withCase[$lowerValue]; + } + + // Checking numeric value + if (is_numeric($value)) { + return strpos($value, '.') !== false || stripos($value, 'e') !== false + ? self::T_FLOAT : self::T_INTEGER; + } + + return $type; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php new file mode 100644 index 0000000..ae530c5 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php @@ -0,0 +1,1459 @@ + + */ + private static $classIdentifiers = [ + DocLexer::T_IDENTIFIER, + DocLexer::T_TRUE, + DocLexer::T_FALSE, + DocLexer::T_NULL, + ]; + + /** + * The lexer. + * + * @var DocLexer + */ + private $lexer; + + /** + * Current target context. + * + * @var int + */ + private $target; + + /** + * Doc parser used to collect annotation target. + * + * @var DocParser + */ + private static $metadataParser; + + /** + * Flag to control if the current annotation is nested or not. + * + * @var bool + */ + private $isNestedAnnotation = false; + + /** + * Hashmap containing all use-statements that are to be used when parsing + * the given doc block. + * + * @var array + */ + private $imports = []; + + /** + * This hashmap is used internally to cache results of class_exists() + * look-ups. + * + * @var array + */ + private $classExists = []; + + /** + * Whether annotations that have not been imported should be ignored. + * + * @var bool + */ + private $ignoreNotImportedAnnotations = false; + + /** + * An array of default namespaces if operating in simple mode. + * + * @var string[] + */ + private $namespaces = []; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names must be the raw names as used in the class, not the fully qualified + * + * @var bool[] indexed by annotation name + */ + private $ignoredAnnotationNames = []; + + /** + * A list with annotations in namespaced format + * that are not causing exceptions when not resolved to an annotation class. + * + * @var bool[] indexed by namespace name + */ + private $ignoredAnnotationNamespaces = []; + + /** @var string */ + private $context = ''; + + /** + * Hash-map for caching annotation metadata. + * + * @var array + */ + private static $annotationMetadata = [ + Annotation\Target::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'properties' => [], + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'attribute_types' => [ + 'value' => [ + 'required' => false, + 'type' => 'array', + 'array_type' => 'string', + 'value' => 'array', + ], + ], + ], + Annotation\Attribute::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_ANNOTATION', + 'targets' => Target::TARGET_ANNOTATION, + 'default_property' => 'name', + 'properties' => [ + 'name' => 'name', + 'type' => 'type', + 'required' => 'required', + ], + 'attribute_types' => [ + 'value' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'type' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'required' => [ + 'required' => false, + 'type' => 'boolean', + 'value' => 'boolean', + ], + ], + ], + Annotation\Attributes::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + 'array_type' => Annotation\Attribute::class, + 'value' => 'array<' . Annotation\Attribute::class . '>', + ], + ], + ], + Annotation\Enum::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_PROPERTY', + 'targets' => Target::TARGET_PROPERTY, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + ], + 'literal' => [ + 'type' => 'array', + 'required' => false, + ], + ], + ], + Annotation\NamedArgumentConstructor::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => null, + 'properties' => [], + 'attribute_types' => [], + ], + ]; + + /** + * Hash-map for handle types declaration. + * + * @var array + */ + private static $typeMap = [ + 'float' => 'double', + 'bool' => 'boolean', + // allow uppercase Boolean in honor of George Boole + 'Boolean' => 'boolean', + 'int' => 'integer', + ]; + + /** + * Constructs a new DocParser. + */ + public function __construct() + { + $this->lexer = new DocLexer(); + } + + /** + * Sets the annotation names that are ignored during the parsing process. + * + * The names are supposed to be the raw names as used in the class, not the + * fully qualified class names. + * + * @param bool[] $names indexed by annotation name + * + * @return void + */ + public function setIgnoredAnnotationNames(array $names) + { + $this->ignoredAnnotationNames = $names; + } + + /** + * Sets the annotation namespaces that are ignored during the parsing process. + * + * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name + * + * @return void + */ + public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) + { + $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; + } + + /** + * Sets ignore on not-imported annotations. + * + * @param bool $bool + * + * @return void + */ + public function setIgnoreNotImportedAnnotations($bool) + { + $this->ignoreNotImportedAnnotations = (bool) $bool; + } + + /** + * Sets the default namespaces. + * + * @param string $namespace + * + * @return void + * + * @throws RuntimeException + */ + public function addNamespace($namespace) + { + if ($this->imports) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->namespaces[] = $namespace; + } + + /** + * Sets the imports. + * + * @param array $imports + * + * @return void + * + * @throws RuntimeException + */ + public function setImports(array $imports) + { + if ($this->namespaces) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->imports = $imports; + } + + /** + * Sets current target context as bitmask. + * + * @param int $target + * + * @return void + */ + public function setTarget($target) + { + $this->target = $target; + } + + /** + * Parses the given docblock string for annotations. + * + * @param string $input The docblock string to parse. + * @param string $context The parsing context. + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. + */ + public function parse($input, $context = '') + { + $pos = $this->findInitialTokenPosition($input); + if ($pos === null) { + return []; + } + + $this->context = $context; + + $this->lexer->setInput(trim(substr($input, $pos), '* /')); + $this->lexer->moveNext(); + + return $this->Annotations(); + } + + /** + * Finds the first valid annotation + * + * @param string $input The docblock string to parse + */ + private function findInitialTokenPosition($input): ?int + { + $pos = 0; + + // search for first valid annotation + while (($pos = strpos($input, '@', $pos)) !== false) { + $preceding = substr($input, $pos - 1, 1); + + // if the @ is preceded by a space, a tab or * it is valid + if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { + return $pos; + } + + $pos++; + } + + return null; + } + + /** + * Attempts to match the given token with the current lookahead token. + * If they match, updates the lookahead token; otherwise raises a syntax error. + * + * @param int $token Type of token. + * + * @return bool True if tokens match; false otherwise. + * + * @throws AnnotationException + */ + private function match(int $token): bool + { + if (! $this->lexer->isNextToken($token)) { + throw $this->syntaxError($this->lexer->getLiteral($token)); + } + + return $this->lexer->moveNext(); + } + + /** + * Attempts to match the current lookahead token with any of the given tokens. + * + * If any of them matches, this method updates the lookahead token; otherwise + * a syntax error is raised. + * + * @throws AnnotationException + * + * @phpstan-param list $tokens + */ + private function matchAny(array $tokens): bool + { + if (! $this->lexer->isNextTokenAny($tokens)) { + throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); + } + + return $this->lexer->moveNext(); + } + + /** + * Generates a new syntax error. + * + * @param string $expected Expected string. + * @param mixed[]|null $token Optional token. + */ + private function syntaxError(string $expected, ?array $token = null): AnnotationException + { + if ($token === null) { + $token = $this->lexer->lookahead; + } + + $message = sprintf('Expected %s, got ', $expected); + $message .= $this->lexer->lookahead === null + ? 'end of string' + : sprintf("'%s' at position %s", $token['value'], $token['position']); + + if (strlen($this->context)) { + $message .= ' in ' . $this->context; + } + + $message .= '.'; + + return AnnotationException::syntaxError($message); + } + + /** + * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism + * but uses the {@link AnnotationRegistry} to load classes. + * + * @param class-string $fqcn + */ + private function classExists(string $fqcn): bool + { + if (isset($this->classExists[$fqcn])) { + return $this->classExists[$fqcn]; + } + + // first check if the class already exists, maybe loaded through another AnnotationReader + if (class_exists($fqcn, false)) { + return $this->classExists[$fqcn] = true; + } + + // final check, does this class exist? + return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); + } + + /** + * Collects parsing metadata for a given annotation class + * + * @param class-string $name The annotation name + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function collectAnnotationMetadata(string $name): void + { + if (self::$metadataParser === null) { + self::$metadataParser = new self(); + + self::$metadataParser->setIgnoreNotImportedAnnotations(true); + self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); + self::$metadataParser->setImports([ + 'enum' => Enum::class, + 'target' => Target::class, + 'attribute' => Attribute::class, + 'attributes' => Attributes::class, + 'namedargumentconstructor' => NamedArgumentConstructor::class, + ]); + + // Make sure that annotations from metadata are loaded + class_exists(Enum::class); + class_exists(Target::class); + class_exists(Attribute::class); + class_exists(Attributes::class); + class_exists(NamedArgumentConstructor::class); + } + + $class = new ReflectionClass($name); + $docComment = $class->getDocComment(); + + // Sets default values for annotation metadata + $constructor = $class->getConstructor(); + $metadata = [ + 'default_property' => null, + 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, + 'constructor_args' => [], + 'properties' => [], + 'property_types' => [], + 'attribute_types' => [], + 'targets_literal' => null, + 'targets' => Target::TARGET_ALL, + 'is_annotation' => strpos($docComment, '@Annotation') !== false, + ]; + + $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] + && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); + + // verify that the class is really meant to be an annotation + if ($metadata['is_annotation']) { + self::$metadataParser->setTarget(Target::TARGET_CLASS); + + foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { + if ($annotation instanceof Target) { + $metadata['targets'] = $annotation->targets; + $metadata['targets_literal'] = $annotation->literal; + + continue; + } + + if ($annotation instanceof NamedArgumentConstructor) { + $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; + if ($metadata['has_named_argument_constructor']) { + // choose the first argument as the default property + $metadata['default_property'] = $constructor->getParameters()[0]->getName(); + } + } + + if (! ($annotation instanceof Attributes)) { + continue; + } + + foreach ($annotation->value as $attribute) { + $this->collectAttributeTypeMetadata($metadata, $attribute); + } + } + + // if not has a constructor will inject values into public properties + if ($metadata['has_constructor'] === false) { + // collect all public properties + foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { + $metadata['properties'][$property->name] = $property->name; + + $propertyComment = $property->getDocComment(); + if ($propertyComment === false) { + continue; + } + + $attribute = new Attribute(); + + $attribute->required = (strpos($propertyComment, '@Required') !== false); + $attribute->name = $property->name; + $attribute->type = (strpos($propertyComment, '@var') !== false && + preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) + ? $matches[1] + : 'mixed'; + + $this->collectAttributeTypeMetadata($metadata, $attribute); + + // checks if the property has @Enum + if (strpos($propertyComment, '@Enum') === false) { + continue; + } + + $context = 'property ' . $class->name . '::$' . $property->name; + + self::$metadataParser->setTarget(Target::TARGET_PROPERTY); + + foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { + if (! $annotation instanceof Enum) { + continue; + } + + $metadata['enum'][$property->name]['value'] = $annotation->value; + $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) + ? $annotation->literal + : $annotation->value; + } + } + + // choose the first property as default property + $metadata['default_property'] = reset($metadata['properties']); + } elseif ($metadata['has_named_argument_constructor']) { + foreach ($constructor->getParameters() as $parameter) { + $metadata['constructor_args'][$parameter->getName()] = [ + 'position' => $parameter->getPosition(), + 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, + ]; + } + } + } + + self::$annotationMetadata[$name] = $metadata; + } + + /** + * Collects parsing metadata for a given attribute. + * + * @param mixed[] $metadata + */ + private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void + { + // handle internal type declaration + $type = self::$typeMap[$attribute->type] ?? $attribute->type; + + // handle the case if the property type is mixed + if ($type === 'mixed') { + return; + } + + // Evaluate type + $pos = strpos($type, '<'); + if ($pos !== false) { + // Checks if the property has array + $arrayType = substr($type, $pos + 1, -1); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } else { + // Checks if the property has type[] + $pos = strrpos($type, '['); + if ($pos !== false) { + $arrayType = substr($type, 0, $pos); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } + } + + $metadata['attribute_types'][$attribute->name]['type'] = $type; + $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; + $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; + } + + /** + * Annotations ::= Annotation {[ "*" ]* [Annotation]}* + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return list + */ + private function Annotations(): array + { + $annotations = []; + + while ($this->lexer->lookahead !== null) { + if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is preceded by non-catchable pattern + if ( + $this->lexer->token !== null && + $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( + $this->lexer->token['value'] + ) + ) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is followed by either a namespace separator, or + // an identifier token + $peek = $this->lexer->glimpse(); + if ( + ($peek === null) + || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( + $peek['type'], + self::$classIdentifiers, + true + )) + || $peek['position'] !== $this->lexer->lookahead['position'] + 1 + ) { + $this->lexer->moveNext(); + continue; + } + + $this->isNestedAnnotation = false; + $annot = $this->Annotation(); + if ($annot === false) { + continue; + } + + $annotations[] = $annot; + } + + return $annotations; + } + + /** + * Annotation ::= "@" AnnotationName MethodCall + * AnnotationName ::= QualifiedName | SimpleName + * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName + * NameSpacePart ::= identifier | null | false | true + * SimpleName ::= identifier | null | false | true + * + * @return object|false False if it is not a valid annotation. + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Annotation() + { + $this->match(DocLexer::T_AT); + + // check if we have an annotation + $name = $this->Identifier(); + + if ( + $this->lexer->isNextToken(DocLexer::T_MINUS) + && $this->lexer->nextTokenIsAdjacent() + ) { + // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded + return false; + } + + // only process names which are not fully qualified, yet + // fully qualified names must start with a \ + $originalName = $name; + + if ($name[0] !== '\\') { + $pos = strpos($name, '\\'); + $alias = ($pos === false) ? $name : substr($name, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + if ($this->namespaces) { + foreach ($this->namespaces as $namespace) { + if ($this->classExists($namespace . '\\' . $name)) { + $name = $namespace . '\\' . $name; + $found = true; + break; + } + } + } elseif (isset($this->imports[$loweredAlias])) { + $namespace = ltrim($this->imports[$loweredAlias], '\\'); + $name = ($pos !== false) + ? $namespace . substr($name, $pos) + : $namespace; + $found = $this->classExists($name); + } elseif ( + ! isset($this->ignoredAnnotationNames[$name]) + && isset($this->imports['__NAMESPACE__']) + && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) + ) { + $name = $this->imports['__NAMESPACE__'] . '\\' . $name; + $found = true; + } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { + $found = true; + } + + if (! $found) { + if ($this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? +EXCEPTION + , + $name, + $this->context + )); + } + } + + $name = ltrim($name, '\\'); + + if (! $this->classExists($name)) { + throw AnnotationException::semanticalError(sprintf( + 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', + $name, + $this->context + )); + } + + // at this point, $name contains the fully qualified class name of the + // annotation, and it is also guaranteed that this class exists, and + // that it is loaded + + // collects the metadata annotation only if there is not yet + if (! isset(self::$annotationMetadata[$name])) { + $this->collectAnnotationMetadata($name); + } + + // verify that the class is really meant to be an annotation and not just any ordinary class + if (self::$annotationMetadata[$name]['is_annotation'] === false) { + if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The class "%s" is not annotated with @Annotation. +Are you sure this class can be used as annotation? +If so, then you need to add @Annotation to the _class_ doc comment of "%s". +If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. +EXCEPTION + , + $name, + $name, + $originalName, + $this->context + )); + } + + //if target is nested annotation + $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; + + // Next will be nested + $this->isNestedAnnotation = true; + + //if annotation does not support current target + if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { + throw AnnotationException::semanticalError( + sprintf( + <<<'EXCEPTION' +Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. +EXCEPTION + , + $originalName, + $this->context, + self::$annotationMetadata[$name]['targets_literal'] + ) + ); + } + + $arguments = $this->MethodCall(); + $values = $this->resolvePositionalValues($arguments, $name); + + if (isset(self::$annotationMetadata[$name]['enum'])) { + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { + // checks if the attribute is a valid enumerator + if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { + throw AnnotationException::enumeratorError( + $property, + $name, + $this->context, + $enum['literal'], + $values[$property] + ); + } + } + } + + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { + if ( + $property === self::$annotationMetadata[$name]['default_property'] + && ! isset($values[$property]) && isset($values['value']) + ) { + $property = 'value'; + } + + // handle a not given attribute or null value + if (! isset($values[$property])) { + if ($type['required']) { + throw AnnotationException::requiredError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'] + ); + } + + continue; + } + + if ($type['type'] === 'array') { + // handle the case of a single value + if (! is_array($values[$property])) { + $values[$property] = [$values[$property]]; + } + + // checks if the attribute has array type declaration, such as "array" + if (isset($type['array_type'])) { + foreach ($values[$property] as $item) { + if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', + $item + ); + } + } + } + } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'], + $values[$property] + ); + } + } + + if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { + if (PHP_VERSION_ID >= 80000) { + return new $name(...$values); + } + + $positionalValues = []; + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $positionalValues[$parameter['position']] = $parameter['default']; + } + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s" +that can be set through its named arguments constructor. +Available named arguments: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) + )); + } + + $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; + } + + return new $name(...$positionalValues); + } + + // check if the annotation expects values via the constructor, + // or directly injected into public properties + if (self::$annotationMetadata[$name]['has_constructor'] === true) { + return new $name($values); + } + + $instance = new $name(); + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { + if ($property !== 'value') { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s". +Available properties: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', self::$annotationMetadata[$name]['properties']) + )); + } + + // handle the case if the property has no annotations + $property = self::$annotationMetadata[$name]['default_property']; + if (! $property) { + throw AnnotationException::creationError(sprintf( + 'The annotation @%s declared on %s does not accept any values, but got %s.', + $originalName, + $this->context, + json_encode($values) + )); + } + } + + $instance->{$property} = $value; + } + + return $instance; + } + + /** + * MethodCall ::= ["(" [Values] ")"] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function MethodCall(): array + { + $values = []; + + if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { + return $values; + } + + $this->match(DocLexer::T_OPEN_PARENTHESIS); + + if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + $values = $this->Values(); + } + + $this->match(DocLexer::T_CLOSE_PARENTHESIS); + + return $values; + } + + /** + * Values ::= Array | Value {"," Value}* [","] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Values(): array + { + $values = [$this->Value()]; + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + break; + } + + $token = $this->lexer->lookahead; + $value = $this->Value(); + + $values[] = $value; + } + + $namedArguments = []; + $positionalArguments = []; + foreach ($values as $k => $value) { + if (is_object($value) && $value instanceof stdClass) { + $namedArguments[$value->name] = $value->value; + } else { + $positionalArguments[$k] = $value; + } + } + + return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; + } + + /** + * Constant ::= integer | string | float | boolean + * + * @return mixed + * + * @throws AnnotationException + */ + private function Constant() + { + $identifier = $this->Identifier(); + + if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { + [$className, $const] = explode('::', $identifier); + + $pos = strpos($className, '\\'); + $alias = ($pos === false) ? $className : substr($className, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + switch (true) { + case ! empty($this->namespaces): + foreach ($this->namespaces as $ns) { + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + break; + } + } + + break; + + case isset($this->imports[$loweredAlias]): + $found = true; + $className = ($pos !== false) + ? $this->imports[$loweredAlias] . substr($className, $pos) + : $this->imports[$loweredAlias]; + break; + + default: + if (isset($this->imports['__NAMESPACE__'])) { + $ns = $this->imports['__NAMESPACE__']; + + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + } + } + + break; + } + + if ($found) { + $identifier = $className . '::' . $const; + } + } + + /** + * Checks if identifier ends with ::class and remove the leading backslash if it exists. + */ + if ( + $this->identifierEndsWithClassConstant($identifier) && + ! $this->identifierStartsWithBackslash($identifier) + ) { + return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); + } + + if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { + return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); + } + + if (! defined($identifier)) { + throw AnnotationException::semanticalErrorConstants($identifier, $this->context); + } + + return constant($identifier); + } + + private function identifierStartsWithBackslash(string $identifier): bool + { + return $identifier[0] === '\\'; + } + + private function identifierEndsWithClassConstant(string $identifier): bool + { + return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); + } + + /** + * @return int|false + */ + private function getClassConstantPositionInIdentifier(string $identifier) + { + return stripos($identifier, '::class'); + } + + /** + * Identifier ::= string + * + * @throws AnnotationException + */ + private function Identifier(): string + { + // check if we have an annotation + if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { + throw $this->syntaxError('namespace separator or identifier'); + } + + $this->lexer->moveNext(); + + $className = $this->lexer->token['value']; + + while ( + $this->lexer->lookahead !== null && + $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + + strlen($this->lexer->token['value'])) && + $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) + ) { + $this->match(DocLexer::T_NAMESPACE_SEPARATOR); + $this->matchAny(self::$classIdentifiers); + + $className .= '\\' . $this->lexer->token['value']; + } + + return $className; + } + + /** + * Value ::= PlainValue | FieldAssignment + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Value() + { + $peek = $this->lexer->glimpse(); + + if ($peek['type'] === DocLexer::T_EQUALS) { + return $this->FieldAssignment(); + } + + return $this->PlainValue(); + } + + /** + * PlainValue ::= integer | string | float | boolean | Array | Annotation + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function PlainValue() + { + if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { + return $this->Arrayx(); + } + + if ($this->lexer->isNextToken(DocLexer::T_AT)) { + return $this->Annotation(); + } + + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + return $this->Constant(); + } + + switch ($this->lexer->lookahead['type']) { + case DocLexer::T_STRING: + $this->match(DocLexer::T_STRING); + + return $this->lexer->token['value']; + + case DocLexer::T_INTEGER: + $this->match(DocLexer::T_INTEGER); + + return (int) $this->lexer->token['value']; + + case DocLexer::T_FLOAT: + $this->match(DocLexer::T_FLOAT); + + return (float) $this->lexer->token['value']; + + case DocLexer::T_TRUE: + $this->match(DocLexer::T_TRUE); + + return true; + + case DocLexer::T_FALSE: + $this->match(DocLexer::T_FALSE); + + return false; + + case DocLexer::T_NULL: + $this->match(DocLexer::T_NULL); + + return null; + + default: + throw $this->syntaxError('PlainValue'); + } + } + + /** + * FieldAssignment ::= FieldName "=" PlainValue + * FieldName ::= identifier + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function FieldAssignment(): stdClass + { + $this->match(DocLexer::T_IDENTIFIER); + $fieldName = $this->lexer->token['value']; + + $this->match(DocLexer::T_EQUALS); + + $item = new stdClass(); + $item->name = $fieldName; + $item->value = $this->PlainValue(); + + return $item; + } + + /** + * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Arrayx(): array + { + $array = $values = []; + + $this->match(DocLexer::T_OPEN_CURLY_BRACES); + + // If the array is empty, stop parsing and return. + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + return $array; + } + + $values[] = $this->ArrayEntry(); + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + // optional trailing comma + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + break; + } + + $values[] = $this->ArrayEntry(); + } + + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + foreach ($values as $value) { + [$key, $val] = $value; + + if ($key !== null) { + $array[$key] = $val; + } else { + $array[] = $val; + } + } + + return $array; + } + + /** + * ArrayEntry ::= Value | KeyValuePair + * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant + * Key ::= string | integer | Constant + * + * @throws AnnotationException + * @throws ReflectionException + * + * @phpstan-return array{mixed, mixed} + */ + private function ArrayEntry(): array + { + $peek = $this->lexer->glimpse(); + + if ( + $peek['type'] === DocLexer::T_EQUALS + || $peek['type'] === DocLexer::T_COLON + ) { + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + $key = $this->Constant(); + } else { + $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); + $key = $this->lexer->token['value']; + } + + $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); + + return [$key, $this->PlainValue()]; + } + + return [null, $this->Value()]; + } + + /** + * Checks whether the given $name matches any ignored annotation name or namespace + */ + private function isIgnoredAnnotation(string $name): bool + { + if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { + return true; + } + + foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { + $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; + + if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { + return true; + } + } + + return false; + } + + /** + * Resolve positional arguments (without name) to named ones + * + * @param array $arguments + * + * @return array + */ + private function resolvePositionalValues(array $arguments, string $name): array + { + $positionalArguments = $arguments['positional_arguments'] ?? []; + $values = $arguments['named_arguments'] ?? []; + + if ( + self::$annotationMetadata[$name]['has_named_argument_constructor'] + && self::$annotationMetadata[$name]['default_property'] !== null + ) { + // We must ensure that we don't have positional arguments after named ones + $positions = array_keys($positionalArguments); + $lastPosition = null; + foreach ($positions as $position) { + if ( + ($lastPosition === null && $position !== 0) || + ($lastPosition !== null && $position !== $lastPosition + 1) + ) { + throw $this->syntaxError('Positional arguments after named arguments is not allowed'); + } + + $lastPosition = $position; + } + + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $position = $parameter['position']; + if (isset($values[$property]) || ! isset($positionalArguments[$position])) { + continue; + } + + $values[$property] = $positionalArguments[$position]; + } + } else { + if (count($positionalArguments) > 0 && ! isset($values['value'])) { + if (count($positionalArguments) === 1) { + $value = array_pop($positionalArguments); + } else { + $value = array_values($positionalArguments); + } + + $values['value'] = $value; + } + } + + return $values; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php new file mode 100644 index 0000000..6c6c22c --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php @@ -0,0 +1,315 @@ +> */ + private $loadedAnnotations = []; + + /** @var array */ + private $classNameHashes = []; + + /** @var int */ + private $umask; + + /** + * @param string $cacheDir + * @param bool $debug + * @param int $umask + * + * @throws InvalidArgumentException + */ + public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) + { + if (! is_int($umask)) { + throw new InvalidArgumentException(sprintf( + 'The parameter umask must be an integer, was: %s', + gettype($umask) + )); + } + + $this->reader = $reader; + $this->umask = $umask; + + if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { + throw new InvalidArgumentException(sprintf( + 'The directory "%s" does not exist and could not be created.', + $cacheDir + )); + } + + $this->dir = rtrim($cacheDir, '\\/'); + $this->debug = $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name]; + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * Saves the cache file. + * + * @param string $path + * @param mixed $data + * + * @return void + */ + private function saveCacheFile($path, $data) + { + if (! is_writable($this->dir)) { + throw new InvalidArgumentException(sprintf( + <<<'EXCEPTION' +The directory "%s" is not writable. Both the webserver and the console user need access. +You can manage access rights for multiple users with "chmod +a". +If your system does not support this, check out the acl package., +EXCEPTION + , + $this->dir + )); + } + + $tempfile = tempnam($this->dir, uniqid('', true)); + + if ($tempfile === false) { + throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); + } + + @chmod($tempfile, 0666 & (~$this->umask)); + + $written = file_put_contents( + $tempfile, + 'umask)); + + if (rename($tempfile, $path) === false) { + @unlink($tempfile); + + throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); + } + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php new file mode 100644 index 0000000..2efeb1d --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php @@ -0,0 +1,177 @@ + true, + 'Attribute' => true, + 'Attributes' => true, + /* Can we enable this? 'Enum' => true, */ + 'Required' => true, + 'Target' => true, + 'NamedArgumentConstructor' => true, + ]; + + private const WidelyUsedNonStandard = [ + 'fix' => true, + 'fixme' => true, + 'override' => true, + ]; + + private const PhpDocumentor1 = [ + 'abstract' => true, + 'access' => true, + 'code' => true, + 'deprec' => true, + 'endcode' => true, + 'exception' => true, + 'final' => true, + 'ingroup' => true, + 'inheritdoc' => true, + 'inheritDoc' => true, + 'magic' => true, + 'name' => true, + 'private' => true, + 'static' => true, + 'staticvar' => true, + 'staticVar' => true, + 'toc' => true, + 'tutorial' => true, + 'throw' => true, + ]; + + private const PhpDocumentor2 = [ + 'api' => true, + 'author' => true, + 'category' => true, + 'copyright' => true, + 'deprecated' => true, + 'example' => true, + 'filesource' => true, + 'global' => true, + 'ignore' => true, + /* Can we enable this? 'index' => true, */ + 'internal' => true, + 'license' => true, + 'link' => true, + 'method' => true, + 'package' => true, + 'param' => true, + 'property' => true, + 'property-read' => true, + 'property-write' => true, + 'return' => true, + 'see' => true, + 'since' => true, + 'source' => true, + 'subpackage' => true, + 'throws' => true, + 'todo' => true, + 'TODO' => true, + 'usedby' => true, + 'uses' => true, + 'var' => true, + 'version' => true, + ]; + + private const PHPUnit = [ + 'author' => true, + 'after' => true, + 'afterClass' => true, + 'backupGlobals' => true, + 'backupStaticAttributes' => true, + 'before' => true, + 'beforeClass' => true, + 'codeCoverageIgnore' => true, + 'codeCoverageIgnoreStart' => true, + 'codeCoverageIgnoreEnd' => true, + 'covers' => true, + 'coversDefaultClass' => true, + 'coversNothing' => true, + 'dataProvider' => true, + 'depends' => true, + 'doesNotPerformAssertions' => true, + 'expectedException' => true, + 'expectedExceptionCode' => true, + 'expectedExceptionMessage' => true, + 'expectedExceptionMessageRegExp' => true, + 'group' => true, + 'large' => true, + 'medium' => true, + 'preserveGlobalState' => true, + 'requires' => true, + 'runTestsInSeparateProcesses' => true, + 'runInSeparateProcess' => true, + 'small' => true, + 'test' => true, + 'testdox' => true, + 'testWith' => true, + 'ticket' => true, + 'uses' => true, + ]; + + private const PhpCheckStyle = ['SuppressWarnings' => true]; + + private const PhpStorm = ['noinspection' => true]; + + private const PEAR = ['package_version' => true]; + + private const PlainUML = [ + 'startuml' => true, + 'enduml' => true, + ]; + + private const Symfony = ['experimental' => true]; + + private const PhpCodeSniffer = [ + 'codingStandardsIgnoreStart' => true, + 'codingStandardsIgnoreEnd' => true, + ]; + + private const SlevomatCodingStandard = ['phpcsSuppress' => true]; + + private const Phan = ['suppress' => true]; + + private const Rector = ['noRector' => true]; + + private const StaticAnalysis = [ + // PHPStan, Psalm + 'extends' => true, + 'implements' => true, + 'template' => true, + 'use' => true, + + // Psalm + 'pure' => true, + 'immutable' => true, + ]; + + public const LIST = self::Reserved + + self::WidelyUsedNonStandard + + self::PhpDocumentor1 + + self::PhpDocumentor2 + + self::PHPUnit + + self::PhpCheckStyle + + self::PhpStorm + + self::PEAR + + self::PlainUML + + self::Symfony + + self::SlevomatCodingStandard + + self::PhpCodeSniffer + + self::Phan + + self::Rector + + self::StaticAnalysis; + + private function __construct() + { + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php new file mode 100644 index 0000000..42e7076 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php @@ -0,0 +1,100 @@ +delegate = $reader; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $annotations = []; + foreach ($this->delegate->getClassAnnotations($class) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotation) + { + return $this->delegate->getClassAnnotation($class, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $annotations = []; + foreach ($this->delegate->getMethodAnnotations($method) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotation) + { + return $this->delegate->getMethodAnnotation($method, $annotation); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $annotations = []; + foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotation) + { + return $this->delegate->getPropertyAnnotation($property, $annotation); + } + + /** + * Proxies all methods to the delegate. + * + * @param string $method + * @param mixed[] $args + * + * @return mixed + */ + public function __call($method, $args) + { + return call_user_func_array([$this->delegate, $method], $args); + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php new file mode 100644 index 0000000..8af224c --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php @@ -0,0 +1,14 @@ +ReflectionClass object. + * + * @return array A list with use statements in the form (Alias => FQN). + */ + public function parseClass(ReflectionClass $class) + { + return $this->parseUseStatements($class); + } + + /** + * Parse a class or function for use statements. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @psalm-return array a list with use statements in the form (Alias => FQN). + */ + public function parseUseStatements($reflection): array + { + if (method_exists($reflection, 'getUseStatements')) { + return $reflection->getUseStatements(); + } + + $filename = $reflection->getFileName(); + + if ($filename === false) { + return []; + } + + $content = $this->getFileContent($filename, $reflection->getStartLine()); + + if ($content === null) { + return []; + } + + $namespace = preg_quote($reflection->getNamespaceName()); + $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); + $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); + } + + /** + * Gets the content of the file right up to the given line number. + * + * @param string $filename The name of the file to load. + * @param int $lineNumber The number of lines to read from file. + * + * @return string|null The content of the file or null if the file does not exist. + */ + private function getFileContent($filename, $lineNumber) + { + if (! is_file($filename)) { + return null; + } + + $content = ''; + $lineCnt = 0; + $file = new SplFileObject($filename); + while (! $file->eof()) { + if ($lineCnt++ === $lineNumber) { + break; + } + + $content .= $file->fgets(); + } + + return $content; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php new file mode 100644 index 0000000..a7099d5 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php @@ -0,0 +1,232 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + public function clearLoadedAnnotations(): void + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** @return mixed[] */ + private function fetchFromCache( + string $cacheKey, + ReflectionClass $class, + string $method, + Reflector $reflector + ): array { + $cacheKey = rawurlencode($cacheKey); + + $item = $this->cache->getItem($cacheKey); + if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { + $this->cache->save($item->set($this->delegate->{$method}($reflector))); + } + + return $item->get(); + } + + /** + * Used in debug mode to check if the cache is fresh. + * + * @return bool Returns true if the cache was fresh, or false if the class + * being read was modified since writing to the cache. + */ + private function refresh(string $cacheKey, ReflectionClass $class): bool + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + $item = $this->cache->getItem('[C]' . $cacheKey); + if ($item->isHit() && $item->get() >= $lastModification) { + return true; + } + + $this->cache->save($item->set(time())); + + return false; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php new file mode 100644 index 0000000..0663ffd --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php @@ -0,0 +1,80 @@ + An array of Annotations. + */ + public function getClassAnnotations(ReflectionClass $class); + + /** + * Gets a class annotation. + * + * @param ReflectionClass $class The ReflectionClass of the class from which + * the class annotations should be read. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName); + + /** + * Gets the annotations applied to a method. + * + * @param ReflectionMethod $method The ReflectionMethod of the method from which + * the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getMethodAnnotations(ReflectionMethod $method); + + /** + * Gets a method annotation. + * + * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName); + + /** + * Gets the annotations applied to a property. + * + * @param ReflectionProperty $property The ReflectionProperty of the property + * from which the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getPropertyAnnotations(ReflectionProperty $property); + + /** + * Gets a property annotation. + * + * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php new file mode 100644 index 0000000..8a78c11 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php @@ -0,0 +1,114 @@ +parser = new DocParser(); + $this->parser->setIgnoreNotImportedAnnotations(true); + } + + /** + * Adds a namespace in which we will look for annotations. + * + * @param string $namespace + * + * @return void + */ + public function addNamespace($namespace) + { + $this->parser->addNamespace($namespace); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + return $this->parser->parse( + $method->getDocComment(), + 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' + ); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + return $this->parser->parse( + $property->getDocComment(), + 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() + ); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } +} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php new file mode 100644 index 0000000..9605fb8 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php @@ -0,0 +1,208 @@ + + */ + private $tokens; + + /** + * The number of tokens. + * + * @var int + */ + private $numTokens; + + /** + * The current array pointer. + * + * @var int + */ + private $pointer = 0; + + /** + * @param string $contents + */ + public function __construct($contents) + { + $this->tokens = token_get_all($contents); + + // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it + // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored + // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a + // docblock. If the first thing in the file is a class without a doc block this would cause calls to + // getDocBlock() on said class to return our long lost doc_comment. Argh. + // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least + // it's harmless to us. + token_get_all("numTokens = count($this->tokens); + } + + /** + * Gets the next non whitespace and non comment token. + * + * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. + * If FALSE then only whitespace and normal comments are skipped. + * + * @return mixed[]|string|null The token if exists, null otherwise. + */ + public function next($docCommentIsComment = true) + { + for ($i = $this->pointer; $i < $this->numTokens; $i++) { + $this->pointer++; + if ( + $this->tokens[$i][0] === T_WHITESPACE || + $this->tokens[$i][0] === T_COMMENT || + ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) + ) { + continue; + } + + return $this->tokens[$i]; + } + + return null; + } + + /** + * Parses a single use statement. + * + * @return array A list with all found class names for a use statement. + */ + public function parseUseStatement() + { + $groupRoot = ''; + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + while (($token = $this->next())) { + if (! $explicitAlias && $token[0] === T_STRING) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $token[0] === T_STRING) { + $alias = $token[1]; + } elseif ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + ) { + $class .= $token[1]; + + $classSplit = explode('\\', $token[1]); + $alias = $classSplit[count($classSplit) - 1]; + } elseif ($token[0] === T_NS_SEPARATOR) { + $class .= '\\'; + $alias = ''; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[strtolower($alias)] = $groupRoot . $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[strtolower($alias)] = $groupRoot . $class; + break; + } elseif ($token === '{') { + $groupRoot = $class; + $class = ''; + } elseif ($token === '}') { + continue; + } else { + break; + } + } + + return $statements; + } + + /** + * Gets all use statements. + * + * @param string $namespaceName The namespace name of the reflected class. + * + * @return array A list with all found use statements. + */ + public function parseUseStatements($namespaceName) + { + $statements = []; + while (($token = $this->next())) { + if ($token[0] === T_USE) { + $statements = array_merge($statements, $this->parseUseStatement()); + continue; + } + + if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { + continue; + } + + // Get fresh array for new namespace. This is to prevent the parser to collect the use statements + // for a previous namespace with the same name. This is the case if a namespace is defined twice + // or if a namespace with the same name is commented out. + $statements = []; + } + + return $statements; + } + + /** + * Gets the namespace. + * + * @return string The found namespace. + */ + public function parseNamespace() + { + $name = ''; + while ( + ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + )) + ) { + $name .= $token[1]; + } + + return $name; + } + + /** + * Gets the class name. + * + * @return string The found class name. + */ + public function parseClass() + { + // Namespaces and class names are tokenized the same: T_STRINGs + // separated by T_NS_SEPARATOR so we can use one function to provide + // both. + return $this->parseNamespace(); + } +} diff --git a/vendor/passkit/vendor/doctrine/lexer/LICENSE b/vendor/passkit/vendor/doctrine/lexer/LICENSE new file mode 100644 index 0000000..e8fdec4 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/lexer/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2018 Doctrine Project + +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/vendor/passkit/vendor/doctrine/lexer/README.md b/vendor/passkit/vendor/doctrine/lexer/README.md new file mode 100644 index 0000000..784f2a2 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/lexer/README.md @@ -0,0 +1,9 @@ +# Doctrine Lexer + +[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) + +Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. + +This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). + +https://www.doctrine-project.org/projects/lexer.html diff --git a/vendor/passkit/vendor/doctrine/lexer/composer.json b/vendor/passkit/vendor/doctrine/lexer/composer.json new file mode 100644 index 0000000..c435647 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/lexer/composer.json @@ -0,0 +1,41 @@ +{ + "name": "doctrine/lexer", + "type": "library", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "keywords": [ + "php", + "parser", + "lexer", + "annotations", + "docblock" + ], + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "autoload": { + "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } + }, + "autoload-dev": { + "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true + } +} diff --git a/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php new file mode 100644 index 0000000..7e8a11d --- /dev/null +++ b/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -0,0 +1,337 @@ + + */ + private $tokens = []; + + /** + * Current lexer position in input string. + * + * @var int + */ + private $position = 0; + + /** + * Current peek of current lexer position. + * + * @var int + */ + private $peek = 0; + + /** + * The next token in the input. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $lookahead; + + /** + * The last matched/seen token. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $token; + + /** + * Composed regex for input parsing. + * + * @var string|null + */ + private $regex; + + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = []; + + $this->reset(); + $this->scan($input); + } + + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } + + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } + + /** + * Resets the lexer position on the input to the given position. + * + * @param int $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } + + /** + * Retrieve the original lexer's input until a given position. + * + * @param int $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } + + /** + * Checks whether a given token matches the current lookahead. + * + * @param int|string $type + * + * @return bool + */ + public function isNextToken($type) + { + return $this->lookahead !== null && $this->lookahead['type'] === $type; + } + + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param list $types + * + * @return bool + */ + public function isNextTokenAny(array $types) + { + return $this->lookahead !== null && in_array($this->lookahead['type'], $types, true); + } + + /** + * Moves to the next token in the input string. + * + * @return bool + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = isset($this->tokens[$this->position]) + ? $this->tokens[$this->position++] : null; + + return $this->lookahead !== null; + } + + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } + + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param int|string $token + * + * @return bool + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } + + /** + * Moves the lookahead token forward. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } + + return null; + } + + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + + return $peek; + } + + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + if (! isset($this->regex)) { + $this->regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } + + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($this->regex, $input, -1, $flags); + + if ($matches === false) { + // Work around https://bugs.php.net/78122 + $matches = [[$input, 0]]; + } + + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); + + $this->tokens[] = [ + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ]; + } + } + + /** + * Gets the literal for a given token. + * + * @param int|string $token + * + * @return int|string + */ + public function getLiteral($token) + { + $className = static::class; + $reflClass = new ReflectionClass($className); + $constants = $reflClass->getConstants(); + + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } + + return $token; + } + + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } + + /** + * Lexical catchable patterns. + * + * @return string[] + */ + abstract protected function getCatchablePatterns(); + + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + abstract protected function getNonCatchablePatterns(); + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return int|string|null + */ + abstract protected function getType(&$value); +} diff --git a/vendor/passkit/vendor/doctrine/lexer/psalm.xml b/vendor/passkit/vendor/doctrine/lexer/psalm.xml new file mode 100644 index 0000000..f331e50 --- /dev/null +++ b/vendor/passkit/vendor/doctrine/lexer/psalm.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/vendor/passkit/vendor/psr/cache/CHANGELOG.md b/vendor/passkit/vendor/psr/cache/CHANGELOG.md new file mode 100644 index 0000000..58ddab0 --- /dev/null +++ b/vendor/passkit/vendor/psr/cache/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.1 - 2016-08-06 + +### Fixed + +- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr +- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr +- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell +- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell + +## 1.0.0 - 2015-12-11 + +Initial stable release; reflects accepted PSR-6 specification diff --git a/vendor/passkit/vendor/psr/cache/LICENSE.txt b/vendor/passkit/vendor/psr/cache/LICENSE.txt new file mode 100644 index 0000000..b1c2c97 --- /dev/null +++ b/vendor/passkit/vendor/psr/cache/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2015 PHP Framework Interoperability Group + +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/vendor/passkit/vendor/psr/cache/README.md b/vendor/passkit/vendor/psr/cache/README.md new file mode 100644 index 0000000..9855a31 --- /dev/null +++ b/vendor/passkit/vendor/psr/cache/README.md @@ -0,0 +1,12 @@ +Caching Interface +============== + +This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url]. + +Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism. + +The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. + +[psr-url]: https://www.php-fig.org/psr/psr-6/ +[package-url]: https://packagist.org/packages/psr/cache +[implementation-url]: https://packagist.org/providers/psr/cache-implementation diff --git a/vendor/passkit/vendor/psr/cache/composer.json b/vendor/passkit/vendor/psr/cache/composer.json new file mode 100644 index 0000000..4b68797 --- /dev/null +++ b/vendor/passkit/vendor/psr/cache/composer.json @@ -0,0 +1,25 @@ +{ + "name": "psr/cache", + "description": "Common interface for caching libraries", + "keywords": ["psr", "psr-6", "cache"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/vendor/passkit/vendor/psr/cache/src/CacheException.php b/vendor/passkit/vendor/psr/cache/src/CacheException.php new file mode 100644 index 0000000..bb785f4 --- /dev/null +++ b/vendor/passkit/vendor/psr/cache/src/CacheException.php @@ -0,0 +1,10 @@ +logger = $logger; + } + + public function doSomething() + { + if ($this->logger) { + $this->logger->info('Doing work'); + } + + try { + $this->doSomethingElse(); + } catch (Exception $exception) { + $this->logger->error('Oh no!', array('exception' => $exception)); + } + + // do something useful + } +} +``` + +You can then pick one of the implementations of the interface to get a logger. + +If you want to implement the interface, you can require this package and +implement `Psr\Log\LoggerInterface` in your code. Please read the +[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +for details. diff --git a/vendor/passkit/vendor/psr/log/composer.json b/vendor/passkit/vendor/psr/log/composer.json new file mode 100644 index 0000000..879fc6f --- /dev/null +++ b/vendor/passkit/vendor/psr/log/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/log", + "description": "Common interface for logging libraries", + "keywords": ["psr", "psr-3", "log"], + "homepage": "https://github.com/php-fig/log", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + } +} diff --git a/vendor/passkit/vendor/psr/log/src/AbstractLogger.php b/vendor/passkit/vendor/psr/log/src/AbstractLogger.php new file mode 100644 index 0000000..d60a091 --- /dev/null +++ b/vendor/passkit/vendor/psr/log/src/AbstractLogger.php @@ -0,0 +1,15 @@ +logger = $logger; + } +} diff --git a/vendor/passkit/vendor/psr/log/src/LoggerInterface.php b/vendor/passkit/vendor/psr/log/src/LoggerInterface.php new file mode 100644 index 0000000..b3a24b5 --- /dev/null +++ b/vendor/passkit/vendor/psr/log/src/LoggerInterface.php @@ -0,0 +1,125 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function alert(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function critical(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function error(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function warning(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function notice(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function info(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function debug(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::DEBUG, $message, $context); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + abstract public function log($level, string|\Stringable $message, array $context = []): void; +} diff --git a/vendor/passkit/vendor/psr/log/src/NullLogger.php b/vendor/passkit/vendor/psr/log/src/NullLogger.php new file mode 100644 index 0000000..c1cc3c0 --- /dev/null +++ b/vendor/passkit/vendor/psr/log/src/NullLogger.php @@ -0,0 +1,30 @@ +logger) { }` + * blocks. + */ +class NullLogger extends AbstractLogger +{ + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public function log($level, string|\Stringable $message, array $context = []): void + { + // noop + } +} diff --git a/vendor/passkit/vendor/symfony/finder/CHANGELOG.md b/vendor/passkit/vendor/symfony/finder/CHANGELOG.md new file mode 100644 index 0000000..9e2fc5a --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/CHANGELOG.md @@ -0,0 +1,92 @@ +CHANGELOG +========= + +6.0 +--- + + * Remove `Comparator::setTarget()` and `Comparator::setOperator()` + +5.4.0 +----- + + * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` + * Add a constructor to `Comparator` that allows setting target and operator + * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified + * Add recursive .gitignore files support + +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + +3.4.0 +----- + + * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` + * added Finder::hasResults() method to check if any results were found + +3.3.0 +----- + + * added double-star matching to Glob::toRegex() + +3.0.0 +----- + + * removed deprecated classes + +2.8.0 +----- + + * deprecated adapters and related classes + +2.5.0 +----- + * added support for GLOB_BRACE in the paths passed to Finder::in() + +2.3.0 +----- + + * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) + * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception + +2.2.0 +----- + + * added Finder::path() and Finder::notPath() methods + * added finder adapters to improve performance on specific platforms + * added support for wildcard characters (glob patterns) in the paths passed + to Finder::in() + +2.1.0 +----- + + * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and + Finder::sortByModifiedTime() + * added Countable to Finder + * added support for an array of directories as an argument to + Finder::exclude() + * added searching based on the file content via Finder::contains() and + Finder::notContains() + * added support for the != operator in the Comparator + * [BC BREAK] filter expressions (used for file name and content) are no more + considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php new file mode 100644 index 0000000..bd68583 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * @author Fabien Potencier + */ +class Comparator +{ + private string $target; + private string $operator; + + public function __construct(string $target, string $operator = '==') + { + if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { + throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); + } + + $this->target = $target; + $this->operator = $operator; + } + + /** + * Gets the target value. + */ + public function getTarget(): string + { + return $this->target; + } + + /** + * Gets the comparison operator. + */ + public function getOperator(): string + { + return $this->operator; + } + + /** + * Tests against the target. + */ + public function test(mixed $test): bool + { + return match ($this->operator) { + '>' => $test > $this->target, + '>=' => $test >= $this->target, + '<' => $test < $this->target, + '<=' => $test <= $this->target, + '!=' => $test != $this->target, + default => $test == $this->target, + }; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php new file mode 100644 index 0000000..159964d --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * DateCompare compiles date comparisons. + * + * @author Fabien Potencier + */ +class DateComparator extends Comparator +{ + /** + * @param string $test A comparison string + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); + } + + try { + $date = new \DateTime($matches[2]); + $target = $date->format('U'); + } catch (\Exception) { + throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); + } + + $operator = $matches[1] ?? '=='; + if ('since' === $operator || 'after' === $operator) { + $operator = '>'; + } + + if ('until' === $operator || 'before' === $operator) { + $operator = '<'; + } + + parent::__construct($target, $operator); + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php new file mode 100644 index 0000000..ff85d96 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * NumberComparator compiles a simple comparison to an anonymous + * subroutine, which you can call with a value to be tested again. + * + * Now this would be very pointless, if NumberCompare didn't understand + * magnitudes. + * + * The target value may use magnitudes of kilobytes (k, ki), + * megabytes (m, mi), or gigabytes (g, gi). Those suffixed + * with an i use the appropriate 2**n version in accordance with the + * IEC standard: http://physics.nist.gov/cuu/Units/binary.html + * + * Based on the Perl Number::Compare module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + * + * @see http://physics.nist.gov/cuu/Units/binary.html + */ +class NumberComparator extends Comparator +{ + /** + * @param string|int $test A comparison string or an integer + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(?string $test) + { + if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); + } + + $target = $matches[2]; + if (!is_numeric($target)) { + throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); + } + if (isset($matches[3])) { + // magnitude + switch (strtolower($matches[3])) { + case 'k': + $target *= 1000; + break; + case 'ki': + $target *= 1024; + break; + case 'm': + $target *= 1000000; + break; + case 'mi': + $target *= 1024 * 1024; + break; + case 'g': + $target *= 1000000000; + break; + case 'gi': + $target *= 1024 * 1024 * 1024; + break; + } + } + + parent::__construct($target, $matches[1] ?: '=='); + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php new file mode 100644 index 0000000..ee195ea --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Jean-François Simon + */ +class AccessDeniedException extends \UnexpectedValueException +{ +} diff --git a/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php new file mode 100644 index 0000000..c6cc0f2 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Andreas Erhard + */ +class DirectoryNotFoundException extends \InvalidArgumentException +{ +} diff --git a/vendor/passkit/vendor/symfony/finder/Finder.php b/vendor/passkit/vendor/symfony/finder/Finder.php new file mode 100644 index 0000000..4636f05 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Finder.php @@ -0,0 +1,798 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +use Symfony\Component\Finder\Comparator\DateComparator; +use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use Symfony\Component\Finder\Iterator\CustomFilterIterator; +use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; +use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use Symfony\Component\Finder\Iterator\SortableIterator; + +/** + * Finder allows to build rules to find files and directories. + * + * It is a thin wrapper around several specialized iterator classes. + * + * All rules may be invoked several times. + * + * All methods return the current Finder object to allow chaining: + * + * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class Finder implements \IteratorAggregate, \Countable +{ + public const IGNORE_VCS_FILES = 1; + public const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_IGNORED_FILES = 4; + + private int $mode = 0; + private array $names = []; + private array $notNames = []; + private array $exclude = []; + private array $filters = []; + private array $depths = []; + private array $sizes = []; + private bool $followLinks = false; + private bool $reverseSorting = false; + private \Closure|int|false $sort = false; + private int $ignore = 0; + private array $dirs = []; + private array $dates = []; + private array $iterators = []; + private array $contains = []; + private array $notContains = []; + private array $paths = []; + private array $notPaths = []; + private bool $ignoreUnreadableDirs = false; + + private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + + public function __construct() + { + $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; + } + + /** + * Creates a new Finder. + */ + public static function create(): static + { + return new static(); + } + + /** + * Restricts the matching to directories only. + * + * @return $this + */ + public function directories(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; + + return $this; + } + + /** + * Restricts the matching to files only. + * + * @return $this + */ + public function files(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; + + return $this; + } + + /** + * Adds tests for the directory depth. + * + * Usage: + * + * $finder->depth('> 1') // the Finder will start matching at level 1. + * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) + * + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels + * + * @return $this + * + * @see DepthRangeFilterIterator + * @see NumberComparator + */ + public function depth(string|int|array $levels): static + { + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } + + return $this; + } + + /** + * Adds tests for file dates (last modified). + * + * The date must be something that strtotime() is able to parse: + * + * $finder->date('since yesterday'); + * $finder->date('until 2 days ago'); + * $finder->date('> now - 2 hours'); + * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); + * + * @param string|string[] $dates A date range string or an array of date ranges + * + * @return $this + * + * @see strtotime + * @see DateRangeFilterIterator + * @see DateComparator + */ + public function date(string|array $dates): static + { + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } + + return $this; + } + + /** + * Adds rules that files must match. + * + * You can use patterns (delimited with / sign), globs or simple strings. + * + * $finder->name('*.php') + * $finder->name('/\.php$/') // same as above + * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function name(string|array $patterns): static + { + $this->names = array_merge($this->names, (array) $patterns); + + return $this; + } + + /** + * Adds rules that files must not match. + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notName(string|array $patterns): static + { + $this->notNames = array_merge($this->notNames, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must match. + * + * Strings or PCRE patterns can be used: + * + * $finder->contains('Lorem ipsum') + * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function contains(string|array $patterns): static + { + $this->contains = array_merge($this->contains, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must not match. + * + * Strings or PCRE patterns can be used: + * + * $finder->notContains('Lorem ipsum') + * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function notContains(string|array $patterns): static + { + $this->notContains = array_merge($this->notContains, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->path('some/special/dir') + * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function path(string|array $patterns): static + { + $this->paths = array_merge($this->paths, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must not match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->notPath('some/special/dir') + * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notPath(string|array $patterns): static + { + $this->notPaths = array_merge($this->notPaths, (array) $patterns); + + return $this; + } + + /** + * Adds tests for file sizes. + * + * $finder->size('> 10K'); + * $finder->size('<= 1Ki'); + * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) + * + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges + * + * @return $this + * + * @see SizeRangeFilterIterator + * @see NumberComparator + */ + public function size(string|int|array $sizes): static + { + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } + + return $this; + } + + /** + * Excludes directories. + * + * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: + * + * $finder->in(__DIR__)->exclude('ruby'); + * + * @param string|array $dirs A directory path or an array of directories + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function exclude(string|array $dirs): static + { + $this->exclude = array_merge($this->exclude, (array) $dirs); + + return $this; + } + + /** + * Excludes "hidden" directories and files (starting with a dot). + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreDotFiles(bool $ignoreDotFiles): static + { + if ($ignoreDotFiles) { + $this->ignore |= static::IGNORE_DOT_FILES; + } else { + $this->ignore &= ~static::IGNORE_DOT_FILES; + } + + return $this; + } + + /** + * Forces the finder to ignore version control directories. + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreVCS(bool $ignoreVCS): static + { + if ($ignoreVCS) { + $this->ignore |= static::IGNORE_VCS_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_FILES; + } + + return $this; + } + + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + + /** + * Adds VCS patterns. + * + * @see ignoreVCS() + * + * @param string|string[] $pattern VCS patterns to ignore + */ + public static function addVCSPattern(string|array $pattern) + { + foreach ((array) $pattern as $p) { + self::$vcsPatterns[] = $p; + } + + self::$vcsPatterns = array_unique(self::$vcsPatterns); + } + + /** + * Sorts files and directories by an anonymous function. + * + * The anonymous function receives two \SplFileInfo instances to compare. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sort(\Closure $closure): static + { + $this->sort = $closure; + + return $this; + } + + /** + * Sorts files and directories by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByName(bool $useNaturalSort = false): static + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; + + return $this; + } + + /** + * Sorts files and directories by type (directories before files), then by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByType(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; + + return $this; + } + + /** + * Sorts files and directories by the last accessed time. + * + * This is the time that the file was last accessed, read or written to. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByAccessedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; + + return $this; + } + + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting(): static + { + $this->reverseSorting = true; + + return $this; + } + + /** + * Sorts files and directories by the last inode changed time. + * + * This is the time that the inode information was last modified (permissions, owner, group or other metadata). + * + * On Windows, since inode is not available, changed time is actually the file creation time. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByChangedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; + + return $this; + } + + /** + * Sorts files and directories by the last modified time. + * + * This is the last time the actual contents of the file were last modified. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByModifiedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; + + return $this; + } + + /** + * Filters the iterator with an anonymous function. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @return $this + * + * @see CustomFilterIterator + */ + public function filter(\Closure $closure): static + { + $this->filters[] = $closure; + + return $this; + } + + /** + * Forces the following of symlinks. + * + * @return $this + */ + public function followLinks(): static + { + $this->followLinks = true; + + return $this; + } + + /** + * Tells finder to ignore unreadable directories. + * + * By default, scanning unreadable directories content throws an AccessDeniedException. + * + * @return $this + */ + public function ignoreUnreadableDirs(bool $ignore = true): static + { + $this->ignoreUnreadableDirs = $ignore; + + return $this; + } + + /** + * Searches files and directories which match defined rules. + * + * @param string|string[] $dirs A directory path or an array of directories + * + * @return $this + * + * @throws DirectoryNotFoundException if one of the directories does not exist + */ + public function in(string|array $dirs): static + { + $resolvedDirs = []; + + foreach ((array) $dirs as $dir) { + if (is_dir($dir)) { + $resolvedDirs[] = [$this->normalizeDir($dir)]; + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { + sort($glob); + $resolvedDirs[] = array_map($this->normalizeDir(...), $glob); + } else { + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); + } + } + + $this->dirs = array_merge($this->dirs, ...$resolvedDirs); + + return $this; + } + + /** + * Returns an Iterator for the current Finder configuration. + * + * This method implements the IteratorAggregate interface. + * + * @return \Iterator + * + * @throws \LogicException if the in() method has not been called + */ + public function getIterator(): \Iterator + { + if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { + throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); + } + + if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { + $iterator = $this->searchInDirectory($this->dirs[0]); + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + $iterator = new \AppendIterator(); + foreach ($this->dirs as $dir) { + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); + } + + foreach ($this->iterators as $it) { + $iterator->append($it); + } + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + /** + * Appends an existing set of files/directories to the finder. + * + * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. + * + * @return $this + * + * @throws \InvalidArgumentException when the given argument is not iterable + */ + public function append(iterable $iterator): static + { + if ($iterator instanceof \IteratorAggregate) { + $this->iterators[] = $iterator->getIterator(); + } elseif ($iterator instanceof \Iterator) { + $this->iterators[] = $iterator; + } elseif (is_iterable($iterator)) { + $it = new \ArrayIterator(); + foreach ($iterator as $file) { + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; + } + $this->iterators[] = $it; + } else { + throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); + } + + return $this; + } + + /** + * Check if any results were found. + */ + public function hasResults(): bool + { + foreach ($this->getIterator() as $_) { + return true; + } + + return false; + } + + /** + * Counts all the results collected by the iterators. + */ + public function count(): int + { + return iterator_count($this->getIterator()); + } + + private function searchInDirectory(string $dir): \Iterator + { + $exclude = $this->exclude; + $notPaths = $this->notPaths; + + if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { + $exclude = array_merge($exclude, self::$vcsPatterns); + } + + if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { + $notPaths[] = '#(^|/)\..+(/|$)#'; + } + + $minDepth = 0; + $maxDepth = \PHP_INT_MAX; + + foreach ($this->depths as $comparator) { + switch ($comparator->getOperator()) { + case '>': + $minDepth = $comparator->getTarget() + 1; + break; + case '>=': + $minDepth = $comparator->getTarget(); + break; + case '<': + $maxDepth = $comparator->getTarget() - 1; + break; + case '<=': + $maxDepth = $comparator->getTarget(); + break; + default: + $minDepth = $maxDepth = $comparator->getTarget(); + } + } + + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; + + if ($this->followLinks) { + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; + } + + $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); + + if ($exclude) { + $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); + } + + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + + if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { + $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); + } + + if ($this->mode) { + $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); + } + + if ($this->names || $this->notNames) { + $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); + } + + if ($this->contains || $this->notContains) { + $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); + } + + if ($this->sizes) { + $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); + } + + if ($this->dates) { + $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); + } + + if ($this->filters) { + $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); + } + + if ($this->paths || $notPaths) { + $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); + } + + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); + } + + return $iterator; + } + + /** + * Normalizes given directory names by removing trailing slashes. + * + * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper + */ + private function normalizeDir(string $dir): string + { + if ('/' === $dir) { + return $dir; + } + + $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); + + if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { + $dir .= '/'; + } + + return $dir; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Gitignore.php b/vendor/passkit/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000..070074b --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,93 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Michael Voříšek + * @author Ahmed Abdou + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * Format specification: https://git-scm.com/docs/gitignore#_pattern_format + */ + public static function toRegex(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, false); + } + + public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, true); + } + + private static function buildRegex(string $gitignoreFileContent, bool $inverted): string + { + $gitignoreFileContent = preg_replace('~(? + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Glob matches globbing patterns against text. + * + * if match_glob("foo.*", "foo.bar") echo "matched\n"; + * + * // prints foo.bar and foo.baz + * $regex = glob_to_regex("foo.*"); + * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) + * { + * if (/$regex/) echo "matched: $car\n"; + * } + * + * Glob implements glob(3) style matching that can be used to match + * against text, rather than fetching names from a filesystem. + * + * Based on the Perl Text::Glob module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + */ +class Glob +{ + /** + * Returns a regexp which is the equivalent of the glob pattern. + */ + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#'): string + { + $firstByte = true; + $escaping = false; + $inCurlies = 0; + $regex = ''; + $sizeGlob = \strlen($glob); + for ($i = 0; $i < $sizeGlob; ++$i) { + $car = $glob[$i]; + if ($firstByte && $strictLeadingDot && '.' !== $car) { + $regex .= '(?=[^\.])'; + } + + $firstByte = '/' === $car; + + if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { + $car = '[^/]++/'; + if (!isset($glob[$i + 3])) { + $car .= '?'; + } + + if ($strictLeadingDot) { + $car = '(?=[^\.])'.$car; + } + + $car = '/(?:'.$car.')*'; + $i += 2 + isset($glob[$i + 3]); + + if ('/' === $delimiter) { + $car = str_replace('/', '\\/', $car); + } + } + + if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { + $regex .= "\\$car"; + } elseif ('*' === $car) { + $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); + } elseif ('?' === $car) { + $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); + } elseif ('{' === $car) { + $regex .= $escaping ? '\\{' : '('; + if (!$escaping) { + ++$inCurlies; + } + } elseif ('}' === $car && $inCurlies) { + $regex .= $escaping ? '}' : ')'; + if (!$escaping) { + --$inCurlies; + } + } elseif (',' === $car && $inCurlies) { + $regex .= $escaping ? ',' : '|'; + } elseif ('\\' === $car) { + if ($escaping) { + $regex .= '\\\\'; + $escaping = false; + } else { + $escaping = true; + } + + continue; + } else { + $regex .= $car; + } + $escaping = false; + } + + return $delimiter.'^'.$regex.'$'.$delimiter; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php new file mode 100644 index 0000000..82ee81d --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * CustomFilterIterator filters files by applying anonymous functions. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class CustomFilterIterator extends \FilterIterator +{ + private array $filters = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param callable[] $filters An array of PHP callbacks + * + * @throws \InvalidArgumentException + */ + public function __construct(\Iterator $iterator, array $filters) + { + foreach ($filters as $filter) { + if (!\is_callable($filter)) { + throw new \InvalidArgumentException('Invalid PHP callback.'); + } + } + $this->filters = $filters; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + foreach ($this->filters as $filter) { + if (false === $filter($fileinfo)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php new file mode 100644 index 0000000..718d42b --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\DateComparator; + +/** + * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class DateRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param DateComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + if (!file_exists($fileinfo->getPathname())) { + return false; + } + + $filedate = $fileinfo->getMTime(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filedate)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php new file mode 100644 index 0000000..1cddb5f --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * DepthRangeFilterIterator limits the directory depth. + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +class DepthRangeFilterIterator extends \FilterIterator +{ + private int $minDepth = 0; + + /** + * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter + * @param int $minDepth The min depth + * @param int $maxDepth The max depth + */ + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) + { + $this->minDepth = $minDepth; + $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->getInnerIterator()->getDepth() >= $this->minDepth; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php new file mode 100644 index 0000000..efe9364 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * ExcludeDirectoryFilterIterator filters out directories. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + * @implements \RecursiveIterator + */ +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator +{ + /** @var \Iterator */ + private \Iterator $iterator; + private bool $isRecursive; + private array $excludedDirs = []; + private ?string $excludedPattern = null; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $directories An array of directories to exclude + */ + public function __construct(\Iterator $iterator, array $directories) + { + $this->iterator = $iterator; + $this->isRecursive = $iterator instanceof \RecursiveIterator; + $patterns = []; + foreach ($directories as $directory) { + $directory = rtrim($directory, '/'); + if (!$this->isRecursive || str_contains($directory, '/')) { + $patterns[] = preg_quote($directory, '#'); + } else { + $this->excludedDirs[$directory] = true; + } + } + if ($patterns) { + $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; + } + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { + return false; + } + + if ($this->excludedPattern) { + $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); + $path = str_replace('\\', '/', $path); + + return !preg_match($this->excludedPattern, $path); + } + + return true; + } + + public function hasChildren(): bool + { + return $this->isRecursive && $this->iterator->hasChildren(); + } + + public function getChildren(): self + { + $children = new self($this->iterator->getChildren(), []); + $children->excludedDirs = $this->excludedDirs; + $children->excludedPattern = $this->excludedPattern; + + return $children; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php new file mode 100644 index 0000000..2130378 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FileTypeFilterIterator only keeps files, directories, or both. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class FileTypeFilterIterator extends \FilterIterator +{ + public const ONLY_FILES = 1; + public const ONLY_DIRECTORIES = 2; + + private int $mode; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) + */ + public function __construct(\Iterator $iterator, int $mode) + { + $this->mode = $mode; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + return false; + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + return false; + } + + return true; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php new file mode 100644 index 0000000..bdc71ff --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class FilecontentFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if (!$this->matchRegexps && !$this->noMatchRegexps) { + return true; + } + + $fileinfo = $this->current(); + + if ($fileinfo->isDir() || !$fileinfo->isReadable()) { + return false; + } + + $content = $fileinfo->getContents(); + if (!$content) { + return false; + } + + return $this->isAccepted($content); + } + + /** + * Converts string to regexp if necessary. + * + * @param string $str Pattern: string or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php new file mode 100644 index 0000000..05d9535 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Glob; + +/** + * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). + * + * @author Fabien Potencier + * + * @extends MultiplePcreFilterIterator + */ +class FilenameFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->isAccepted($this->current()->getFilename()); + } + + /** + * Converts glob to regexp. + * + * PCRE patterns are left unchanged. + * Glob strings are transformed with Glob::toRegex(). + * + * @param string $str Pattern: glob or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : Glob::toRegex($str); + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000..5b5806b --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private \Closure $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory(...); + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php new file mode 100644 index 0000000..82a9df3 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +abstract class MultiplePcreFilterIterator extends \FilterIterator +{ + protected $matchRegexps = []; + protected $noMatchRegexps = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match + */ + public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) + { + foreach ($matchPatterns as $pattern) { + $this->matchRegexps[] = $this->toRegex($pattern); + } + + foreach ($noMatchPatterns as $pattern) { + $this->noMatchRegexps[] = $this->toRegex($pattern); + } + + parent::__construct($iterator); + } + + /** + * Checks whether the string is accepted by the regex filters. + * + * If there is no regexps defined in the class, this method will accept the string. + * Such case can be handled by child classes before calling the method if they want to + * apply a different behavior. + */ + protected function isAccepted(string $string): bool + { + // should at least not match one rule to exclude + foreach ($this->noMatchRegexps as $regex) { + if (preg_match($regex, $string)) { + return false; + } + } + + // should at least match one rule + if ($this->matchRegexps) { + foreach ($this->matchRegexps as $regex) { + if (preg_match($regex, $string)) { + return true; + } + } + + return false; + } + + // If there is no match rules, the file is accepted + return true; + } + + /** + * Checks whether the string is a regex. + */ + protected function isRegex(string $str): bool + { + $availableModifiers = 'imsxuADU'; + + if (\PHP_VERSION_ID >= 80200) { + $availableModifiers .= 'n'; + } + + if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { + $start = substr($m[1], 0, 1); + $end = substr($m[1], -1); + + if ($start === $end) { + return !preg_match('/[*?[:alnum:] \\\\]/', $start); + } + + foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { + if ($start === $delimiters[0] && $end === $delimiters[1]) { + return true; + } + } + } + + return false; + } + + /** + * Converts string into regexp. + */ + abstract protected function toRegex(string $str): string; +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php new file mode 100644 index 0000000..c6d5813 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * PathFilterIterator filters files by path patterns (e.g. some/special/dir). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class PathFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $filename = $this->current()->getRelativePathname(); + + if ('\\' === \DIRECTORY_SEPARATOR) { + $filename = str_replace('\\', '/', $filename); + } + + return $this->isAccepted($filename); + } + + /** + * Converts strings to regexp. + * + * PCRE patterns are left unchanged. + * + * Default conversion: + * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' + * + * Use only / as directory separator (on Windows also). + * + * @param string $str Pattern: regexp or dirname + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php new file mode 100644 index 0000000..c321aee --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -0,0 +1,146 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Exception\AccessDeniedException; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Extends the \RecursiveDirectoryIterator to support relative paths. + * + * @author Victor Berchet + * @extends \RecursiveDirectoryIterator + */ +class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator +{ + private bool $ignoreUnreadableDirs; + private ?bool $rewindable = null; + + // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations + private string $rootPath; + private string $subPath; + private string $directorySeparator = '/'; + + /** + * @throws \RuntimeException + */ + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) + { + if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { + throw new \RuntimeException('This iterator only support returning current as fileinfo.'); + } + + parent::__construct($path, $flags); + $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; + $this->rootPath = $path; + if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { + $this->directorySeparator = \DIRECTORY_SEPARATOR; + } + } + + /** + * Return an instance of SplFileInfo with support for relative paths. + */ + public function current(): SplFileInfo + { + // the logic here avoids redoing the same work in all iterations + + if (!isset($this->subPath)) { + $this->subPath = $this->getSubPath(); + } + $subPathname = $this->subPath; + if ('' !== $subPathname) { + $subPathname .= $this->directorySeparator; + } + $subPathname .= $this->getFilename(); + + if ('/' !== $basePath = $this->rootPath) { + $basePath .= $this->directorySeparator; + } + + return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); + } + + public function hasChildren(bool $allowLinks = false): bool + { + $hasChildren = parent::hasChildren($allowLinks); + + if (!$hasChildren || !$this->ignoreUnreadableDirs) { + return $hasChildren; + } + + try { + parent::getChildren(); + + return true; + } catch (\UnexpectedValueException) { + // If directory is unreadable and finder is set to ignore it, skip children + return false; + } + } + + /** + * @throws AccessDeniedException + */ + public function getChildren(): \RecursiveDirectoryIterator + { + try { + $children = parent::getChildren(); + + if ($children instanceof self) { + // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore + $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; + + // performance optimization to avoid redoing the same work in all children + $children->rewindable = &$this->rewindable; + $children->rootPath = $this->rootPath; + } + + return $children; + } catch (\UnexpectedValueException $e) { + throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * Do nothing for non rewindable stream. + */ + public function rewind(): void + { + if (false === $this->isRewindable()) { + return; + } + + parent::rewind(); + } + + /** + * Checks if the stream is rewindable. + */ + public function isRewindable(): bool + { + if (null !== $this->rewindable) { + return $this->rewindable; + } + + if (false !== $stream = @opendir($this->getPath())) { + $infos = stream_get_meta_data($stream); + closedir($stream); + + if ($infos['seekable']) { + return $this->rewindable = true; + } + } + + return $this->rewindable = false; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php new file mode 100644 index 0000000..925830a --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\NumberComparator; + +/** + * SizeRangeFilterIterator filters out files that are not in the given size range. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class SizeRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param NumberComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (!$fileinfo->isFile()) { + return true; + } + + $filesize = $fileinfo->getSize(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filesize)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php new file mode 100644 index 0000000..1c663e2 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * SortableIterator applies a sort on a given Iterator. + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class SortableIterator implements \IteratorAggregate +{ + public const SORT_BY_NONE = 0; + public const SORT_BY_NAME = 1; + public const SORT_BY_TYPE = 2; + public const SORT_BY_ACCESSED_TIME = 3; + public const SORT_BY_CHANGED_TIME = 4; + public const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NAME_NATURAL = 6; + + /** @var \Traversable $iterator */ + private \Traversable $iterator; + private \Closure|int $sort; + + /** + * @param \Traversable $iterator + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * + * @throws \InvalidArgumentException + */ + public function __construct(\Traversable $iterator, int|callable $sort, bool $reverseOrder = false) + { + $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; + + if (self::SORT_BY_NAME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_TYPE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + if ($a->isDir() && $b->isFile()) { + return -$order; + } elseif ($a->isFile() && $b->isDir()) { + return $order; + } + + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); + }; + } elseif (self::SORT_BY_CHANGED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); + }; + } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); + }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; + } elseif (\is_callable($sort)) { + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); + } else { + throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); + } + } + + public function getIterator(): \Traversable + { + if (1 === $this->sort) { + return $this->iterator; + } + + $array = iterator_to_array($this->iterator, true); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } + + return new \ArrayIterator($array); + } +} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php new file mode 100644 index 0000000..29fc2d9 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -0,0 +1,178 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Gitignore; + +/** + * @extends \FilterIterator + */ +final class VcsIgnoredFilterIterator extends \FilterIterator +{ + /** + * @var string + */ + private $baseDir; + + /** + * @var array + */ + private $gitignoreFilesCache = []; + + /** + * @var array + */ + private $ignoredPathsCache = []; + + /** + * @param \Iterator $iterator + */ + public function __construct(\Iterator $iterator, string $baseDir) + { + $this->baseDir = $this->normalizePath($baseDir); + + foreach ($this->parentDirectoriesUpwards($this->baseDir) as $parentDirectory) { + if (@is_dir("{$parentDirectory}/.git")) { + $this->baseDir = $parentDirectory; + break; + } + } + + parent::__construct($iterator); + } + + public function accept(): bool + { + $file = $this->current(); + + $fileRealPath = $this->normalizePath($file->getRealPath()); + + return !$this->isIgnored($fileRealPath); + } + + private function isIgnored(string $fileRealPath): bool + { + if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { + $fileRealPath .= '/'; + } + + if (isset($this->ignoredPathsCache[$fileRealPath])) { + return $this->ignoredPathsCache[$fileRealPath]; + } + + $ignored = false; + + foreach ($this->parentDirectoriesDownwards($fileRealPath) as $parentDirectory) { + if ($this->isIgnored($parentDirectory)) { + // rules in ignored directories are ignored, no need to check further. + break; + } + + $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); + + if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { + continue; + } + + [$exclusionRegex, $inclusionRegex] = $regexps; + + if (preg_match($exclusionRegex, $fileRelativePath)) { + $ignored = true; + + continue; + } + + if (preg_match($inclusionRegex, $fileRelativePath)) { + $ignored = false; + } + } + + return $this->ignoredPathsCache[$fileRealPath] = $ignored; + } + + /** + * @return list + */ + private function parentDirectoriesUpwards(string $from): array + { + $parentDirectories = []; + + $parentDirectory = $from; + + while (true) { + $newParentDirectory = \dirname($parentDirectory); + + // dirname('/') = '/' + if ($newParentDirectory === $parentDirectory) { + break; + } + + $parentDirectories[] = $parentDirectory = $newParentDirectory; + } + + return $parentDirectories; + } + + private function parentDirectoriesUpTo(string $from, string $upTo): array + { + return array_filter( + $this->parentDirectoriesUpwards($from), + static function (string $directory) use ($upTo): bool { + return str_starts_with($directory, $upTo); + } + ); + } + + /** + * @return list + */ + private function parentDirectoriesDownwards(string $fileRealPath): array + { + return array_reverse( + $this->parentDirectoriesUpTo($fileRealPath, $this->baseDir) + ); + } + + /** + * @return array{0: string, 1: string}|null + */ + private function readGitignoreFile(string $path): ?array + { + if (\array_key_exists($path, $this->gitignoreFilesCache)) { + return $this->gitignoreFilesCache[$path]; + } + + if (!file_exists($path)) { + return $this->gitignoreFilesCache[$path] = null; + } + + if (!is_file($path) || !is_readable($path)) { + throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); + } + + $gitignoreFileContent = file_get_contents($path); + + return $this->gitignoreFilesCache[$path] = [ + Gitignore::toRegex($gitignoreFileContent), + Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), + ]; + } + + private function normalizePath(string $path): string + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return str_replace('\\', '/', $path); + } + + return $path; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/LICENSE b/vendor/passkit/vendor/symfony/finder/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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/vendor/passkit/vendor/symfony/finder/README.md b/vendor/passkit/vendor/symfony/finder/README.md new file mode 100644 index 0000000..22bdeb9 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/README.md @@ -0,0 +1,14 @@ +Finder Component +================ + +The Finder component finds files and directories via an intuitive fluent +interface. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/passkit/vendor/symfony/finder/SplFileInfo.php b/vendor/passkit/vendor/symfony/finder/SplFileInfo.php new file mode 100644 index 0000000..867e8e8 --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/SplFileInfo.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Extends \SplFileInfo to support relative paths. + * + * @author Fabien Potencier + */ +class SplFileInfo extends \SplFileInfo +{ + private string $relativePath; + private string $relativePathname; + + /** + * @param string $file The file name + * @param string $relativePath The relative path + * @param string $relativePathname The relative path name + */ + public function __construct(string $file, string $relativePath, string $relativePathname) + { + parent::__construct($file); + $this->relativePath = $relativePath; + $this->relativePathname = $relativePathname; + } + + /** + * Returns the relative path. + * + * This path does not contain the file name. + */ + public function getRelativePath(): string + { + return $this->relativePath; + } + + /** + * Returns the relative path name. + * + * This path contains the file name. + */ + public function getRelativePathname(): string + { + return $this->relativePathname; + } + + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, \PATHINFO_FILENAME); + } + + /** + * Returns the contents of the file. + * + * @throws \RuntimeException + */ + public function getContents(): string + { + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); + try { + $content = file_get_contents($this->getPathname()); + } finally { + restore_error_handler(); + } + if (false === $content) { + throw new \RuntimeException($error); + } + + return $content; + } +} diff --git a/vendor/passkit/vendor/symfony/finder/composer.json b/vendor/passkit/vendor/symfony/finder/composer.json new file mode 100644 index 0000000..06d129c --- /dev/null +++ b/vendor/passkit/vendor/symfony/finder/composer.json @@ -0,0 +1,31 @@ +{ + "name": "symfony/finder", + "type": "library", + "description": "Finds files and directories via an intuitive fluent interface", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 0000000..ba75a2c --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,232 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param mixed $int + * @param string $function + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int, $function) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE b/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 0000000..3f853aa --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 Fabien Potencier + +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/vendor/passkit/vendor/symfony/polyfill-ctype/README.md b/vendor/passkit/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 0000000..b144d03 --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 0000000..d54524b --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print($text) { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space($text) { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 0000000..ab2f861 --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json b/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 0000000..ee5c931 --- /dev/null +++ b/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md b/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md new file mode 100644 index 0000000..3fb33a8 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md @@ -0,0 +1,242 @@ +CHANGELOG +========= + +6.1 +--- + + * In cases where it will likely improve readability, strings containing single quotes will be double-quoted + +5.4 +--- + + * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` + option to exclude one or more specific files from multiple file list + * Allow negatable for the parse tags option with `--no-parse-tags` + +5.3 +--- + + * Added `github` format support & autodetection to render errors as annotations + when running the YAML linter command in a Github Action environment. + +5.1.0 +----- + + * Added support for parsing numbers prefixed with `0o` as octal numbers. + * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` + so that they are parsed as octal numbers. + + Before: + + ```yaml + Yaml::parse('072'); + ``` + + After: + + ```yaml + Yaml::parse('0o72'); + ``` + + * Added `yaml-lint` binary. + * Deprecated using the `!php/object` and `!php/const` tags without a value. + +5.0.0 +----- + + * Removed support for mappings inside multi-line strings. + * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.4.0 +----- + + * Added support for parsing the inline notation spanning multiple lines. + * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. + * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.3.0 +----- + + * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. + +4.2.0 +----- + + * added support for multiple files or directories in `LintCommand` + +4.0.0 +----- + + * The behavior of the non-specific tag `!` is changed and now forces + non-evaluating your values. + * complex mappings will throw a `ParseException` + * support for the comma as a group separator for floats has been dropped, use + the underscore instead + * support for the `!!php/object` tag has been dropped, use the `!php/object` + tag instead + * duplicate mapping keys throw a `ParseException` + * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` + flag to cast them to strings + * `%` at the beginning of an unquoted string throw a `ParseException` + * mappings with a colon (`:`) that is not followed by a whitespace throw a + `ParseException` + * the `Dumper::setIndentation()` method has been removed + * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, + `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of + the parser and dumper is no longer supported, pass bitmask flags instead + * the constructor arguments of the `Parser` class have been removed + * the `Inline` class is internal and no longer part of the BC promise + * removed support for the `!str` tag, use the `!!str` tag instead + * added support for tagged scalars. + + ```yml + Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); + // returns TaggedValue('foo', 'bar'); + ``` + +3.4.0 +----- + + * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method + + * the `Dumper`, `Parser`, and `Yaml` classes are marked as final + + * Deprecated the `!php/object:` tag which will be replaced by the + `!php/object` tag (without the colon) in 4.0. + + * Deprecated the `!php/const:` tag which will be replaced by the + `!php/const` tag (without the colon) in 4.0. + + * Support for the `!str` tag is deprecated, use the `!!str` tag instead. + + * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. + It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. + +3.3.0 +----- + + * Starting an unquoted string with a question mark followed by a space is + deprecated and will throw a `ParseException` in Symfony 4.0. + + * Deprecated support for implicitly parsing non-string mapping keys as strings. + Mapping keys that are no strings will lead to a `ParseException` in Symfony + 4.0. Use quotes to opt-in for keys to be parsed as strings. + + Before: + + ```php + $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); + ``` + +3.0.0 +----- + + * Yaml::parse() now throws an exception when a blackslash is not escaped + in double-quoted strings + +2.8.0 +----- + + * Deprecated usage of a colon in an unquoted mapping value + * Deprecated usage of @, \`, | and > at the beginning of an unquoted string + * When surrounding strings with double-quotes, you must now escape `\` characters. Not + escaping those characters (when surrounded by double-quotes) is deprecated. + + Before: + + ```yml + class: "Foo\Var" + ``` + + After: + + ```yml + class: "Foo\\Var" + ``` + +2.1.0 +----- + + * Yaml::parse() does not evaluate loaded files as PHP files by default + anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php b/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php new file mode 100644 index 0000000..66eb250 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php @@ -0,0 +1,279 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Command; + +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\CI\GithubActionReporter; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser; +use Symfony\Component\Yaml\Yaml; + +/** + * Validates YAML files syntax and outputs encountered errors. + * + * @author Grégoire Pineau + * @author Robin Chalas + */ +#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')] +class LintCommand extends Command +{ + private Parser $parser; + private ?string $format = null; + private bool $displayCorrectFiles; + private ?\Closure $directoryIteratorProvider; + private ?\Closure $isReadableProvider; + + public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) + { + parent::__construct($name); + + $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); + $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format') + ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude') + ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null) + ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT +the first encountered syntax error. + +You can validates YAML contents passed from STDIN: + + cat filename | php %command.full_name% - + +You can also validate the syntax of a file: + + php %command.full_name% filename + +Or of a whole directory: + + php %command.full_name% dirname + php %command.full_name% dirname --format=json + +You can also exclude one or more specific files: + + php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml" + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $filenames = (array) $input->getArgument('filename'); + $excludes = $input->getOption('exclude'); + $this->format = $input->getOption('format'); + $flags = $input->getOption('parse-tags'); + + if ('github' === $this->format && !class_exists(GithubActionReporter::class)) { + throw new \InvalidArgumentException('The "github" format is only available since "symfony/console" >= 5.3.'); + } + + if (null === $this->format) { + // Autodetect format according to CI environment + $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt'; + } + + $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0; + + $this->displayCorrectFiles = $output->isVerbose(); + + if (['-'] === $filenames) { + return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); + } + + if (!$filenames) { + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); + } + + $filesInfo = []; + foreach ($filenames as $filename) { + if (!$this->isReadable($filename)) { + throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + } + + foreach ($this->getFiles($filename) as $file) { + if (!\in_array($file->getPathname(), $excludes, true)) { + $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); + } + } + } + + return $this->display($io, $filesInfo); + } + + private function validate(string $content, int $flags, string $file = null) + { + $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { + if (\E_USER_DEPRECATED === $level) { + throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); + } + + return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; + }); + + try { + $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); + } catch (ParseException $e) { + return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; + } finally { + restore_error_handler(); + } + + return ['file' => $file, 'valid' => true]; + } + + private function display(SymfonyStyle $io, array $files): int + { + return match ($this->format) { + 'txt' => $this->displayTxt($io, $files), + 'json' => $this->displayJson($io, $files), + 'github' => $this->displayTxt($io, $files, true), + default => throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)), + }; + } + + private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int + { + $countFiles = \count($filesInfo); + $erroredFiles = 0; + $suggestTagOption = false; + + if ($errorAsGithubAnnotations) { + $githubReporter = new GithubActionReporter($io); + } + + foreach ($filesInfo as $info) { + if ($info['valid'] && $this->displayCorrectFiles) { + $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (!$info['valid']) { + ++$erroredFiles; + $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->text(sprintf(' >> %s', $info['message'])); + + if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) { + $suggestTagOption = true; + } + + if ($errorAsGithubAnnotations) { + $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']); + } + } + } + + if (0 === $erroredFiles) { + $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); + } else { + $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); + } + + return min($erroredFiles, 1); + } + + private function displayJson(SymfonyStyle $io, array $filesInfo): int + { + $errors = 0; + + array_walk($filesInfo, function (&$v) use (&$errors) { + $v['file'] = (string) $v['file']; + if (!$v['valid']) { + ++$errors; + } + + if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) { + $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; + } + }); + + $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); + + return min($errors, 1); + } + + private function getFiles(string $fileOrDirectory): iterable + { + if (is_file($fileOrDirectory)) { + yield new \SplFileInfo($fileOrDirectory); + + return; + } + + foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { + if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { + continue; + } + + yield $file; + } + } + + private function getParser(): Parser + { + return $this->parser ??= new Parser(); + } + + private function getDirectoryIterator(string $directory): iterable + { + $default = function ($directory) { + return new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + }; + + if (null !== $this->directoryIteratorProvider) { + return ($this->directoryIteratorProvider)($directory, $default); + } + + return $default($directory); + } + + private function isReadable(string $fileOrDirectory): bool + { + $default = function ($fileOrDirectory) { + return is_readable($fileOrDirectory); + }; + + if (null !== $this->isReadableProvider) { + return ($this->isReadableProvider)($fileOrDirectory, $default); + } + + return $default($fileOrDirectory); + } + + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ($input->mustSuggestOptionValuesFor('format')) { + $suggestions->suggestValues(['txt', 'json', 'github']); + } + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Dumper.php b/vendor/passkit/vendor/symfony/yaml/Dumper.php new file mode 100644 index 0000000..56979c7 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Dumper.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Dumper dumps PHP variables to YAML strings. + * + * @author Fabien Potencier + * + * @final + */ +class Dumper +{ + /** + * The amount of spaces to use for indentation of nested nodes. + */ + private int $indentation; + + public function __construct(int $indentation = 4) + { + if ($indentation < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + + $this->indentation = $indentation; + } + + /** + * Dumps a PHP value to YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The level of indentation (used internally) + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string + { + $output = ''; + $prefix = $indent ? str_repeat(' ', $indent) : ''; + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $input); + } + + if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { + $output .= $prefix.Inline::dump($input, $flags); + } else { + $dumpAsMap = Inline::isHash($input); + + foreach ($input as $key => $value) { + if ('' !== $output && "\n" !== $output[-1]) { + $output .= "\n"; + } + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value, ' ') ? (string) $this->indentation : ''; + + if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) { + $blockChompingIndicator = '+'; + } elseif ("\n" === $value[-1]) { + $blockChompingIndicator = ''; + } else { + $blockChompingIndicator = '-'; + } + + $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator); + + foreach (explode("\n", $value) as $row) { + if ('' === $row) { + $output .= "\n"; + } else { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + } + + continue; + } + + if ($value instanceof TaggedValue) { + $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value->getValue(), ' ') ? (string) $this->indentation : ''; + $output .= sprintf(' |%s', $blockIndentationIndicator); + + foreach (explode("\n", $value->getValue()) as $row) { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + + continue; + } + + if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { + $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; + } else { + $output .= "\n"; + $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); + } + + continue; + } + + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $value); + } + + $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); + + $output .= sprintf('%s%s%s%s', + $prefix, + $dumpAsMap ? Inline::dump($key, $flags).':' : '-', + $willBeInlined ? ' ' : "\n", + $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) + ).($willBeInlined ? "\n" : ''); + } + } + + return $output; + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Escaper.php b/vendor/passkit/vendor/symfony/yaml/Escaper.php new file mode 100644 index 0000000..e8090d8 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Escaper.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Escaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Escaper +{ + // Characters that would cause a dumped string to require double quoting. + public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + + // Mapping arrays for escaping a double quoted string. The backslash is + // first to ensure proper escaping because str_replace operates iteratively + // on the input arrays. This ordering of the characters avoids the use of strtr, + // which performs more slowly. + private const ESCAPEES = ['\\', '\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\x7f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", + ]; + private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"', + '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', + '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', + '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', + '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', + '\\x7f', + '\\N', '\\_', '\\L', '\\P', + ]; + + /** + * Determines if a PHP value would require double quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresDoubleQuoting(string $value): bool + { + return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); + } + + /** + * Escapes and surrounds a PHP value with double quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithDoubleQuotes(string $value): string + { + return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value)); + } + + /** + * Determines if a PHP value would require single quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresSingleQuoting(string $value): bool + { + // Determines if a PHP value is entirely composed of a value that would + // require single quoting in YAML. + if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { + return true; + } + + // Determines if the PHP value contains any single characters that would + // cause it to require single quoting in YAML. + return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value); + } + + /** + * Escapes and surrounds a PHP value with single quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithSingleQuotes(string $value): string + { + return sprintf("'%s'", str_replace('\'', '\'\'', $value)); + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php b/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php new file mode 100644 index 0000000..cce972f --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during dumping. + * + * @author Fabien Potencier + */ +class DumpException extends RuntimeException +{ +} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php new file mode 100644 index 0000000..9091316 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php b/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php new file mode 100644 index 0000000..07c59b9 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + */ +class ParseException extends RuntimeException +{ + private ?string $parsedFile; + private int $parsedLine; + private ?string $snippet; + private string $rawMessage; + + /** + * @param string $message The error message + * @param int $parsedLine The line where the error occurred + * @param string|null $snippet The snippet of code near the problem + * @param string|null $parsedFile The file name where the error occurred + */ + public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) + { + $this->parsedFile = $parsedFile; + $this->parsedLine = $parsedLine; + $this->snippet = $snippet; + $this->rawMessage = $message; + + $this->updateRepr(); + + parent::__construct($this->message, 0, $previous); + } + + /** + * Gets the snippet of code near the error. + */ + public function getSnippet(): string + { + return $this->snippet; + } + + /** + * Sets the snippet of code near the error. + */ + public function setSnippet(string $snippet) + { + $this->snippet = $snippet; + + $this->updateRepr(); + } + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + */ + public function getParsedFile(): string + { + return $this->parsedFile; + } + + /** + * Sets the filename where the error occurred. + */ + public function setParsedFile(string $parsedFile) + { + $this->parsedFile = $parsedFile; + + $this->updateRepr(); + } + + /** + * Gets the line where the error occurred. + */ + public function getParsedLine(): int + { + return $this->parsedLine; + } + + /** + * Sets the line where the error occurred. + */ + public function setParsedLine(int $parsedLine) + { + $this->parsedLine = $parsedLine; + + $this->updateRepr(); + } + + private function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if (str_ends_with($this->message, '.')) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if (null !== $this->parsedFile) { + $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); + } + + if ($this->parsedLine >= 0) { + $this->message .= sprintf(' at line %d', $this->parsedLine); + } + + if ($this->snippet) { + $this->message .= sprintf(' (near "%s")', $this->snippet); + } + + if ($dot) { + $this->message .= '.'; + } + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php new file mode 100644 index 0000000..3f36b73 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Romain Neutron + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/passkit/vendor/symfony/yaml/Inline.php b/vendor/passkit/vendor/symfony/yaml/Inline.php new file mode 100644 index 0000000..1a862b7 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Inline.php @@ -0,0 +1,779 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\DumpException; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Inline implements a YAML parser/dumper for the YAML inline syntax. + * + * @author Fabien Potencier + * + * @internal + */ +class Inline +{ + public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; + + public static int $parsedLineNumber = -1; + public static ?string $parsedFilename = null; + + private static bool $exceptionOnInvalidType = false; + private static bool $objectSupport = false; + private static bool $objectForMap = false; + private static bool $constantSupport = false; + + public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) + { + self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); + self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); + self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); + self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); + self::$parsedFilename = $parsedFilename; + + if (null !== $parsedLineNumber) { + self::$parsedLineNumber = $parsedLineNumber; + } + } + + /** + * Converts a YAML string to a PHP value. + * + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param array $references Mapping of variable names to values + * + * @throws ParseException + */ + public static function parse(string $value = null, int $flags = 0, array &$references = []): mixed + { + self::initialize($flags); + + $value = trim($value); + + if ('' === $value) { + return ''; + } + + $i = 0; + $tag = self::parseTag($value, $i, $flags); + switch ($value[$i]) { + case '[': + $result = self::parseSequence($value, $flags, $i, $references); + ++$i; + break; + case '{': + $result = self::parseMapping($value, $flags, $i, $references); + ++$i; + break; + default: + $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references); + } + + // some comments are allowed at the end + if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (null !== $tag && '' !== $tag) { + return new TaggedValue($tag, $result); + } + + return $result; + } + + /** + * Dumps a given PHP variable to a YAML string. + * + * @param mixed $value The PHP variable to convert + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @throws DumpException When trying to dump PHP resource + */ + public static function dump(mixed $value, int $flags = 0): string + { + switch (true) { + case \is_resource($value): + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); + } + + return self::dumpNull($flags); + case $value instanceof \DateTimeInterface: + return $value->format('c'); + case $value instanceof \UnitEnum: + return sprintf('!php/const %s::%s', \get_class($value), $value->name); + case \is_object($value): + if ($value instanceof TaggedValue) { + return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); + } + + if (Yaml::DUMP_OBJECT & $flags) { + return '!php/object '.self::dump(serialize($value)); + } + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { + $output = []; + + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException('Object support when dumping a YAML file has been disabled.'); + } + + return self::dumpNull($flags); + case \is_array($value): + return self::dumpArray($value, $flags); + case null === $value: + return self::dumpNull($flags); + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case \is_int($value): + return $value; + case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"): + $locale = setlocale(\LC_NUMERIC, 0); + if (false !== $locale) { + setlocale(\LC_NUMERIC, 'C'); + } + if (\is_float($value)) { + $repr = (string) $value; + if (is_infinite($value)) { + $repr = str_ireplace('INF', '.Inf', $repr); + } elseif (floor($value) == $value && $repr == $value) { + // Preserve float data type since storing a whole number will result in integer value. + if (!str_contains($repr, 'E')) { + $repr = $repr.'.0'; + } + } + } else { + $repr = \is_string($value) ? "'$value'" : (string) $value; + } + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + + return $repr; + case '' == $value: + return "''"; + case self::isBinaryString($value): + return '!!binary '.base64_encode($value); + case Escaper::requiresDoubleQuoting($value): + return Escaper::escapeWithDoubleQuotes($value); + case Escaper::requiresSingleQuoting($value): + $singleQuoted = Escaper::escapeWithSingleQuotes($value); + if (!str_contains($value, "'")) { + return $singleQuoted; + } + // Attempt double-quoting the string instead to see if it's more efficient. + $doubleQuoted = Escaper::escapeWithDoubleQuotes($value); + + return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted; + case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): + case Parser::preg_match(self::getHexRegex(), $value): + case Parser::preg_match(self::getTimestampRegex(), $value): + return Escaper::escapeWithSingleQuotes($value); + default: + return $value; + } + } + + /** + * Check if given array is hash or just normal indexed array. + */ + public static function isHash(array|\ArrayObject|\stdClass $value): bool + { + if ($value instanceof \stdClass || $value instanceof \ArrayObject) { + return true; + } + + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + + /** + * Dumps a PHP array to a YAML string. + * + * @param array $value The PHP array to dump + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + private static function dumpArray(array $value, int $flags): string + { + // array + if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { + $output = []; + foreach ($value as $val) { + $output[] = self::dump($val, $flags); + } + + return sprintf('[%s]', implode(', ', $output)); + } + + // hash + $output = []; + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + private static function dumpNull(int $flags): string + { + if (Yaml::DUMP_NULL_AS_TILDE & $flags) { + return '~'; + } + + return 'null'; + } + + /** + * Parses a YAML scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null): mixed + { + if (\in_array($scalar[$i], ['"', "'"], true)) { + // quoted scalar + $isQuoted = true; + $output = self::parseQuotedScalar($scalar, $i); + + if (null !== $delimiters) { + $tmp = ltrim(substr($scalar, $i), " \n"); + if ('' === $tmp) { + throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (!\in_array($tmp[0], $delimiters)) { + throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + } + } else { + // "normal" string + $isQuoted = false; + + if (!$delimiters) { + $output = substr($scalar, $i); + $i += \strlen($output); + + // remove comments + if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) { + $output = substr($output, 0, $match[0][1]); + } + } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { + $output = $match[1]; + $i += \strlen($output); + $output = trim($output); + } else { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) + if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { + throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); + } + + if ($evaluate) { + $output = self::evaluateScalar($output, $flags, $references, $isQuoted); + } + } + + return $output; + } + + /** + * Parses a YAML quoted scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseQuotedScalar(string $scalar, int &$i = 0): string + { + if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $output = substr($match[0], 1, -1); + + $unescaper = new Unescaper(); + if ('"' == $scalar[$i]) { + $output = $unescaper->unescapeDoubleQuotedString($output); + } else { + $output = $unescaper->unescapeSingleQuotedString($output); + } + + $i += \strlen($match[0]); + + return $output; + } + + /** + * Parses a YAML sequence. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array + { + $output = []; + $len = \strlen($sequence); + ++$i; + + // [foo, bar, ...] + while ($i < $len) { + if (']' === $sequence[$i]) { + return $output; + } + if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($sequence, $i, $flags); + switch ($sequence[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($sequence, $flags, $i, $references); + break; + case '{': + // nested mapping + $value = self::parseMapping($sequence, $flags, $i, $references); + break; + default: + $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); + + // the value can be an array if a reference has been resolved to an array var + if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { + // embedded mapping? + try { + $pos = 0; + $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); + } catch (\InvalidArgumentException) { + // no, it's not + } + } + + if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + --$i; + } + + if (null !== $tag && '' !== $tag) { + $value = new TaggedValue($tag, $value); + } + + $output[] = $value; + + ++$i; + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Parses a YAML mapping. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass + { + $output = []; + $len = \strlen($mapping); + ++$i; + $allowOverwrite = false; + + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + case "\n": + ++$i; + continue 2; + case '}': + if (self::$objectForMap) { + return (object) $output; + } + + return $output; + } + + // key + $offsetBeforeKeyParsing = $i; + $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); + $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); + + if ($offsetBeforeKeyParsing === $i) { + throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); + } + + if ('!php/const' === $key) { + $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false); + $key = self::evaluateScalar($key, $flags); + } + + if (false === $i = strpos($mapping, ':', $i)) { + break; + } + + if (!$isKeyQuoted) { + $evaluatedKey = self::evaluateScalar($key, $flags, $references); + + if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { + throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); + } + } + + if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { + throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); + } + + if ('<<' === $key) { + $allowOverwrite = true; + } + + while ($i < $len) { + if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($mapping, $i, $flags); + switch ($mapping[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + foreach ($value as $parsedValue) { + $output += $parsedValue; + } + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + case '{': + // nested mapping + $value = self::parseMapping($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + default: + $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + --$i; + } + ++$i; + + continue 2; + } + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Evaluates scalars and replaces magic values. + * + * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved + */ + private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null): mixed + { + $isQuotedString = false; + $scalar = trim($scalar); + + if (str_starts_with($scalar, '*')) { + if (false !== $pos = strpos($scalar, '#')) { + $value = substr($scalar, 1, $pos - 2); + } else { + $value = substr($scalar, 1); + } + + // an unquoted * + if (false === $value || '' === $value) { + throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (!\array_key_exists($value, $references)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + return $references[$value]; + } + + $scalarLower = strtolower($scalar); + + switch (true) { + case 'null' === $scalarLower: + case '' === $scalar: + case '~' === $scalar: + return null; + case 'true' === $scalarLower: + return true; + case 'false' === $scalarLower: + return false; + case '!' === $scalar[0]: + switch (true) { + case str_starts_with($scalar, '!!str '): + $s = (string) substr($scalar, 6); + + if (\in_array($s[0] ?? '', ['"', "'"], true)) { + $isQuotedString = true; + $s = self::parseQuotedScalar($s); + } + + return $s; + case str_starts_with($scalar, '! '): + return substr($scalar, 2); + case str_starts_with($scalar, '!php/object'): + if (self::$objectSupport) { + if (!isset($scalar[12])) { + throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return unserialize(self::parseScalar(substr($scalar, 12))); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!php/const'): + if (self::$constantSupport) { + if (!isset($scalar[11])) { + throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $i = 0; + if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { + return \constant($const); + } + + throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (self::$exceptionOnInvalidType) { + throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!!float '): + return (float) substr($scalar, 8); + case str_starts_with($scalar, '!!binary '): + return self::evaluateBinaryScalar(substr($scalar, 9)); + } + + throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); + case preg_match('/^(?:\+|-)?0o(?P[0-7_]++)$/', $scalar, $matches): + $value = str_replace('_', '', $matches['value']); + + if ('-' === $scalar[0]) { + return -octdec($value); + } + + return octdec($value); + // Optimize for returning strings. + case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]): + if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { + $scalar = str_replace('_', '', $scalar); + } + + switch (true) { + case ctype_digit($scalar): + case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): + $cast = (int) $scalar; + + return ($scalar === (string) $cast) ? $cast : $scalar; + case is_numeric($scalar): + case Parser::preg_match(self::getHexRegex(), $scalar): + $scalar = str_replace('_', '', $scalar); + + return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; + case '.inf' === $scalarLower: + case '.nan' === $scalarLower: + return -log(0); + case '-.inf' === $scalarLower: + return log(0); + case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): + return (float) str_replace('_', '', $scalar); + case Parser::preg_match(self::getTimestampRegex(), $scalar): + // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. + $time = new \DateTime($scalar, new \DateTimeZone('UTC')); + + if (Yaml::PARSE_DATETIME & $flags) { + return $time; + } + + try { + if (false !== $scalar = $time->getTimestamp()) { + return $scalar; + } + } catch (\ValueError) { + // no-op + } + + return $time->format('U'); + } + } + + return (string) $scalar; + } + + private static function parseTag(string $value, int &$i, int $flags): ?string + { + if ('!' !== $value[$i]) { + return null; + } + + $tagLength = strcspn($value, " \t\n[]{},", $i + 1); + $tag = substr($value, $i + 1, $tagLength); + + $nextOffset = $i + $tagLength + 1; + $nextOffset += strspn($value, ' ', $nextOffset); + + if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { + throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + // Is followed by a scalar and is a built-in tag + if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) { + // Manage in {@link self::evaluateScalar()} + return null; + } + + $i = $nextOffset; + + // Built-in tags + if ('' !== $tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' !== $tag && !isset($value[$i])) { + throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + public static function evaluateBinaryScalar(string $scalar): string + { + $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); + + if (0 !== (\strlen($parsedBinaryData) % 4)) { + throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { + throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return base64_decode($parsedBinaryData, true); + } + + private static function isBinaryString(string $value): bool + { + return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); + } + + /** + * Gets a regex that matches a YAML date. + * + * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 + */ + private static function getTimestampRegex(): string + { + return <<[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)? + $~x +EOF; + } + + /** + * Gets a regex that matches a YAML number in hexadecimal notation. + */ + private static function getHexRegex(): string + { + return '~^0x[0-9a-f_]++$~i'; + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/LICENSE b/vendor/passkit/vendor/symfony/yaml/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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/vendor/passkit/vendor/symfony/yaml/Parser.php b/vendor/passkit/vendor/symfony/yaml/Parser.php new file mode 100644 index 0000000..9a3741b --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Parser.php @@ -0,0 +1,1255 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Parser parses YAML strings to convert them to PHP arrays. + * + * @author Fabien Potencier + * + * @final + */ +class Parser +{ + public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; + public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; + public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; + + private ?string $filename = null; + private int $offset = 0; + private int $numberOfParsedLines = 0; + private ?int $totalNumberOfLines = null; + private array $lines = []; + private int $currentLineNb = -1; + private string $currentLine = ''; + private array $refs = []; + private array $skippedLineNumbers = []; + private array $locallySkippedLineNumbers = []; + private array $refsBeingParsed = []; + + /** + * Parses a YAML file into a PHP value. + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public function parseFile(string $filename, int $flags = 0): mixed + { + if (!is_file($filename)) { + throw new ParseException(sprintf('File "%s" does not exist.', $filename)); + } + + if (!is_readable($filename)) { + throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); + } + + $this->filename = $filename; + + try { + return $this->parse(file_get_contents($filename), $flags); + } finally { + $this->filename = null; + } + } + + /** + * Parses a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public function parse(string $value, int $flags = 0): mixed + { + if (false === preg_match('//u', $value)) { + throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); + } + + $this->refs = []; + + try { + $data = $this->doParse($value, $flags); + } finally { + $this->refsBeingParsed = []; + $this->offset = 0; + $this->lines = []; + $this->currentLine = ''; + $this->numberOfParsedLines = 0; + $this->refs = []; + $this->skippedLineNumbers = []; + $this->locallySkippedLineNumbers = []; + $this->totalNumberOfLines = null; + } + + return $data; + } + + private function doParse(string $value, int $flags) + { + $this->currentLineNb = -1; + $this->currentLine = ''; + $value = $this->cleanup($value); + $this->lines = explode("\n", $value); + $this->numberOfParsedLines = \count($this->lines); + $this->locallySkippedLineNumbers = []; + + if (null === $this->totalNumberOfLines) { + $this->totalNumberOfLines = $this->numberOfParsedLines; + } + + if (!$this->moveToNextLine()) { + return null; + } + + $data = []; + $context = null; + $allowOverwrite = false; + + while ($this->isCurrentLineEmpty()) { + if (!$this->moveToNextLine()) { + return null; + } + } + + // Resolves the tag and returns if end of the document + if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { + return new TaggedValue($tag, ''); + } + + do { + if ($this->isCurrentLineEmpty()) { + continue; + } + + // tab? + if ("\t" === $this->currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); + + $isRef = $mergeNode = false; + if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { + if ($context && 'mapping' == $context) { + throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + $context = 'sequence'; + + if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // array + if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) { + // Inline first child + $currentLineNumber = $this->getRealCurrentLineNb(); + + $sequenceIndentation = \strlen($values['leadspaces']) + 1; + $sequenceYaml = substr($this->currentLine, $sequenceIndentation); + $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true); + + $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags); + } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) { + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); + } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { + $data[] = new TaggedValue( + $subTag, + $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) + ); + } else { + if ( + isset($values['leadspaces']) + && ( + '!' === $values['value'][0] + || self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) + ) + ) { + // this is a compact notation element, add to next block and parse + $block = $values['value']; + if ($this->isNextLineIndented()) { + $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); + } + + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); + } else { + $data[] = $this->parseValue($values['value'], $flags, $context); + } + } + if ($isRef) { + $this->refs[$isRef] = end($data); + array_pop($this->refsBeingParsed); + } + } elseif ( + self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values) + && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) + ) { + if ($context && 'sequence' == $context) { + throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + $context = 'mapping'; + + try { + $key = Inline::parseScalar($values['key']); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if (!\is_string($key) && !\is_int($key)) { + throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // Convert float keys to strings, to avoid being converted to integers by PHP + if (\is_float($key)) { + $key = (string) $key; + } + + if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { + $mergeNode = true; + $allowOverwrite = true; + if (isset($values['value'][0]) && '*' === $values['value'][0]) { + $refName = substr(rtrim($values['value']), 1); + if (!\array_key_exists($refName, $this->refs)) { + if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $refValue = $this->refs[$refName]; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { + $refValue = (array) $refValue; + } + + if (!\is_array($refValue)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $data += $refValue; // array union + } else { + if (isset($values['value']) && '' !== $values['value']) { + $value = $values['value']; + } else { + $value = $this->getNextEmbedBlock(); + } + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { + $parsed = (array) $parsed; + } + + if (!\is_array($parsed)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (isset($parsed[0])) { + // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes + // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier + // in the sequence override keys specified in later mapping nodes. + foreach ($parsed as $parsedItem) { + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { + $parsedItem = (array) $parsedItem; + } + + if (!\is_array($parsedItem)) { + throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); + } + + $data += $parsedItem; // array union + } + } else { + // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the + // current mapping, unless the key already exists in it. + $data += $parsed; // array union + } + } + } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + $subTag = null; + if ($mergeNode) { + // Merge keys + } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { + // hash + // if next line is less indented or equal, then it means that the current value is null + if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, ''); + } else { + $data[$key] = null; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + // remember the parsed line number here in case we need it to provide some contexts in error messages below + $realCurrentLineNbKey = $this->getRealCurrentLineNb(); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); + if ('<<' === $key) { + $this->refs[$refMatches['ref']] = $value; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { + $value = (array) $value; + } + + $data += $value; + } elseif ($allowOverwrite || !isset($data[$key])) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, $value); + } else { + $data[$key] = $value; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); + } + } + } else { + $value = $this->parseValue(rtrim($values['value']), $flags, $context); + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + $data[$key] = $value; + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } + if ($isRef) { + $this->refs[$isRef] = $data[$key]; + array_pop($this->refsBeingParsed); + } + } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('{' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedMapping; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('[' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedSequence; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } else { + // multiple documents are not supported + if ('---' === $this->currentLine) { + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // 1-liner optionally followed by newline(s) + if (\is_string($value) && $this->lines[0] === trim($value)) { + try { + $value = Inline::parse($this->lines[0], $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + return $value; + } + + // try to parse the value as a multi-line string as a last resort + if (0 === $this->currentLineNb) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + $value = ''; + + foreach ($this->lines as $line) { + $trimmedLine = trim($line); + if ('#' === ($trimmedLine[0] ?? '')) { + continue; + } + // If the indentation is not consistent at offset 0, it is to be considered as a ParseError + if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (str_contains($line, ': ')) { + throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if ('' === $trimmedLine) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + if ('' !== $trimmedLine && str_ends_with($line, '\\')) { + $value .= ltrim(substr($line, 0, -1)); + } elseif ('' !== $trimmedLine) { + $value .= $trimmedLine; + } + + if ('' === $trimmedLine) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif (str_ends_with($line, '\\')) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + } + + try { + return Inline::parse(trim($value)); + } catch (ParseException) { + // fall-through to the ParseException thrown below + } + } + + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } while ($this->moveToNextLine()); + + if (null !== $tag) { + $data = new TaggedValue($tag, $data); + } + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) { + $object = new \stdClass(); + + foreach ($data as $key => $value) { + $object->$key = $value; + } + + $data = $object; + } + + return empty($data) ? null : $data; + } + + private function parseBlock(int $offset, string $yaml, int $flags) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self(); + $parser->offset = $offset; + $parser->totalNumberOfLines = $this->totalNumberOfLines; + $parser->skippedLineNumbers = $skippedLineNumbers; + $parser->refs = &$this->refs; + $parser->refsBeingParsed = $this->refsBeingParsed; + + return $parser->doParse($yaml, $flags); + } + + /** + * Returns the current line number (takes the offset into account). + * + * @internal + */ + public function getRealCurrentLineNb(): int + { + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; + } + + private function getCurrentLineIndentation(): int + { + if (' ' !== ($this->currentLine[0] ?? '')) { + return 0; + } + + return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); + } + + /** + * Returns the next embed block of YAML. + * + * @param int|null $indentation The indent level at which the block is to be read, or null for default + * @param bool $inSequence True if the enclosing data structure is a sequence + * + * @throws ParseException When indentation problem are detected + */ + private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string + { + $oldLineIndentation = $this->getCurrentLineIndentation(); + + if (!$this->moveToNextLine()) { + return ''; + } + + if (null === $indentation) { + $newIndent = null; + $movements = 0; + + do { + $EOF = false; + + // empty and comment-like lines do not influence the indentation depth + if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } else { + $newIndent = $this->getCurrentLineIndentation(); + } + } while (!$EOF && null === $newIndent); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); + + if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } else { + $newIndent = $indentation; + } + + $data = []; + + if ($this->getCurrentLineIndentation() >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent ?? 0); + } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } else { + $this->moveToPreviousLine(); + + return ''; + } + + if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { + // the previous line contained a dash but no item content, this line is a sequence item with the same indentation + // and therefore no nested list or mapping + $this->moveToPreviousLine(); + + return ''; + } + + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + + while ($this->moveToNextLine()) { + if ($isItComment && !$isItUnindentedCollection) { + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + } + + $indent = $this->getCurrentLineIndentation(); + + if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { + $this->moveToPreviousLine(); + break; + } + + if ($this->isCurrentLineBlank()) { + $data[] = substr($this->currentLine, $newIndent); + continue; + } + + if ($indent >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif ($this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } elseif (0 == $indent) { + $this->moveToPreviousLine(); + + break; + } else { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return implode("\n", $data); + } + + private function hasMoreLines(): bool + { + return (\count($this->lines) - 1) > $this->currentLineNb; + } + + /** + * Moves the parser to the next line. + */ + private function moveToNextLine(): bool + { + if ($this->currentLineNb >= $this->numberOfParsedLines - 1) { + return false; + } + + $this->currentLine = $this->lines[++$this->currentLineNb]; + + return true; + } + + /** + * Moves the parser to the previous line. + */ + private function moveToPreviousLine(): bool + { + if ($this->currentLineNb < 1) { + return false; + } + + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; + } + + /** + * Parses a YAML value. + * + * @param string $value A YAML value + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $context The parser context (either sequence or mapping) + * + * @throws ParseException When reference does not exist + */ + private function parseValue(string $value, int $flags, string $context): mixed + { + if (str_starts_with($value, '*')) { + if (false !== $pos = strpos($value, '#')) { + $value = substr($value, 1, $pos - 2); + } else { + $value = substr($value, 1); + } + + if (!\array_key_exists($value, $this->refs)) { + if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + return $this->refs[$value]; + } + + if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { + $modifiers = $matches['modifiers'] ?? ''; + + $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers)); + + if ('' !== $matches['tag'] && '!' !== $matches['tag']) { + if ('!!binary' === $matches['tag']) { + return Inline::evaluateBinaryScalar($data); + } + + return new TaggedValue(substr($matches['tag'], 1), $data); + } + + return $data; + } + + try { + if ('' !== $value && '{' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); + } elseif ('' !== $value && '[' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); + } + + switch ($value[0] ?? '') { + case '"': + case "'": + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); + + if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); + } + + return $parsedValue; + default: + $lines = []; + + while ($this->moveToNextLine()) { + // unquoted strings end before the first unindented line + if (0 === $this->getCurrentLineIndentation()) { + $this->moveToPreviousLine(); + + break; + } + + $lines[] = trim($this->currentLine); + } + + for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { + if ('' === $lines[$i]) { + $value .= "\n"; + $previousLineBlank = true; + } elseif ($previousLineBlank) { + $value .= $lines[$i]; + $previousLineBlank = false; + } else { + $value .= ' '.$lines[$i]; + $previousLineBlank = false; + } + } + + Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); + + $parsedValue = Inline::parse($value, $flags, $this->refs); + + if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { + throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + return $parsedValue; + } + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } + + /** + * Parses a block scalar. + * + * @param string $style The style indicator that was used to begin this block scalar (| or >) + * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) + * @param int $indentation The indentation indicator that was used to begin this block scalar + */ + private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string + { + $notEOF = $this->moveToNextLine(); + if (!$notEOF) { + return ''; + } + + $isCurrentLineBlank = $this->isCurrentLineBlank(); + $blockLines = []; + + // leading blank lines are consumed before determining indentation + while ($notEOF && $isCurrentLineBlank) { + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $blockLines[] = ''; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + + // determine indentation if not specified + if (0 === $indentation) { + $currentLineLength = \strlen($this->currentLine); + + for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { + ++$indentation; + } + } + + if ($indentation > 0) { + $pattern = sprintf('/^ {%d}(.*)$/', $indentation); + + while ( + $notEOF && ( + $isCurrentLineBlank || + self::preg_match($pattern, $this->currentLine, $matches) + ) + ) { + if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { + $blockLines[] = substr($this->currentLine, $indentation); + } elseif ($isCurrentLineBlank) { + $blockLines[] = ''; + } else { + $blockLines[] = $matches[1]; + } + + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + } elseif ($notEOF) { + $blockLines[] = ''; + } + + if ($notEOF) { + $blockLines[] = ''; + $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; + } + + // folded style + if ('>' === $style) { + $text = ''; + $previousLineIndented = false; + $previousLineBlank = false; + + for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { + if ('' === $blockLines[$i]) { + $text .= "\n"; + $previousLineIndented = false; + $previousLineBlank = true; + } elseif (' ' === $blockLines[$i][0]) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = true; + $previousLineBlank = false; + } elseif ($previousLineIndented) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } elseif ($previousLineBlank || 0 === $i) { + $text .= $blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } else { + $text .= ' '.$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } + } + } else { + $text = implode("\n", $blockLines); + } + + // deal with trailing newlines + if ('' === $chomping) { + $text = preg_replace('/\n+$/', "\n", $text); + } elseif ('-' === $chomping) { + $text = preg_replace('/\n+$/', '', $text); + } + + return $text; + } + + /** + * Returns true if the next line is indented. + */ + private function isNextLineIndented(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() > $currentIndentation; + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isCurrentLineEmpty(): bool + { + return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); + } + + private function isCurrentLineBlank(): bool + { + return '' === $this->currentLine || '' === trim($this->currentLine, ' '); + } + + private function isCurrentLineComment(): bool + { + //checking explicitly the first char of the trim is faster than loops or strpos + $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine; + + return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; + } + + private function isCurrentLineLastLineInDocument(): bool + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); + } + + private function cleanup(string $value): string + { + $value = str_replace(["\r\n", "\r"], "\n", $value); + + // strip YAML header + $count = 0; + $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); + $this->offset += $count; + + // remove leading comments + $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + } + + // remove start of the document marker (---) + $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + + // remove end of the document marker (...) + $value = preg_replace('#\.\.\.\s*$#', '', $value); + } + + return $value; + } + + private function isNextLineUnIndentedCollection(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isStringUnIndentedCollectionItem(): bool + { + return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- '); + } + + /** + * A local wrapper for "preg_match" which will throw a ParseException if there + * is an internal error in the PCRE engine. + * + * This avoids us needing to check for "false" every time PCRE is used + * in the YAML engine + * + * @throws ParseException on a PCRE internal error + * + * @see preg_last_error() + * + * @internal + */ + public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int + { + if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { + $error = match (preg_last_error()) { + \PREG_INTERNAL_ERROR => 'Internal PCRE error.', + \PREG_BACKTRACK_LIMIT_ERROR => 'pcre.backtrack_limit reached.', + \PREG_RECURSION_LIMIT_ERROR => 'pcre.recursion_limit reached.', + \PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data.', + \PREG_BAD_UTF8_OFFSET_ERROR => 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.', + default => 'Error.', + }; + + throw new ParseException($error); + } + + return $ret; + } + + /** + * Trim the tag on top of the value. + * + * Prevent values such as "!foo {quz: bar}" to be considered as + * a mapping block. + */ + private function trimTag(string $value): string + { + if ('!' === $value[0]) { + return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); + } + + return $value; + } + + private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string + { + if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { + return null; + } + + if ($nextLineCheck && !$this->isNextLineIndented()) { + return null; + } + + $tag = substr($matches['tag'], 1); + + // Built-in tags + if ($tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + if (Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + private function lexInlineQuotedString(int &$cursor = 0): string + { + $quotation = $this->currentLine[$cursor]; + $value = $quotation; + ++$cursor; + + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + $lineNumber = 0; + + do { + if (++$lineNumber > 1) { + $cursor += strspn($this->currentLine, ' ', $cursor); + } + + if ($this->isCurrentLineBlank()) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + for (; \strlen($this->currentLine) > $cursor; ++$cursor) { + switch ($this->currentLine[$cursor]) { + case '\\': + if ("'" === $quotation) { + $value .= '\\'; + } elseif (isset($this->currentLine[++$cursor])) { + $value .= '\\'.$this->currentLine[$cursor]; + } + + break; + case $quotation: + ++$cursor; + + if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) { + $value .= "''"; + break; + } + + return $value.$quotation; + default: + $value .= $this->currentLine[$cursor]; + } + } + + if ($this->isCurrentLineBlank()) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif ('\\' === $this->currentLine[-1]) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function lexUnquotedString(int &$cursor): string + { + $offset = $cursor; + $cursor += strcspn($this->currentLine, '[]{},: ', $cursor); + + if ($cursor === $offset) { + throw new ParseException('Malformed unquoted YAML string.'); + } + + return substr($this->currentLine, $offset, $cursor - $offset); + } + + private function lexInlineMapping(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, '}'); + } + + private function lexInlineSequence(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, ']'); + } + + private function lexInlineStructure(int &$cursor, string $closingTag): string + { + $value = $this->currentLine[$cursor]; + ++$cursor; + + do { + $this->consumeWhitespaces($cursor); + + while (isset($this->currentLine[$cursor])) { + switch ($this->currentLine[$cursor]) { + case '"': + case "'": + $value .= $this->lexInlineQuotedString($cursor); + break; + case ':': + case ',': + $value .= $this->currentLine[$cursor]; + ++$cursor; + break; + case '{': + $value .= $this->lexInlineMapping($cursor); + break; + case '[': + $value .= $this->lexInlineSequence($cursor); + break; + case $closingTag: + $value .= $this->currentLine[$cursor]; + ++$cursor; + + return $value; + case '#': + break 2; + default: + $value .= $this->lexUnquotedString($cursor); + } + + if ($this->consumeWhitespaces($cursor)) { + $value .= ' '; + } + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function consumeWhitespaces(int &$cursor): bool + { + $whitespacesConsumed = 0; + + do { + $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor); + $whitespacesConsumed += $whitespaceOnlyTokenLength; + $cursor += $whitespaceOnlyTokenLength; + + if (isset($this->currentLine[$cursor])) { + return 0 < $whitespacesConsumed; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + return 0 < $whitespacesConsumed; + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/README.md b/vendor/passkit/vendor/symfony/yaml/README.md new file mode 100644 index 0000000..ac25024 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/README.md @@ -0,0 +1,13 @@ +Yaml Component +============== + +The Yaml component loads and dumps YAML files. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/yaml.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint b/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint new file mode 100755 index 0000000..0ad73d7 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint @@ -0,0 +1,45 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Runs the Yaml lint command. + * + * @author Jan Schädlich + */ + +use Symfony\Component\Console\Application; +use Symfony\Component\Yaml\Command\LintCommand; + +function includeIfExists(string $file): bool +{ + return file_exists($file) && include $file; +} + +if ( + !includeIfExists(__DIR__ . '/../../../../autoload.php') && + !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && + !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') +) { + fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); + exit(1); +} + +if (!class_exists(Application::class)) { + fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL); + exit(1); +} + +(new Application())->add($command = new LintCommand()) + ->getApplication() + ->setDefaultCommand($command->getName(), true) + ->run() +; diff --git a/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php new file mode 100644 index 0000000..c7946c2 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Tag; + +/** + * @author Nicolas Grekas + * @author Guilhem N. + */ +final class TaggedValue +{ + private string $tag; + private mixed $value; + + public function __construct(string $tag, mixed $value) + { + $this->tag = $tag; + $this->value = $value; + } + + public function getTag(): string + { + return $this->tag; + } + + public function getValue() + { + return $this->value; + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Unescaper.php b/vendor/passkit/vendor/symfony/yaml/Unescaper.php new file mode 100644 index 0000000..2238210 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Unescaper.php @@ -0,0 +1,110 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Unescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Unescaper +{ + /** + * Regex fragment that matches an escaped character in a double quoted string. + */ + public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; + + /** + * Unescapes a single quoted string. + * + * @param string $value A single quoted string + */ + public function unescapeSingleQuotedString(string $value): string + { + return str_replace('\'\'', '\'', $value); + } + + /** + * Unescapes a double quoted string. + * + * @param string $value A double quoted string + */ + public function unescapeDoubleQuotedString(string $value): string + { + $callback = function ($match) { + return $this->unescapeCharacter($match[0]); + }; + + // evaluate the string + return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); + } + + /** + * Unescapes a character that was found in a double-quoted string. + * + * @param string $value An escaped character + */ + private function unescapeCharacter(string $value): string + { + return match ($value[1]) { + '0' => "\x0", + 'a' => "\x7", + 'b' => "\x8", + 't' => "\t", + "\t" => "\t", + 'n' => "\n", + 'v' => "\xB", + 'f' => "\xC", + 'r' => "\r", + 'e' => "\x1B", + ' ' => ' ', + '"' => '"', + '/' => '/', + '\\' => '\\', + // U+0085 NEXT LINE + 'N' => "\xC2\x85", + // U+00A0 NO-BREAK SPACE + '_' => "\xC2\xA0", + // U+2028 LINE SEPARATOR + 'L' => "\xE2\x80\xA8", + // U+2029 PARAGRAPH SEPARATOR + 'P' => "\xE2\x80\xA9", + 'x' => self::utf8chr(hexdec(substr($value, 2, 2))), + 'u' => self::utf8chr(hexdec(substr($value, 2, 4))), + 'U' => self::utf8chr(hexdec(substr($value, 2, 8))), + default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)), + }; + } + + /** + * Get the UTF-8 character for the given code point. + */ + private static function utf8chr(int $c): string + { + if (0x80 > $c %= 0x200000) { + return \chr($c); + } + if (0x800 > $c) { + return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); + } + if (0x10000 > $c) { + return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } + + return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/Yaml.php b/vendor/passkit/vendor/symfony/yaml/Yaml.php new file mode 100644 index 0000000..4978421 --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/Yaml.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Yaml offers convenience methods to load and dump YAML. + * + * @author Fabien Potencier + * + * @final + */ +class Yaml +{ + public const DUMP_OBJECT = 1; + public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; + public const PARSE_OBJECT = 4; + public const PARSE_OBJECT_FOR_MAP = 8; + public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; + public const PARSE_DATETIME = 32; + public const DUMP_OBJECT_AS_MAP = 64; + public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; + public const PARSE_CONSTANT = 256; + public const PARSE_CUSTOM_TAGS = 512; + public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; + public const DUMP_NULL_AS_TILDE = 2048; + + /** + * Parses a YAML file into a PHP value. + * + * Usage: + * + * $array = Yaml::parseFile('config.yml'); + * print_r($array); + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public static function parseFile(string $filename, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parseFile($filename, $flags); + } + + /** + * Parses YAML into a PHP value. + * + * Usage: + * + * $array = Yaml::parse(file_get_contents('config.yml')); + * print_r($array); + * + * + * @param string $input A string containing YAML + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public static function parse(string $input, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parse($input, $flags); + } + + /** + * Dumps a PHP value to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The amount of spaces to use for indentation of nested nodes + * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string + */ + public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string + { + $yaml = new Dumper($indent); + + return $yaml->dump($input, $inline, 0, $flags); + } +} diff --git a/vendor/passkit/vendor/symfony/yaml/composer.json b/vendor/passkit/vendor/symfony/yaml/composer.json new file mode 100644 index 0000000..839314b --- /dev/null +++ b/vendor/passkit/vendor/symfony/yaml/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/yaml", + "type": "library", + "description": "Loads and dumps YAML files", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "minimum-stability": "dev" +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Changelog.md b/vendor/passkit/vendor/zircote/swagger-php/Changelog.md new file mode 100644 index 0000000..08943b3 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Changelog.md @@ -0,0 +1,3 @@ +# Changelog + +The changelog is moved to the [releases page](https://github.com/zircote/swagger-php/releases) diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md b/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md new file mode 100644 index 0000000..d0c2790 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md @@ -0,0 +1,71 @@ +## Code/Annotation examples + +Collection of code/annotation examples and their corresponding OpenAPI specs generated using swagger-php. + +* **petstore.swagger.io** + + The [swagger-ui](http://petstore.swagger.io/) petstore example using swagger-php annotations. + + * petstore.swagger.io: [source](petstore.swagger.io) / [spec](petstore.swagger.io/petstore.swagger.io.yaml) + + +* **swagger-spec** + + Some more examples based on the (now defunct) [swagger-api](https://github.com/swagger-api/) specs. + + * petstore: [source](swagger-spec/petstore) / [spec](swagger-spec/petstore/petstore.yaml) + * petstore-simple: [source](swagger-spec/petstore-simple) + / [spec](swagger-spec/petstore-simple/petstore-simple.yaml) + * petstore-with-external-docs: [source](swagger-spec/petstore-with-external-docs) + / [spec](swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml) + * petstore-3.0 (includes oauth2 auth flow): [source](petstore-3.0) / [spec](openapi-spec/petstore-3.0.yaml) + + +* **Other** + + * using-links: [source](using-links) / [spec](using-links/using-links.yaml) + * using-links-php81: [source](using-links-php81) / [spec](using-links-php81/using-links-php81.yaml) - **requires PHP 8.1** + * simple response object: [source](example-object) / [spec](example-object/example-object.yaml) + * misc: [source](misc) / [spec](misc/misc.yaml) + * using interfaces: [source](using-interfaces) / [spec](using-interfaces/using-interfaces.yaml) + * using traits: [source](using-traits) / [spec](using-traits/using-traits.yaml) + * using refs: [source](using-refs) / [spec](using-refs/using-refs.yaml) + * nested schemas and class hierachies: [source](nesting) / [spec](nesting/nesting.yaml) + * polymorphism using `@OA\Discriminator`: [source](polymorphism) / [spec](polymorphism/polymorphism.yaml) + + +## Custom processors + +[Processors](../src/Processors) implement the various steps involved in converting annotations into an OpenAPI spec. + +Writing a custom processor is the recommended way to extend swagger-php in a clean way. + +Processors are expected to implement the `__invoke()` method expecting the current `Analysis` object as single parameter: + +```php + + */ +class Pet +{ + /** + * Add a new pet to the store. + * + * @OA\Post( + * path="/pet", + * tags={"pet"}, + * operationId="addPet", + * @OA\Response( + * response=405, + * description="Invalid input" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody(ref="#/components/requestBodies/Pet") + * ) + */ + public function addPet() + { + } + + /** + * Update an existing pet. + * + * @OA\Put( + * path="/pet", + * tags={"pet"}, + * operationId="updatePet", + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Pet not found" + * ), + * @OA\Response( + * response=405, + * description="Validation exception" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody(ref="#/components/requestBodies/Pet") + * ) + */ + public function updatePet() + { + } + + /** + * @OA\Get( + * path="/pet/findByStatus", + * tags={"pet"}, + * summary="Finds Pets by status", + * description="Multiple status values can be provided with comma separated string", + * operationId="findPetsByStatus", + * deprecated=true, + * @OA\Parameter( + * name="status", + * in="query", + * description="Status values that needed to be considered for filter", + * required=true, + * explode=true, + * @OA\Schema( + * default="available", + * type="string", + * enum={"available", "pending", "sold"}, + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ), + * @OA\XmlContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid status value" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * } + * ) + */ + public function findPetsByStatus() + { + } + + /** + * @OA\Get( + * path="/pet/findByTags", + * tags={"pet"}, + * summary="Finds Pets by tags", + * description="Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + * operationId="findByTags", + * @OA\Parameter( + * name="tags", + * in="query", + * description="Tags to filter by", + * required=true, + * explode=true, + * @OA\Schema( + * type="array", + * @OA\Items( + * type="string", + * ) + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ), + * @OA\XmlContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid status value" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * } + * ) + */ + public function findByTags() + { + } + + /** + * @OA\Get( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Find pet by ID", + * description="Returns a single pet", + * operationId="getPetById", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet to return", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Pet"), + * @OA\XmlContent(ref="#/components/schemas/Pet"), + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplier" + * ), + * @OA\Response( + * response=404, + * description="Pet not found" + * ), + * security={ + * {"api_key": {}} + * } + * ) + * + * @param int $id + */ + public function getPetById($id) + { + } + + /** + * @OA\Post( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Updates a pet in the store with form data", + * operationId="updatePetWithForm", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet that needs to be updated", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ) + * ), + * @OA\Response( + * response=405, + * description="Invalid input" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody( + * description="Input data format", + * @OA\MediaType( + * mediaType="application/x-www-form-urlencoded", + * @OA\Schema( + * type="object", + * @OA\Property( + * property="name", + * description="Updated name of the pet", + * type="string", + * ), + * @OA\Property( + * property="status", + * description="Updated status of the pet", + * type="string" + * ) + * ) + * ) + * ) + * ) + */ + public function updatePetWithForm() + { + } + + /** + * @OA\Delete( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Deletes a pet", + * operationId="deletePet", + * @OA\Parameter( + * name="api_key", + * in="header", + * required=false, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Parameter( + * name="petId", + * in="path", + * description="Pet id to delete", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ), + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied", + * ), + * @OA\Response( + * response=404, + * description="Pet not found", + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * ) + */ + public function deletePet() + { + } + + /** + * @OA\Post( + * path="/pet/{petId}/uploadImage", + * tags={"pet"}, + * summary="uploads an image", + * operationId="uploadFile", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet to update", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * example=1 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/ApiResponse") + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody( + * description="Upload images request body", + * @OA\MediaType( + * mediaType="application/octet-stream", + * @OA\Schema( + * type="string", + * format="binary" + * ) + * ) + * ) + * ) + */ + public function uploadFile() + { + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php new file mode 100644 index 0000000..937ab74 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php @@ -0,0 +1,137 @@ + + */ +class Store +{ + /** + * @OA\Get( + * path="/store", + * tags={"store"}, + * summary="Returns pet inventories by status", + * description="Returns a map of status codes to quantities", + * operationId="getInventory", + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * @OA\AdditionalProperties( + * type="integer", + * format="int32" + * ) + * ) + * ), + * security={ + * {"api_key": {}} + * } + * ) + */ + public function getInventory() + { + } + + /** + * @OA\Post( + * path="/store/order", + * tags={"store"}, + * summary="Place an order for a pet", + * operationId="placeOrder", + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Order"), + * @OA\XmlContent(ref="#/components/schemas/Order") + * ), + * @OA\RequestBody( + * description="order placed for purchasing th pet", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/Order") + * ) + * ) + */ + public function placeOrder() + { + } + + /** + * @OA\Get( + * path="/store/order/{orderId}", + * tags={"store"}, + * description="For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", + * operationId="getOrderById", + * @OA\Parameter( + * name="orderId", + * in="path", + * description="ID of pet that needs to be fetched", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * maximum=10, + * minimum=1 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Order"), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema(ref="#/components/schemas/Order") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Order not found" + * ) + * ) + */ + public function getOrderById() + { + } + + /** + * @OA\Delete( + * path="/store/order/{orderId}", + * tags={"store"}, + * summary="Delete purchase order by ID", + * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + * operationId="deleteOrder", + * @OA\Parameter( + * name="orderId", + * in="path", + * required=true, + * description="ID of the order that needs to be deleted", + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1 + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Order not found" + * ) + * ), + */ + public function deleteOrder() + { + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php new file mode 100644 index 0000000..52596be --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php @@ -0,0 +1,231 @@ + + */ +class User +{ + /** + * @OA\Post( + * path="/user", + * tags={"user"}, + * summary="Create user", + * description="This can only be done by the logged in user.", + * operationId="createUser", + * @OA\Response( + * response="default", + * description="successful operation" + * ), + * @OA\RequestBody( + * description="Create user object", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/User") + * ) + * ) + */ + public function createUser() + { + } + + /** + * @OA\Post( + * path="/user/createWithArray", + * tags={"user"}, + * summary="Create list of users with given input array", + * operationId="createUsersWithListInput", + * @OA\Response( + * response="default", + * description="successful operation" + * ), + * @OA\RequestBody(ref="#/components/requestBodies/UserArray") + * ) + */ + public function createUsersWithListInput() + { + } + + /** + * @OA\Get( + * path="/user/login", + * tags={"user"}, + * summary="Logs user into system", + * operationId="loginUser", + * @OA\Parameter( + * name="username", + * in="query", + * description="The user name for login", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Parameter( + * name="password", + * in="query", + * required=true, + * @OA\Schema( + * type="string", + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\Header( + * header="X-Rate-Limit", + * description="calls per hour allowed by the user", + * @OA\Schema( + * type="integer", + * format="int32" + * ) + * ), + * @OA\Header( + * header="X-Expires-After", + * description="date in UTC when token expires", + * @OA\Schema( + * type="string", + * format="datetime" + * ) + * ), + * @OA\JsonContent( + * type="string" + * ), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema( + * type="string" + * ) + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username/password supplied" + * ) + * ) + */ + public function loginUser() + { + } + + /** + * @OA\Get( + * path="/user/logout", + * tags={"user"}, + * summary="Logs out current logged in user session", + * operationId="logoutUser", + * @OA\Response( + * response="default", + * description="successful operation" + * ) + * ) + */ + public function logoutUser() + { + } + + /** + * @OA\Get( + * path="/user/{username}", + * summary="Get user by user name", + * operationId="getUserByName", + * @OA\Parameter( + * name="username", + * in="path", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/User"), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema(ref="#/components/schemas/User") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username supplied" + * ), + * @OA\Response( + * response=404, + * description="User not found" + * ), + * ) + */ + public function getUserByName() + { + } + + /** + * @OA\Put( + * path="/user/{username}", + * summary="Updated user", + * description="This can pnly be done by the logged in user.", + * operationId="updateUser", + * @OA\Parameter( + * name="username", + * in="path", + * description="name that to be updated", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid user supplied" + * ), + * @OA\Response( + * response=404, + * description="User not found" + * ), + * @OA\RequestBody( + * description="Updated user object", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/User") + * ) + * ) + */ + public function updateUser() + { + } + + /** + * @OA\Delete( + * path="/user/{username}", + * summary="Delete user", + * description="This can only be done by the logged in user.", + * operationId="deleteUser", + * @OA\Parameter( + * name="username", + * in="path", + * description="The name that needs to be deleted", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username supplied", + * ), + * @OA\Response( + * response=404, + * description="User not found", + * ) + * ) + */ + public function deleteUser() + { + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php new file mode 100644 index 0000000..29c8172 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php @@ -0,0 +1,51 @@ + + * + * @OA\Schema( + * description="Api response", + * title="Api response" + * ) + */ +class ApiResponse +{ + /** + * @OA\Property( + * description="Code", + * title="Code", + * format="int32" + * ) + * + * @var int + */ + private $code; + + /** + * OA\Property( + * description="Type", + * title="Type", + * ). + * + * @var string + */ + private $type; + + /** + * @OA\Property( + * description="Message", + * title="Message" + * ) + * + * @var string + */ + private $message; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php new file mode 100644 index 0000000..c178845 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php @@ -0,0 +1,43 @@ + + * + * @OA\Schema( + * title="Pets Category.", + * @OA\Xml( + * name="Category" + * ) + * ) + */ +class Category +{ + /** + * @OA\Property( + * title="ID", + * description="ID", + * format="int64", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * title="Category name", + * description="Category name" + * ) + * + * @var string + */ + private $name; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php new file mode 100644 index 0000000..36d46c7 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php @@ -0,0 +1,93 @@ + + * + * @OA\Schema( + * title="Order model", + * description="Order model", + * ) + */ +class Order +{ + /** + * @OA\Property( + * format="int64", + * title="ID", + * default=1, + * description="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * default=1, + * format="int64", + * description="Pet ID", + * title="Pet ID", + * ) + * + * @var int + */ + private $petId; + + /** + * @OA\Property( + * default=12, + * format="in32", + * description="Quantity", + * title="Quantity", + * ) + * + * @var int + */ + private $quantity; + + /** + * @OA\Property( + * default="2017-02-02 18:31:45", + * format="datetime", + * description="Shipping date", + * title="Shipping date", + * type="string" + * ) + * + * @var \DateTime + */ + private $shipDate; + + /** + * @OA\Property( + * default="placed", + * title="Order status.", + * description="Order status.", + * enum={"placed", "approved", "delivered"}, + * ) + * + * @var string + */ + private $status; + + /** + * @OA\Property( + * default=false, + * format="int64", + * description="Complete status", + * title="Complete status", + * ) + * + * @var bool + */ + private $complete; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php new file mode 100644 index 0000000..ade5557 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php @@ -0,0 +1,88 @@ + + * + * @OA\Schema( + * description="Pet model", + * title="Pet model", + * required={"name", "photoUrls"}, + * @OA\Xml( + * name="Pet" + * ) + * ) + */ +class Pet +{ + + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * title="Category", + * ) + * + * @var Category + */ + private $category; + + /** + * @OA\Property( + * format="int64", + * description="Pet name", + * title="Pet name", + * ) + * + * @var int + */ + private $name; + + /** + * @OA\Property( + * description="Photo urls", + * title="Photo urls", + * @OA\Xml( + * name="photoUrl", + * wrapped=true + * ), + * @OA\Items( + * type="string", + * default="images/image-1.png" + * ) + * ) + * + * @var array + */ + private $photoUrls; + + /** + * @OA\Property( + * description="Pet tags", + * title="Pet tags", + * @OA\Xml( + * name="tag", + * wrapped=true + * ), + * ) + * + * @var Tag[] + */ + private $tags; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php new file mode 100644 index 0000000..97e2661 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php @@ -0,0 +1,23 @@ + + * + * @OA\Schema( + * title="Tag", + * @OA\Xml( + * name="Tag" + * ) + * ) + */ +class Tag +{ + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID" + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * description="Name", + * title="Name" + * ) + * + * @var string + */ + private $name; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php new file mode 100644 index 0000000..c9c32ad --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php @@ -0,0 +1,106 @@ + + * + * @OA\Schema( + * title="User model", + * description="User model", + * ) + */ +class User +{ + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * description="Username", + * title="Username", + * ) + * + * @var string + */ + private $username; + + /** + * @OA\Property( + * description="First name", + * title="First name", + * ) + * + * @var string + */ + private $firstName; + + /** + * @OA\Property( + * description="Last name", + * title="Last name", + * ) + * + * @var string + */ + private $lastName; + + /** + * @OA\Property( + * format="email", + * description="Email", + * title="Email", + * ) + * + * @var string + */ + private $email; + + /** + * @OA\Property( + * format="int64", + * description="Password", + * title="Password", + * maximum=255 + * ) + * + * @var string + */ + private $password; + + /** + * @OA\Property( + * format="msisdn", + * description="Phone", + * title="Phone", + * ) + * + * @var string + */ + private $phone; + + /** + * @OA\Property( + * format="int32", + * description="User status", + * title="User status", + * ) + * + * @var int + */ + private $userStatus; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php new file mode 100644 index 0000000..79d0124 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php @@ -0,0 +1,22 @@ += 1 and <= 10. Other values will generated exceptions' + operationId: getOrderById + parameters: + - + name: orderId + in: path + description: 'ID of pet that needs to be fetched' + required: true + schema: + type: integer + format: int64 + maximum: 10 + minimum: 1 + responses: + '200': + description: 'successful operation' + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + delete: + tags: + - store + summary: 'Delete purchase order by ID' + description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' + operationId: deleteOrder + parameters: + - + name: orderId + in: path + description: 'ID of the order that needs to be deleted' + required: true + schema: + type: integer + format: int64 + minimum: 1 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + /user: + post: + tags: + - user + summary: 'Create user' + description: 'This can only be done by the logged in user.' + operationId: createUser + requestBody: + description: 'Create user object' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithArray: + post: + tags: + - user + summary: 'Create list of users with given input array' + operationId: createUsersWithListInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: 'successful operation' + /user/login: + get: + tags: + - user + summary: 'Logs user into system' + operationId: loginUser + parameters: + - + name: username + in: query + description: 'The user name for login' + required: true + schema: + type: string + - + name: password + in: query + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + headers: + X-Rate-Limit: + description: 'calls per hour allowed by the user' + schema: + type: integer + format: int32 + X-Expires-After: + description: 'date in UTC when token expires' + schema: + type: string + format: datetime + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + '400': + description: 'Invalid username/password supplied' + /user/logout: + get: + tags: + - user + summary: 'Logs out current logged in user session' + operationId: logoutUser + responses: + default: + description: 'successful operation' + '/user/{username}': + get: + summary: 'Get user by user name' + operationId: getUserByName + parameters: + - + name: username + in: path + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' + put: + summary: 'Updated user' + description: 'This can pnly be done by the logged in user.' + operationId: updateUser + parameters: + - + name: username + in: path + description: 'name that to be updated' + required: true + schema: + type: string + requestBody: + description: 'Updated user object' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + '400': + description: 'Invalid user supplied' + '404': + description: 'User not found' + delete: + summary: 'Delete user' + description: 'This can only be done by the logged in user.' + operationId: deleteUser + parameters: + - + name: username + in: path + description: 'The name that needs to be deleted' + required: true + schema: + type: string + responses: + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' +components: + schemas: + ApiResponse: + title: 'Api response' + description: 'Api response' + properties: + code: + title: Code + description: Code + type: integer + format: int32 + message: + title: Message + description: Message + type: string + type: object + Category: + title: 'Pets Category.' + description: 'Pets Category.' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + name: + title: 'Category name' + description: 'Category name' + type: string + type: object + xml: + name: Category + Order: + title: 'Order model' + description: 'Order model' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + default: 1 + petId: + title: 'Pet ID' + description: 'Pet ID' + type: integer + format: int64 + default: 1 + quantity: + title: Quantity + description: Quantity + type: integer + format: in32 + default: 12 + shipDate: + title: 'Shipping date' + description: 'Shipping date' + type: string + format: datetime + default: '2017-02-02 18:31:45' + status: + title: 'Order status.' + description: 'Order status.' + type: string + default: placed + enum: + - placed + - approved + - delivered + complete: + title: 'Complete status' + description: 'Complete status' + type: boolean + format: int64 + default: false + type: object + Pet: + title: 'Pet model' + description: 'Pet model' + required: + - name + - photoUrls + properties: + id: + title: ID + description: ID + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + title: 'Pet name' + description: 'Pet name' + type: integer + format: int64 + photoUrls: + title: 'Photo urls' + description: 'Photo urls' + type: array + items: + type: string + default: images/image-1.png + xml: + name: photoUrl + wrapped: true + tags: + title: 'Pet tags' + description: 'Pet tags' + type: array + items: + $ref: '#/components/schemas/Tag' + xml: + name: tag + wrapped: true + type: object + xml: + name: Pet + Tag: + title: Tag + description: Tag. + properties: + id: + title: ID + description: ID + type: integer + format: int64 + name: + title: Name + description: Name + type: string + type: object + xml: + name: Tag + User: + title: 'User model' + description: 'User model' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + username: + title: Username + description: Username + type: string + firstName: + title: 'First name' + description: 'First name' + type: string + lastName: + title: 'Last name' + description: 'Last name' + type: string + email: + title: Email + description: Email + type: string + format: email + password: + title: Password + description: Password + type: string + format: int64 + maximum: 255 + phone: + title: Phone + description: Phone + type: string + format: msisdn + userStatus: + title: 'User status' + description: 'User status' + type: integer + format: int32 + type: object + requestBodies: + Pet: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + UserArray: + description: 'List of user object' + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' + scopes: + 'write:pets': 'modify pets in your account' + 'read:pets': 'read your pets' + api_key: + type: apiKey + name: api_key + in: header +tags: + - + name: pet + description: 'Everything about your Pets' + externalDocs: + description: 'Find out more' + url: 'http://swagger.io' + - + name: store + description: 'Access to Petstore orders' + - + name: user + description: 'Operations about user' + externalDocs: + description: 'Find out more about store' + url: 'http://swagger.io' +externalDocs: + description: 'Find out more about Swagger' + url: 'http://swagger.io' diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php new file mode 100644 index 0000000..4653df6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php @@ -0,0 +1,31 @@ += 1 and <= 10. Other values will generated exceptions", + * operationId="getOrderById", + * @OA\Parameter( + * name="orderId", + * in="path", + * description="ID of pet that needs to be fetched", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1.0, + * maximum=10.0 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\Schema(ref="#/components/schemas/Order") + * ), + * @OA\Response(response=400, description="Invalid ID supplied"), + * @OA\Response(response=404, description="Order not found") + * ) + */ + public function getOrderById() + { + } + + /** + * @OA\Delete(path="/store/order/{orderId}", + * tags={"store"}, + * summary="Delete purchase order by ID", + * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + * operationId="deleteOrder", + * @OA\Parameter( + * name="orderId", + * in="path", + * required=true, + * description="ID of the order that needs to be deleted", + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1.0 + * ) + * ), + * @OA\Response(response=400, description="Invalid ID supplied"), + * @OA\Response(response=404, description="Order not found") + * ) + */ + public function deleteOrder() + { + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php new file mode 100644 index 0000000..caf7e92 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php @@ -0,0 +1,218 @@ += 1 and <= 10. Other values will generated exceptions", + "operationId": "getOrderById", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of pet that needs to be fetched", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "maximum": 10, + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "successful operation" + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + }, + "delete": { + "tags": [ + "store" + ], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + "operationId": "deleteOrder", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1 + } + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + } + }, + "/user": { + "post": { + "tags": [ + "user" + ], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "requestBody": { + "description": "Created user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithArray": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithArrayInput", + "requestBody": { + "description": "List of user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "requestBody": { + "description": "List of user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/login": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-Rate-Limit": { + "description": "calls per hour allowed by the user", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "X-Expires-After": { + "description": "date in UTC when token expires", + "schema": { + "type": "string", + "format": "date-time" + } + } + } + }, + "400": { + "description": "Invalid username/password supplied" + } + } + } + }, + "/user/logout": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "parameters": [], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/{username}": { + "get": { + "tags": [ + "user" + ], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation" + }, + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Updated user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be updated", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Updated user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "400": { + "description": "Invalid user supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + } + } + }, + "components": { + "schemas": { + "ApiResponse": { + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" + }, + "Category": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "xml": { + "name": "Category" + } + }, + "Order": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "petId": { + "type": "integer", + "format": "int64" + }, + "complete": { + "type": "boolean", + "default": false + }, + "quantity": { + "type": "integer", + "format": "int32" + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "description": "Order Status.", + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ] + } + }, + "type": "object", + "xml": { + "name": "Order" + } + }, + "Pet": { + "required": [ + "name", + "photoUrls" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "photoUrls": { + "type": "array", + "items": { + "type": "string" + }, + "xml": { + "name": "photoUrl", + "wrapped": true + } + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tag" + }, + "xml": { + "name": "tag", + "wrapped": true + } + }, + "status": { + "description": "pet status in the store", + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ] + } + }, + "type": "object", + "xml": { + "name": "Pet" + } + }, + "Tag": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "xml": { + "name": "Tag" + } + }, + "User": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "username": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "userStatus": { + "description": "User Status", + "type": "integer", + "format": "int32" + } + }, + "type": "object", + "xml": { + "name": "User" + } + } + }, + "securitySchemes": { + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + }, + "petstore_auth": { + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "http://petstore.swagger.io/oauth/dialog", + "scopes": { + "read:pets": "read your pets", + "write:pets": "modify pets in your account" + } + } + } + } + } + }, + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + }, + { + "name": "store", + "description": "Access to Petstore orders" + }, + { + "name": "user", + "description": "Operations about user", + "externalDocs": { + "description": "Find out more about our store", + "url": "http://swagger.io" + } + } + ], + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml new file mode 100644 index 0000000..ec62cd3 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml @@ -0,0 +1,669 @@ +openapi: 3.0.0 +info: + title: 'Swagger Petstore' + description: 'This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.' + termsOfService: 'http://swagger.io/terms/' + contact: + email: apiteam@swagger.io + license: + name: 'Apache 2.0' + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' + version: 1.0.0 +servers: + - + url: 'https://petstore.swagger.io/v3' + description: 'OpenApi host' +paths: + /pet/findByTags: + get: + tags: + - pet + summary: 'Finds Pets by tags' + description: 'Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.' + operationId: findPetsByTags + parameters: + - + name: tags + in: query + description: 'Tags to filter by' + required: true + style: form + schema: + type: array + items: + type: string + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid tag value' + deprecated: true + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + /pet/findByStatus: + get: + tags: + - pet + summary: 'Finds Pets by status' + description: 'Multiple status values can be provided with comma separated strings' + operationId: findPetsByStatus + parameters: + - + name: status + in: query + description: 'Status values that need to be considered for filter' + required: true + style: form + schema: + type: array + items: + type: string + default: available + enum: + - available + - pending + - sold + responses: + '200': + description: 'successful operation' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: 'Invalid status value' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}': + get: + tags: + - pet + summary: 'Find pet by ID' + description: 'Returns a single pet' + operationId: getPetById + parameters: + - + name: petId + in: path + description: 'ID of pet to return' + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: 'successful operation' + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + security: + - + api_key: [] + post: + tags: + - pet + summary: 'Updates a pet in the store with form data' + description: '' + operationId: updatePetWithForm + parameters: + - + name: petId + in: path + description: 'ID of pet that needs to be updated' + required: true + schema: + type: integer + format: int64 + requestBody: + required: false + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + description: 'Updated name of the pet' + type: string + status: + description: 'Updated status of the pet' + type: string + type: object + responses: + '405': + description: 'Invalid input' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + delete: + tags: + - pet + summary: 'Deletes a pet' + description: '' + operationId: deletePet + parameters: + - + name: petId + in: path + description: 'Pet id to delete' + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + /pet: + put: + tags: + - pet + summary: 'Update an existing pet.' + description: '' + operationId: updatePet + requestBody: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + '405': + description: 'Validation exception' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + post: + tags: + - pet + summary: 'Add a new pet to the store' + description: '' + operationId: addPet + requestBody: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '405': + description: 'Invalid input' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}/uploadImage': + post: + tags: + - pet + summary: 'uploads an image' + description: '' + operationId: uploadFile + parameters: + - + name: petId + in: path + description: 'ID of pet to update' + required: true + schema: + type: integer + format: int64 + requestBody: + required: true + content: + multipart/form-data: + schema: + required: + - file + properties: + additionalMetadata: + description: 'Additional data to pass to server' + type: string + file: + description: 'file to upload' + type: string + format: file + type: object + responses: + '200': + description: 'successful operation' + security: + - + petstore_auth: + - 'read:pets' + - 'write:pets' + /store/inventory: + get: + tags: + - store + summary: 'Returns pet inventories by status' + description: 'Returns a map of status codes to quantities' + operationId: getInventory + parameters: [] + responses: + '200': + description: 'successful operation' + security: + - + api_key: [] + /store/order: + post: + tags: + - store + summary: 'Place an order for a pet' + description: '' + operationId: placeOrder + requestBody: + description: 'order placed for purchasing the pet' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid Order' + '/store/order/{orderId}': + get: + tags: + - store + summary: 'Find purchase order by ID' + description: 'For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions' + operationId: getOrderById + parameters: + - + name: orderId + in: path + description: 'ID of pet that needs to be fetched' + required: true + schema: + type: integer + format: int64 + maximum: 10 + minimum: 1 + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + delete: + tags: + - store + summary: 'Delete purchase order by ID' + description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' + operationId: deleteOrder + parameters: + - + name: orderId + in: path + description: 'ID of the order that needs to be deleted' + required: true + schema: + type: integer + format: int64 + minimum: 1 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + /user: + post: + tags: + - user + summary: 'Create user' + description: 'This can only be done by the logged in user.' + operationId: createUser + requestBody: + description: 'Created user object' + required: true + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithArray: + post: + tags: + - user + summary: 'Creates list of users with given input array' + description: '' + operationId: createUsersWithArrayInput + requestBody: + description: 'List of user object' + required: true + content: + multipart/form-data: + schema: + type: array + items: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithList: + post: + tags: + - user + summary: 'Creates list of users with given input array' + description: '' + operationId: createUsersWithListInput + requestBody: + description: 'List of user object' + required: true + content: + multipart/form-data: + schema: + type: array + items: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/login: + get: + tags: + - user + summary: 'Logs user into the system' + description: '' + operationId: loginUser + parameters: + - + name: username + in: query + description: 'The user name for login' + required: true + schema: + type: string + - + name: password + in: query + description: 'The password for login in clear text' + schema: + type: string + responses: + '200': + description: 'successful operation' + headers: + X-Rate-Limit: + description: 'calls per hour allowed by the user' + schema: + type: integer + format: int32 + X-Expires-After: + description: 'date in UTC when token expires' + schema: + type: string + format: date-time + '400': + description: 'Invalid username/password supplied' + /user/logout: + get: + tags: + - user + summary: 'Logs out current logged in user session' + description: '' + operationId: logoutUser + parameters: [] + responses: + default: + description: 'successful operation' + '/user/{username}': + get: + tags: + - user + summary: 'Get user by user name' + description: '' + operationId: getUserByName + parameters: + - + name: username + in: path + description: 'The name that needs to be fetched. Use user1 for testing. ' + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' + put: + tags: + - user + summary: 'Updated user' + description: 'This can only be done by the logged in user.' + operationId: updateUser + parameters: + - + name: username + in: path + description: 'name that need to be updated' + required: true + schema: + type: string + requestBody: + description: 'Updated user object' + required: true + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/User' + responses: + '400': + description: 'Invalid user supplied' + '404': + description: 'User not found' + delete: + tags: + - user + summary: 'Delete user' + description: 'This can only be done by the logged in user.' + operationId: deleteUser + parameters: + - + name: username + in: path + description: 'The name that needs to be deleted' + required: true + schema: + type: string + responses: + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' +components: + schemas: + ApiResponse: + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string + type: object + Category: + properties: + id: + type: integer + format: int64 + name: + type: string + type: object + xml: + name: Category + Order: + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + complete: + type: boolean + default: false + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + description: 'Order Status.' + type: string + enum: + - placed + - approved + - delivered + type: object + xml: + name: Order + Pet: + required: + - name + - photoUrls + properties: + id: + type: integer + format: int64 + name: + type: string + example: doggie + category: + $ref: '#/components/schemas/Category' + photoUrls: + type: array + items: + type: string + xml: + name: photoUrl + wrapped: true + tags: + type: array + items: + $ref: '#/components/schemas/Tag' + xml: + name: tag + wrapped: true + status: + description: 'pet status in the store.' + type: string + enum: + - available + - pending + - sold + type: object + xml: + name: Pet + Tag: + properties: + id: + type: integer + format: int64 + name: + type: string + type: object + xml: + name: Tag + User: + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + description: 'User Status.' + type: integer + format: int32 + type: object + xml: + name: User + securitySchemes: + api_key: + type: apiKey + name: api_key + in: header + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' + scopes: + 'read:pets': 'read your pets' + 'write:pets': 'modify pets in your account' +tags: + - + name: pet + description: 'Everything about your Pets' + externalDocs: + description: 'Find out more' + url: 'http://swagger.io' + - + name: store + description: 'Access to Petstore orders' + - + name: user + description: 'Operations about user' + externalDocs: + description: 'Find out more about our store' + url: 'http://swagger.io' +externalDocs: + description: 'Find out more about Swagger' + url: 'http://swagger.io' diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php new file mode 100644 index 0000000..79c309b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php @@ -0,0 +1,38 @@ +type = static::TYPE; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php new file mode 100644 index 0000000..914ef3c --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php @@ -0,0 +1,40 @@ +getAnnotationsOfType(Schema::class, true); + /** @var Operation[] $operations */ + $operations = $analysis->getAnnotationsOfType(Operation::class); + + foreach ($operations as $operation) { + if ($operation->x !== Generator::UNDEFINED && array_key_exists(self::X_QUERY_AGS_REF, $operation->x)) { + if ($schema = $this->schemaForRef($schemas, $operation->x[self::X_QUERY_AGS_REF])) { + $this->expandQueryArgs($operation, $schema); + $this->cleanUp($operation); + } + } + } + } + + /** + * Find schema for the given ref. + */ + protected function schemaForRef(array $schemas, string $ref) + { + foreach ($schemas as $schema) { + if (Components::ref($schema) === $ref) { + return $schema; + } + } + + return null; + } + + /** + * Expand the given operation by injecting parameters for all properties of the given schema. + */ + protected function expandQueryArgs(Operation $operation, Schema $schema) + { + if ($schema->properties == Generator::UNDEFINED || !$schema->properties) { + return; + } + + $operation->parameters = $operation->parameters == Generator::UNDEFINED ? [] : $operation->parameters; + foreach ($schema->properties as $property) { + $parameter = new Parameter([ + 'name' => $property->property, + 'in' => 'query', + 'required' => false, + ]); + $operation->parameters[] = $parameter; + } + } + + /** + * Clean up. + */ + protected function cleanUp($operation) + { + unset($operation->x[self::X_QUERY_AGS_REF]); + if (!$operation->x) { + $operation->x = Generator::UNDEFINED; + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php new file mode 100644 index 0000000..1e78978 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php @@ -0,0 +1,17 @@ +addPsr4('App\\', __DIR__ . '/app'); +// and our custom processor +$classLoader->addPsr4('SchemaQueryParameterProcessor\\', __DIR__); + +$generator = new Generator(); + +// merge our custom processor +$processors = []; +foreach ($generator->getProcessors() as $processor) { + $processors[] = $processor; + if ($processor instanceof BuildPaths) { + $processors[] = new SchemaQueryParameter(); + } +} + +$options = [ + 'processors' => $processors, +]; + +$openapi = $generator + ->setProcessors($processors) + ->generate([__DIR__ . '/app']); +//file_put_contents(__DIR__ . '/schema-query-parameter.yaml', $openapi->toYaml()); +echo $openapi->toYaml(); diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml new file mode 100644 index 0000000..c6a86d3 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml @@ -0,0 +1,62 @@ +openapi: 3.0.0 +info: + title: 'Example of using a custom processor in swagger-php' + version: 1.0.0 +paths: + '/products/{id}': + get: + tags: + - Products + operationId: 399b71a7672f0a46be1b5f4c120c355d + parameters: + - + name: id + in: path + required: true + responses: + '200': + description: 'A single product' + content: + application/json: + schema: + $ref: '#/components/schemas/Product' + /products/search: + get: + tags: + - Products + summary: 'Controller that takes all `Product` properties as query parameter.' + operationId: 178f74de3417eec20dee95709821e6ca + parameters: + - + name: id + in: query + required: false + - + name: name + in: query + required: false + responses: + '200': + description: 'A list of matching products' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Product' +components: + schemas: + Product: + title: Product + description: 'A simple product model' + properties: + id: + description: 'The unique identifier of a product in our catalog.' + type: integer + format: int64 + example: 1 + name: + type: string + format: int64 + example: 1 + type: object diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php new file mode 100644 index 0000000..92fee26 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php @@ -0,0 +1,20 @@ +openapi->components) && is_iterable($analysis->openapi->components->schemas)) { + usort($analysis->openapi->components->schemas, function ($a, $b) { + return strcmp($a->schema, $b->schema); + }); + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php new file mode 100644 index 0000000..8fa6f9b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php @@ -0,0 +1,46 @@ + '$response.body#/username'])] + public function getRepositoriesByOwner($username) + { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}', + operationId: 'getRepository', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response( + response: 200, + description: 'The repository', + content: new OAT\JsonContent(ref: '#/components/schemas/repository'), + links: [ + new OAT\Link(link: 'repositoryPullRequests', ref: '#/components/links/RepositoryPullRequests'), + ] + ), + ] + ) + ] + #[OAT\Link(link: 'UserRepository', operationId: 'getRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] + public function getRepository() + { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}/{state}/pullrequests', + operationId: 'getPullRequestsByRepository', + responses: [ + new OAT\Response(response: 200, description: 'An array of pull request objects', content: new OAT\JsonContent(type: 'array', items: new OAT\Items(ref: '#/components/schemas/pullrequest'))), + ] + ) + ] + #[OAT\Link(link: 'RepositoryPullRequests', operationId: 'getPullRequestsByRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] + public function getPullRequestsByRepository( + #[OAT\PathParameter()] string $username, + #[OAT\PathParameter()] string $slug, + #[OAT\PathParameter()] State $state + ) { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}', + operationId: 'getPullRequestsById', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response(response: 200, description: 'A pull request object', content: new OAT\JsonContent(ref: '#/components/schemas/pullrequest'), links: [new OAT\Link(link: 'pullRequestMerge', ref: '#/components/links/PullRequestMerge')]), + ] + ) + ] + public function getPullRequestsById() + { + } + + #[OAT\Post( + path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge', + operationId: 'mergePullRequest', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response(response: 204, description: 'The PR was successfully merged'), + ] + ) + ] + #[OAT\Link(link: 'PullRequestMerge', operationId: 'mergePullRequest', parameters: ['username' => '$response.body#/author/username', 'slug' => '$response.body#/repository/slug', 'pid' => '$response.body#/id'])] + public function mergePullRequest() + { + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php new file mode 100644 index 0000000..56e5a4f --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php @@ -0,0 +1,19 @@ + 'pong'])] + public array $arrayShape; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php new file mode 100644 index 0000000..7b8f7d7 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php @@ -0,0 +1,16 @@ +toYaml(); +``` +Documentation of how to use the `Generator` class can be found in the [Generator reference](https://zircote.github.io/swagger-php/reference/generator). + +### Usage from the Command Line Interface + +The `openapi` command line interface can be used to generate the documentation to a static yaml/json file. + +```bash +./vendor/bin/openapi --help +``` +Starting with version 4 the default analyser used on the command line is the new `ReflectionAnalyser`. + +Using the `--legacy` flag (`-l`) the legacy `TokenAnalyser` can still be used. + +### Usage from the Deserializer + +Generate the OpenApi annotation object from a json string, which makes it easier to manipulate objects programmatically. + +```php +deserialize($jsonString, 'OpenApi\Annotations\OpenApi'); +echo $openapi->toJson(); +``` + +### Usage from [docker](https://docker.com) + +Generate the swagger documentation to a static json file. + +``` +docker run -v "$PWD":/app -it tico/swagger-php --help +``` + +## More on OpenApi & Swagger + +- https://swagger.io +- https://www.openapis.org +- [OpenApi Documentation](https://swagger.io/docs/) +- [OpenApi Specification](http://swagger.io/specification/) +- [Related projects](docs/related-projects.md) + +## Contributing + +Feel free to submit [Github Issues](https://github.com/zircote/swagger-php/issues) +or pull requests. + +The documentation website is build from the [docs](docs/) folder with [vuepress](https://vuepress.vuejs.org). + +Make sure pull requests pass [PHPUnit](https://phpunit.de/) +and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PSR-2) tests. + +### To run both unit tests and linting execute: +```bash +composer test +``` + +### Running unit tests only: +```bash +./bin/phpunit +``` + +### Regenerate annotation/attribute reference markup docs +```bash +composer docs:refgen +``` + +### Running linting only: +```bash +composer lint +``` + +### To make `php-cs-fixer` fix linting errors: +```bash +composer cs +``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/bin/openapi b/vendor/passkit/vendor/zircote/swagger-php/bin/openapi new file mode 100755 index 0000000..6f78272 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/bin/openapi @@ -0,0 +1,234 @@ +#!/usr/bin/env php + false, + 'output' => false, + 'format' => 'auto', + 'exclude' => [], + 'pattern' => '*.php', + 'bootstrap' => false, + 'help' => false, + 'debug' => false, + 'processor' => [], + 'version' => null, +]; +$aliases = [ + 'l' => 'legacy', + 'o' => 'output', + 'e' => 'exclude', + 'n' => 'pattern', + 'b' => 'bootstrap', + 'h' => 'help', + 'd' => 'debug', + 'p' => 'processor', + 'f' => 'format' +]; +$needsArgument = [ + 'output', + 'format', + 'exclude', + 'pattern', + 'bootstrap', + 'processor', + 'version', +]; +$paths = []; +$error = false; + +try { + // Parse cli arguments + for ($i = 1; $i < $argc; $i++) { + $arg = $argv[$i]; + if (substr($arg, 0, 2) === '--') { // longopt + $option = substr($arg, 2); + } elseif ($arg[0] === '-') { // shortopt + if (array_key_exists(substr($arg, 1), $aliases)) { + $option = $aliases[$arg[1]]; + } else { + throw new Exception('Unknown option: "' . $arg . '"'); + } + } else { + $paths[] = $arg; + continue; + } + if (array_key_exists($option, $options) === false) { + throw new Exception('Unknown option: "' . $arg . '"'); + } + if (in_array($option, $needsArgument)) { + if (empty($argv[$i + 1]) || $argv[$i + 1][0] === '-') { + throw new Exception('Missing argument for "' . $arg . '"'); + } + if (is_array($options[$option])) { + $options[$option][] = $argv[$i + 1]; + } else { + $options[$option] = $argv[$i + 1]; + } + $i++; + } else { + $options[$option] = true; + } + } +} catch (\Exception $e) { + $error = $e->getMessage(); +} + +if (!$error && $options['bootstrap']) { + if (is_readable($options['bootstrap']) === false) { + $error = 'Invalid `--bootstrap` value: "'.$options['bootstrap'].'"'; + } else { + require_once($options['bootstrap']); + } +} +if (count($paths) === 0) { + $error = 'Specify at least one path.'; +} + +$logger = new ConsoleLogger($options['debug']); + +if ($options['help'] === false && $error) { + $logger->error('', ['prefix' => '']); + $logger->error($error); + // Show help + $options['help'] = true; +} +$defaultVersion = OpenApi::DEFAULT_VERSION; +if ($options['help']) { + $help = <<info($help); + exit(1); +} + +$errorTypes = [ + E_ERROR => 'Error', + E_WARNING => 'Warning', + E_PARSE => 'Parser error', + E_NOTICE => 'Notice', + E_STRICT => 'Strict', + E_DEPRECATED => 'Deprecated', + E_CORE_ERROR => 'Error(Core)', + E_CORE_WARNING => 'Warning(Core)', + E_COMPILE_ERROR => 'Error(compile)', + E_COMPILE_WARNING => 'Warning(Compile)', + E_RECOVERABLE_ERROR => 'Error(Recoverable)', + E_USER_ERROR => 'Error', + E_USER_WARNING => 'Warning', + E_USER_NOTICE => 'Notice', + E_USER_DEPRECATED => 'Deprecated', +]; +set_error_handler(function ($errno, $errstr, $file, $line) use ($errorTypes, $options, $logger) { + if (!(error_reporting() & $errno)) { + // This error code is not included in error_reporting + return; + } + $type = array_key_exists($errno, $errorTypes) ? $errorTypes[$errno] : 'Error'; + if ($type === 'Deprecated') { + $logger->info($errstr, ['prefix' => $type . ': ']); + } else { + $logger->error($errstr, ['prefix' => $type . ': ']); + } + + if ($options['debug']) { + $logger->info(' in '.$file.' on line '.$line); + } + if (substr($type, 0, 5) === 'Error') { + exit($errno); + } +}); + +set_exception_handler(function ($exception) use ($logger) { + $logger->error($exception); + exit($exception->getCode() ?: 1); +}); + +$exclude = null; +if ($options['exclude']) { + $exclude = $options['exclude']; + if (strpos($exclude[0], ',') !== false) { + $exploded = explode(',', $exclude[0]); + $logger->error('Comma-separated exclude paths are deprecated, use multiple --exclude statements: --exclude '.$exploded[0].' --exclude '.$exploded[1]); + $exclude[0] = array_shift($exploded); + $exclude = array_merge($exclude, $exploded); + } +} + +$pattern = "*.php"; +if ($options['pattern']) { + $pattern = $options['pattern']; +} + +$generator = new Generator($logger); +foreach ($options["processor"] as $processor) { + $class = '\OpenApi\Processors\\'.$processor; + if (class_exists($class)) { + $processor = new $class(); + } elseif (class_exists($processor)) { + $processor = new $processor(); + } + $generator->addProcessor($processor); +} + +$analyser = $options['legacy'] + ? new TokenAnalyser() + : new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); + +$openapi = $generator + ->setVersion($options['version']) + ->setAnalyser($analyser) + ->generate(Util::finder($paths, $exclude, $pattern)); + +if ($options['output'] === false) { + if (strtolower($options['format']) === 'json') { + echo $openapi->toJson(); + } else { + echo $openapi->toYaml(); + } + echo "\n"; +} else { + if (is_dir($options['output'])) { + $options['output'] .= '/openapi.yaml'; + } + $openapi->saveAs($options['output'], $options['format']); +} +exit($logger->loggedMessageAboveNotice() ? 1 : 0); diff --git a/vendor/passkit/vendor/zircote/swagger-php/composer.json b/vendor/passkit/vendor/zircote/swagger-php/composer.json new file mode 100644 index 0000000..8728e63 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/composer.json @@ -0,0 +1,112 @@ +{ + "name": "zircote/swagger-php", + "type": "library", + "license": "Apache-2.0", + "bin": [ + "bin/openapi" + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "keywords": [ + "json", + "rest", + "api", + "service discovery" + ], + "homepage": "https://github.com/zircote/swagger-php/", + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "config": { + "bin-dir": "bin", + "optimize-autoloader": true, + "sort-packages": true, + "allow-plugins": { + "composer/package-versions-deprecated": true + } + }, + "minimum-stability": "stable", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "require": { + "php": ">=7.2", + "ext-json": "*", + "doctrine/annotations": "^1.7", + "psr/log": "^1.1 || ^2.0 || 3.0", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "autoload-dev": { + "exclude-from-classmap": [ + "/tests/Fixtures" + ], + "psr-4": { + "OpenApi\\Tools\\": "tools/src/", + "OpenApi\\Tests\\": "tests/", + "AnotherNamespace\\": "tests/Fixtures/AnotherNamespace" + } + }, + "scripts-descriptions": { + "cs": "Fix all codestyle issues", + "lint": "Test codestyle", + "test": "Run all non-legacy and codestyle tests", + "testlegacy": "Run tests using the legacy TokenAnalyser", + "testall": "Run all tests (test + testlegacy)", + "analyse": "Run static analysis (phpstan/psalm)", + "spectral": "Run spectral lint over all .yaml files in the Examples folder", + "docs:refgen": "Rebuild the annotations/attributes reference markup files", + "docs:dev": "Run dev server for local development of gh-pages", + "docs:build": "Re-build static gh-pages" + }, + "scripts": { + "cs": "php-cs-fixer fix --allow-risky=yes", + "lint": "@cs --dry-run", + "test": [ + "phpunit", + "@lint" + ], + "testlegacy": "export PHPUNIT_ANALYSER=legacy && phpunit", + "testall": [ + "@test", + "@testlegacy" + ], + "analyse": [ + "phpstan analyse --memory-limit=2G", + "psalm" + ], + "spectral": "for ff in `find Examples -name '*.yaml'`; do spectral lint $ff; done", + "docs:refgen": "php tools/refgen.php", + "docs:dev": "cd docs && npm run dev", + "docs:build": [ + "@docs:refgen", + "cd docs && npm run build" + ] + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js new file mode 100644 index 0000000..468749b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js @@ -0,0 +1,82 @@ +function getGuideSidebar() { + return [ + { + text: 'Introduction', + children: [ + { text: 'What is Swagger-PHP?', link: '/guide/' }, + { text: 'Installation', link: '/guide/installation' }, + { text: 'Generating OpenAPI documents', link: '/guide/generating-openapi-documents' }, + ] + }, + { + text: 'Annotating your code', + children: [ + { text: 'Attributes', link: '/guide/attributes' }, + { text: 'Annotations', link: '/guide/annotations' }, + { text: 'Required elements', link: '/guide/required-elements' }, + { text: 'Common techniques', link: '/guide/common-techniques' }, + ] + }, + { + text: 'Upgrading', + children: [ + { text: 'Migration from 3.x to 4.x', link: '/guide/migrating-to-v4' }, + { text: 'Migration from 2.x to 3.x', link: '/guide/migrating-to-v3' }, + ] + }, + { + text: 'Other', + children: [ + { text: 'Cookbook', link: '/guide/cookbook' }, + { text: 'FAQ', link: '/guide/faq' }, + { text: 'Under the hood', link: '/guide/under-the-hood' }, + { text: 'Related Projects', link: '/related-projects' }, + ] + }, + ] +} + +function getReferenceSidebar() { + return [ + { + text: 'Reference', + children: [ + { text: 'Attributes', link: '/reference/attributes' }, + { text: 'Annotations', link: '/reference/annotations' }, + ] + }, + { + text: 'Api', + children: [ + { text: 'Generator', link: '/reference/generator' }, + { text: 'Processors', link: '/reference/processors' }, + ] + }, + ] +} + + +module.exports = { + title: "Swagger-PHP", + base: "/swagger-php/", + description: "Generate OpenAPI documentation for your RESTful API.", + themeConfig: { + repo: 'zircote/swagger-php', + docsDir: 'docs', + docsBranch: 'master', + editLinks: false, + editLinkText: 'Edit this page on GitHub', + + nav: [ + { text: "User Guide", link: "/guide/" }, + { text: "Reference", link: "/reference/" }, + { text: "OpenApi", link: "https://oai.github.io/Documentation/" }, + { text: "Releases", link: "https://github.com/zircote/swagger-php/releases" }, + ], + + sidebar: { + '/guide/': getGuideSidebar(), + '/reference/': getReferenceSidebar() + } + } +}; diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue new file mode 100644 index 0000000..bec5d06 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue @@ -0,0 +1,31 @@ + + + diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css new file mode 100644 index 0000000..557687d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css @@ -0,0 +1,30 @@ +/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */ +:root { + --c-brand: #74a535; + --c-brand-light: #94c73d; + + --c-bg: #fefefe; +} + +.tabs-component { + margin: 2em 0; +} + +.tabs-component-panels { + padding: 0 0; + border: none; +} + +.tabs-component-tab-a { + padding: 0.5em; +} + +.tabs-component-tab { + transform: none; +} + +@media (min-width: 700px) { + .tabs-component-tab.is-active { + border-bottom: solid 1px #ddd; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js new file mode 100644 index 0000000..9d856a3 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js @@ -0,0 +1,14 @@ +import DefaultTheme from "vitepress/theme"; +import {Tabs, Tab} from 'vue3-tabs-component'; +import Codeblock from "./components/Codeblock.vue"; +import "./tabs.css"; +import "./custom.css"; + +export default { + ...DefaultTheme, + enhanceApp({ app, router, siteData }) { + app.component('tabs', Tabs); + app.component('tab', Tab); + app.component('codeblock', Codeblock); + }, +}; diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css new file mode 100644 index 0000000..9fa151d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css @@ -0,0 +1,80 @@ +.tabs-component { + margin: 2em 0; +} + +.tabs-component-tabs { + border: solid 1px #ddd; + border-radius: 6px; + margin-bottom: 5px; +} + +@media (min-width: 700px) { + .tabs-component-tabs { + border: 0; + align-items: stretch; + display: flex; + justify-content: flex-start; + margin-bottom: -1px; + } +} + +.tabs-component-tab { + color: #999; + font-size: 14px; + font-weight: 600; + margin-right: 0; + list-style: none; +} + +.tabs-component-tab:hover { + color: #666; +} + +.tabs-component-tab.is-active { + color: #000; +} + +.tabs-component-tab.is-disabled * { + color: #cdcdcd; + cursor: not-allowed !important; +} + +@media (min-width: 700px) { + .tabs-component-tab { + background-color: #fff; + border: solid 1px #ddd; + border-radius: 3px 3px 0 0; + margin-right: 0.5em; + transform: translateY(2px); + transition: transform 0.3s ease; + } + + .tabs-component-tab.is-active { + border-bottom: solid 1px #fff; + z-index: 2; + transform: translateY(0); + } +} + +.tabs-component-tab-a { + align-items: center; + color: inherit; + display: flex; + padding: 0.5em 1.25em; + text-decoration: none; +} + +.tabs-component-panels { + padding: 1em 0; +} + +@media (min-width: 700px) { + .tabs-component-panels { + background-color: #fff; + border: solid 1px #ddd; + border-radius: 6px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); + padding: 1em 1em; + position: relative; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md new file mode 100644 index 0000000..f73f609 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md @@ -0,0 +1,141 @@ +# Annotations + +::: tip Namespace +Using a namespace alias simplifies typing and improves readability. + +All annotations are in the `OpenApi\Annotations` namespace. +::: + +Since Annotations are technically PHP comments, adding `use OpenApi\Annotations as OA;` is strictly speaking not necessary. +However, doctrine will be quite specific about whether an alias is valid or not. + +`swagger-php` will automatically register the `@OA` alias so all annotations can be used using the `@OA` shortcut without +any additional work. + +## Doctrine +Annotations are PHP comments (docblocks) containing [doctrine style annotations](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +::: info +All documentation related to doctrine applies to annotations only. +::: + +**Example:** +```php + openapi --bootstrap constants.php +``` +::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md new file mode 100644 index 0000000..ce6b229 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md @@ -0,0 +1,41 @@ +# Attributes + +::: tip Namespace +Using a namespace alias simplifies typing and improves readability. + +All attributes are in the `OpenApi\Attributes` namespace. +::: + +## Nesting + +Similar to annotations attributes can be top level or nested. However, attributes **may be put at the same level** if +there is no ambiguity. `swagger-php` will then merge attributes according to the defined rules about parent/child +relationships. + +**Example** + +Nested: +```php + #[OA\Get( + path: '/api/users', + responses: [ + new OA\Response(response: 200, description: 'AOK'), + new OA\Response(response: 401, description: 'Not allowed'), + ] + )] + public function users() { /* ... */ } +``` + +Not nested: +```php + #[OA\Get(path: '/api/users')] + #[OA\Response(response: 200, description: 'AOK')] + #[OA\Response(response: 401, description: 'Not allowed')] + public function users() { /* ... */ } +``` + +Depending on how much nesting there is this can make things a bit simpler and easier to read. + +::: warning Top level only +Automatic merging of attributes works only at the top level - in the example that would be the method `users()`. +::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md new file mode 100644 index 0000000..dd3a19f --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md @@ -0,0 +1,190 @@ +# Common techniques + +## Annotation placement + +You shouldn't place all annotations inside one big block, but scatter them throughout your codebase as close to the +relevant source code as appropriate. + +`swagger-php` will scan your project and merge all meta-data into one` @OA\OpenApi` annotation. + +::: warning +As of `swagger-php` v4 all annotations or attributes must be associated with +a structural element (`class`, `method`, `parameter` or `enum`) +::: + +## Context awareness + +`swagger-php` looks at the context of the annotation and will augment it with things like `property name`, +`data type` (doctype and native type hints) as well as a couple other things. + +This means in a lot of cases it is not necessary to explicitly document all details. + +**Example** +```php + new OA\Property(property: 'name', type: 'string'), + 'email' => new OA\Property(property: 'email', type: 'string'), + ] +)] +class User {} +``` + +## Using class name as type instead of references +Typically, when referencing schemas this is done using `$ref`'s + +```php +#[OAT\Schema(schema: 'user')] +class User +{ +} + +#[OAT\Schema()] +class Book +{ + /** + * @var User + */ + #[OAT\Property(ref: '#/components/schemas/user')] + public $author; +} +``` + +This works, but is not very convenient. + +First, when using custom schema names (`schema: 'user'`), this needs to be taken into account everywhere. +Secondly, having to write `ref: '#/components/schemas/user'` is tedious and error-prone. + +Using attributes all this changes as we can take advantage of PHP itself by referring to a schema by its (fully qualified) +class name. + +With the same `User` schema as before, the `Book::author` property could be written in a few different ways + +```php + #[OAT\Property()] + public User author; +``` + +**or** + +```php + /** + * @var User + */ + #[OAT\Property()] + public author; +``` + +**or** + +```php + #[OAT\Property(type: User::class)] + public author; +``` + +## Enums +As of PHP 8.1 there is native support for `enum`'s. + +`swagger-php` supports enums in much the same way as class names can be used to reference schemas. + +**Example** + +```php +#[Schema()] +enum State +{ + case OPEN; + case MERGED; + case DECLINED; +} + +#[Schema()] +class PullRequest + #[OAT\Property()] + public State $state +} +``` + +However, in this case the schema generated for `State` will be an enum: + +```yaml +components: + schemas: + PullRequest: + properties: + state: + $ref: '#/components/schemas/State' + type: object + State: + type: string + enum: + - OPEN + - MERGED + - DECLINED +``` + +## Multi value query parameter: `&q[]=1&q[]=1` + +PHP allows to have query parameters multiple times in the url and will combine the values to an array if the parameter +name uses trailing `[]`. In fact, it is possible to create nested arrays too by using more than one pair of `[]`. + +In terms of OpenAPI, the parameters can be considered a single parameter with a list of values. + +```php +/** + * @OA\Get( + * path="/api/endpoint", + * description="The endpoint", + * operationId="endpoint", + * tags={"endpoints"}, + * @OA\Parameter( + * name="things[]", + * in="query", + * description="A list of things.", + * required=false, + * @OA\Schema( + * type="array", + * @OA\Items(type="integer") + * ) + * ), + * @OA\Response(response="200", description="All good") + * ) + */ +``` + +The corresponding bit of the spec will look like this: + +```yaml + parameters: + - + name: 'things[]' + in: query + description: 'A list of things.' + required: false + schema: + type: array + items: + type: integer +``` + +`swagger-ui` will show a form that allows to add/remove items (`integer` values in this case) to/from a list +and post those values as something like ```?things[]=1&things[]=2&things[]=0``` + +## Custom response classes + +Even with using refs there is a bit of overhead in sharing responses. One way around that is to write +your own response classes. +The beauty is that in your custom `__construct()` method you can prefill as much as you need. + +Best of all, this works for both annotations and attributes. + +Example: +```php +use OpenApi\Attributes as OA; + +/** + * @Annotation + */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] +class BadRequest extends OA\Response +{ + public function __construct() + { + parent::__construct(response: 400, description: 'Bad request'); + } +} + +class Controller +{ + + #[OA\Get(path: '/foo', responses: [new BadRequest()])] + public function get() + { + } + + #[OA\Post(path: '/foo')] + #[BadRequest] + public function post() + { + } + + /** + * @OA\Delete( + * path="/foo", + * @BadRequest() + * ) + */ + public function delete() + { + } +} +``` + +::: tip Annotations only? +If you are only interested in annotations you canleave out the attribute setup line (`#[\Attribute...`) for `BadRequest`. + +Furthermore, your custom annotations should extend from the `OpenApi\Annotations` namespace. +::: + +## Annotating class constants +```php +use OpenApi\Attributes as OA; + +#[OA\Schema()] +class Airport +{ + #[OA\Property(property='kind')] + public const KIND = 'Airport'; +} +``` +The `const` property is supported in OpenApi 3.1.0. +```yaml +components: + schemas: + Airport: + properties: + kind: + type: string + const: Airport +``` +For 3.0.0 this is serialized into a single value `enum`. +```yaml +components: + schemas: + Airport: + properties: + kind: + type: string + enum: + - Airport +``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md new file mode 100644 index 0000000..ee16686 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md @@ -0,0 +1,80 @@ +# FAQ + +## Warning: Required `@OA\Info()` not found + +With adding support for [PHP attributes](https://www.php.net/manual/en/language.attributes.php) in version 4, some +architectural changes had to be made. + +One of those changes is that placing annotations in your source files is now subject to the same limitations as attributes. +These limits are dictated by the PHP reflection API, specifically where it provides access to attributes and doc comments. + +This means stand-alone annotations are no longer supported and ignored as `swagger-php` cannot 'see' them any more. + +Supported locations: +* class +* interface +* trait +* method +* property +* class/interface const + +Most commonly this manifests with a warning about the required `@OA\Info` not being found. While most annotations have specific +related code, the info annotation (and a few more) is kind of global. + +The simplest solution to avoid this issue is to add a 'dummy' class to the docblock and add +all 'global' annotations (e.g. `Tag`, `Server`, `SecurityScheme`, etc.) **in a single docblock** to that class. + +```php +/** + * @OA\Tag( + * name="user", + * description="User related operations" + * ) + * @OA\Info( + * version="1.0", + * title="Example API", + * description="Example info", + * @OA\Contact(name="Swagger API Team") + * ) + * @OA\Server( + * url="https://example.localhost", + * description="API server" + * ) + */ +class OpenApiSpec +{ +} +``` + +## Skipping unknown `\SomeClass` + +This message means that `swagger-php` has tried to use reflection to inspect `\SomeClass` and that PHP could not find/load +that class. Effectively, this means that `class_exists("\SomeClass")` returns `false`. + +### Using the `-b` `--bootstrap` option + +There are a number of reasons why this could happen. If you are using the `openapi` command line tool from a global +installation typically the application classloader (composer) is not active. +With you application root being `myapp` you could try: + +```shell +openapi -b myapp/vendor/autoload.php myapp/src +``` + +The `-b` allows to execute some extra PHP code to load whatever is needed to register your apps classloader with PHP. + +### Namespace mismatch + +Another reason for this error could be that your class actually has the wrong namespace (or no namespace at all!). + +Depending on your framework this might still work in the context of your app, but the composer autoloader +alone might not be able to load your class (assuming you are using composer). + +## No output from `openapi` command line tool + +Depending on your PHP configuration, running the `openapi` command line tool might result in no output at all. + +The reason for this is that `openapi` currently uses the [`error_log`](https://www.php.net/manual/en/function.error-log.php) +function for all output. + +So if this is configured to write to a file, then it will seem like the command is broken. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md new file mode 100644 index 0000000..c2eabcd --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md @@ -0,0 +1,60 @@ +# Generating OpenAPI documents + +## `./bin/openapi` + +`swagger-php` includes a command line tool `./bin/openapi`. This can be used to generate OpenAPI documents. + +```shell +> ./vendor/bin/openapi app -o openapi.yaml +``` + +::: tip Output Format +By default the output format is YAML. If a filename is given (via `--output` or `-o`) +the tool will use the file extension to determine the format. + +The `--format` option can be used to force a specific format. +::: + +For a list of all available options use the `-h` option + +```shell +> ./bin/openapi -h + +Usage: openapi [--option value] [/path/to/project ...] + +Options: + --legacy (-l) Use legacy TokenAnalyser; default is the new ReflectionAnalyser + --output (-o) Path to store the generated documentation. + ex: --output openapi.yaml + --exclude (-e) Exclude path(s). + ex: --exclude vendor,library/Zend + --pattern (-n) Pattern of files to scan. + ex: --pattern "*.php" or --pattern "/\.(phps|php)$/" + --bootstrap (-b) Bootstrap a php file for defining constants, etc. + ex: --bootstrap config/constants.php + --processor Register an additional processor. + --format Force yaml or json. + --debug Show additional error information. + --version The OpenAPI version; defaults to 3.0.0. + --help (-h) Display this help message. +``` + +## Using PHP + +Depending on your use case PHP code can also be used to generate OpenAPI documents in a more dynamic way. + +In its simplest form this may look something like + +```php +toYaml(); +``` + +::: tip Programming API +Details about the `swagger-php` API can be found in the [reference](../reference/index.md). +::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md new file mode 100644 index 0000000..e8c555b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md @@ -0,0 +1,20 @@ +# What is Swagger-PHP? + +`swagger-php` is a library that extracts API metadata from your PHP source code files. + +The idea is to add `swagger-php` [annotations](annotations.md) or [attributes](attributes.md) +next to the relevant PHP code in your application. These will contain the details about your API and +`swagger-php` will convert those into machine-readable [OpenAPI documentation](https://oai.github.io/Documentation/specification.html). + +By adding your API documentation next to the corresponding source code (same file!) makes it easy to keep it up-to-date +as all details can be modified in one place. + +::: tip Annotating vs. Annotations +When talking about annotating your code we mean the act of adding meta-data to your codebase. This can be done by +either adding [`Annotations`](annotations.md) or [`Attributes`](attributes.md). +::: + +::: warning Requirements +Using `swagger-php` requires a minimum of **PHP 7.2** for using annotations and +at least **PHP 8.1** to use attributes. +::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md new file mode 100644 index 0000000..ba07e5b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md @@ -0,0 +1,20 @@ +# Installation + +## Per project + +We recommend adding `swagger-php` to your project using [Composer](https://getcomposer.org) + +```shell +> composer require zircote/swagger-php +``` + +## Globally + +Alternatively, use the composer `global` argument to install `swagger-php` globally. + +```shell +> composer global require zircote/swagger-php +``` +::: warning PATH variables +Remember to add the `~/.composer/vendor/bin` directory to the PATH in your environment. +::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md new file mode 100644 index 0000000..641e72d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md @@ -0,0 +1,58 @@ +# Migrating to v3 + +Swagger-PHP 3.x generates an openapi.json file that follows the [OpenAPI Version 3.0.x Specification](https://github.com/OAI/OpenAPI-Specification). + +If you need to output the older 2.x specification use OpenApi-php 2.x + +## The default output changed from json to yaml + +This aligns better with the direction of the swagger documentation and examples. +Annotations can't be used as string anymore, you'll need to call `toYaml()` or `toJson()` if you prefer the json format. + +## Updated CLI + +- Added colors +- No output for successful execution (Removed summary) +- non-zero exit when an error occurred. +- Defaults to yaml +- Defaults to stdout. To save to openapi.yaml use `-o` or `>` + +## Changed annotations + +### SWG is renamed to OA + +The namespace is renamed from SWG (Swagger) to OA (OpenApi) + +### @SWG\Swagger() is renamed to @OA\OpenApi() + +### @SWG\Path() is renamed to @OA\PathItem() + +The specification uses the term "Path Item Object", updated the annotation to reflect that. + +### @SWG\Definition() is removed + +Use @OA\Schema() instead of @OA\Definition() and update the references from "#/definitions/something" to "#/components/schemas/something". + +### @SWG\Path is removed + +Use @OA\PathItem instead of @SWG\Path and update references. + +### Consumes, produces field is removed from OpenAPI specification + +Use @OA\MediaType to set data format. + +### Rename parameter references + +Rename `#/parameters/{parameter_name}` to `#/components/parameters/{parameter_name}` + +### Rename response references + +Rename `#/responses/{response}` to `#/components/responses/{response}` + +### Renamed cli + +Renamed swagger to openapi + +### More details about differences: + +[A Visual Guide to What's New in Swagger 3.0](https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/) diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md new file mode 100644 index 0000000..3e619a6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md @@ -0,0 +1,138 @@ +# Migrating to v4 + +## Overview +* As of PHP 8.1 annotations may be used as + [PHP attributes](https://www.php.net/manual/en/language.attributes.overview.php) instead. + That means all references to annotations in this document also apply to attributes. +* Annotations now **must be** associated with a structural element (class, trait, interface), a method, property or const. +* A new annotation `PathParameter` was added for improved framework support. +* A new annotation `Attachable` was added to simplify custom processing. + `Attachable` can be used to attach arbitrary data to any given annotation. +* Deprecated elements have been removed + * `\Openapi\Analysis::processors()` + * `\Openapi\Analyser::$whitelist` + * `\Openapi\Analyser::$defaultImports` + * `\Openapi\Logger` +* Legacy support is available via the previous `TokenAnalyser` +* Improvements to the `Generator` class + +## Annotations as PHP attributes +While PHP attributes have been around since PHP 8.0 they were lacking the ability to be nested. +This changes with PHP 8.1 which allows to use `new` in initializers. + +Swagger-php attributes also make use of named arguments, so attribute parameters can be (mostly) typed. +There are some limitations to type hints which can only be resolved once support for PHP 7.x is dropped. + +### Using annotations +```php + +use OpenApi\Annotations as OA; + +/** + * @OA\Info( + * version="1.0.0", + * title="My API", + * @OA\License(name="MIT"), + * @OA\Attachable() + * ) + */ +class OpenApiSpec +{ +} +``` +### Using attributes +```php + +use OpenApi\Attributes as OA; + +#[OA\Info( + version: '1.0.0', + title: 'My API', + attachables: [new OA\Attachable()] +)] +#[OA\License(name: 'MIT')] +class OpenApiSpec +{ +} +``` + +## Optional nesting +One of the few differences between annotations and attributes visible in the above example is that the `OA\License` attribute +is not nested within `OA\Info`. Nesting of attributes is possible and required in certain cases however, **in cases where there +is no ambiguity attributes may be all written on the top level** and swagger-php will do the rest. + +## Annotations must be associated with a structural element +The (now legacy) way of parsing PHP files meant that docblocks could live in a file without a single line +of actual PHP code. + +PHP Attributes cannot exist in isolation; they need code to be associated with and then are available +via reflection on the associated structural element. +In order to allow to keep supporting annotations and the code simple it made sense to treat annotations and attributes +the same in this respect. + +## The `PathParameter` annotation +As annotation this is just a short form for +```php + @OA\Parameter(in='body') +``` + +Things get more interesting when it comes to using it as attribute, though. In the context of +a controller you can now do something like +```php +class MyController +{ + #[OA\Get(path: '/products/{product_id}')] + public function getProduct( + #[OA\PathParameter] string $product_id) + { + } +} +``` +Here it avoids having to duplicate details about the `$product_id` parameter and the simple use of the attribute +will pick up typehints automatically. + +## The `Attachable` annotation +Technically these were added in version 3.3.0, however they become really useful only with version 4. + +The attachable annotation is similar to the OpenApi vendor extension `x=`. The main difference are that +1. Attachables allow complex structures and strong typing +2. **Attachables are not added to the generated spec.** + +Their main purpose is to make customizing swagger-php easier by allowing to add arbitrary data to any annotation. + +One possible use case could be custom annotations. Classes extending `Attachable` are allowed to limit +the allowed parent annotations. This means it would be easy to create a new attribute to flag certain endpoints +as private and exclude them under certain conditions from the spec (via a custom processor). + +## Removed deprecated elements +### `\Openapi\Analysis::processors()` +Processors have been moved into the `Generator` class incl. some new convenience methods. +### `\Openapi\Analyser::$whitelist` +This has been replaced with the `Generator` `namespaces` property. +### `\Openapi\Analyser::$defaultImports` +This has been replaced with the `Generator` `aliases` property. +### `\Openapi\Logger` +This class has been removed completely. Instead, you may configure a [PSR-3 logger](https://www.php-fig.org/psr/psr-3/). + +## Improvements to the `Generator` class +The removal of deprecated static config options means that the `Generator` class now is +the main entry point into swagger-php when used programmatically. + +To make the migration as simple as possible a new `Generator::withContext(callable)` has been added. +This allows to use parts of the library (an `Analyser` instance, for example) within the context of a `Generator` instance. + +Example: +```php +$analyser = createMyAnalyser(); + +$analysis = (new Generator()) + ->addAlias('fo', 'My\\Attribute\\Namespace') + ->addNamespace('Other\\Annotations\\') + ->withContext(function (Generator $generator, Analysis $analysis, Context $context) use ($analyser) { + $analyser->setGenerator($generator); + $analysis = $analyser->fromFile('my_code.php', $context); + $analysis->process($generator->getProcessors()); + + return $analysis; + }); +``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md new file mode 100644 index 0000000..b14f5a6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md @@ -0,0 +1,41 @@ +# Required elements + +The OpenAPI specification defines a minimum set of information for a valid document. + +For the most part that consists of some general information about the API like `name`, `version` +and at least one endpoint. + +The endpoint, in turn, needs to have a path and at least one response. + +## Minimum required annotations + +With the above in mind a minimal API with a single endpoint could look like this + + + + + + +with the resulting OpenAPI document like this + +<<< @/snippets/minimal_api.yaml + +::: warning Code locations +Attributes and annotations can be added anywhere on declarations in code as defined by the PHP docs. +These are limited to the extent of what the PHP Reflection APIs supports. +::: + +## Optional elements + +Looking at the generated document you will notice that there are some elements that `swagger-php` adds automatically +when they are missing. + +For the most part those are `@OA\OpenApi`, `@OA\Components` and `@OA\PathItem`. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md new file mode 100644 index 0000000..7ee2dbb --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md @@ -0,0 +1,50 @@ +# Under the hood + +## Processing flow + +- The `Generator` iterates over the given sources (Symfony `Finder`, file/directory list, etc) +- The configured analyser (`AnalyserInterface`) reads the files and builds an `Analysis` object. + Default (as of v4) is the `ReflectionAnalyser`. Alternatively, there is the `TokenAnalyser` which was the default in v3. +- The `Analysis` object and its annotations are then processed by the configured processors. +- If enabled, the analysis/annotations are validated. +- The root `OpenApi` annotation then contains all annotations and is serialized into YAML/JSON. + +## `Context` + +Each annotation is associated with a unique `Context` instance. This contains details, collected by the parser/analyser, +about the PHP context where the annotation was found. + +Typically, there will be a processor that uses the data to augment/enrich the annotation. + +**Examples of the data collected:** + - class/interface/trait/enum names + - property names + - doctype or native type hints + - file name and line number + +## Analysis + +Contains all detected annotations and other relevant meta-data. + +It uses a `SplObjectStorage` instance to store the parsed annotations. + +## Documentation + +This documentation is generated with [VitePress](https://vitepress.vuejs.org/) + +### Installation +```shell +cd docs +npm install vitepress +``` + +### Workflow + +* Edit `.md` files in the `docs` folder +* Update annotation / attribute PHP docblocks.
These will be extracted during publishing into the [reference](../reference/) section. +* Run 'composer docs:build' to check for any errors +* Run 'composer docs:dev' to test the generated documentation locally (`localhost:3000`) +* Create PR and update `master` +* Manually trigger the `gh-pages` workflow to update the online docs. + +The last step requires commit rights on `zircote/swagger-php`. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/index.md new file mode 100644 index 0000000..b862797 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/index.md @@ -0,0 +1,56 @@ +--- +home: true +actionText: User Guide → +actionLink: /guide/ +features: + - title: OpenAPI conformant + details: Generate OpenAPI documents in version 3.0 or 3.1. + - title: Document your API inside PHP source code + details: Using swagger-php lets you write the API documentation inside the PHP source files + which helps keeping the documentation up-to-date. + - title: Annotation and Attribute support + details: Annotations can be either docblocks or PHP 8.1 attributes. +--- + +### 1. Install with composer: + +```shell +> composer require zircote/swagger-php +``` + +### 2. Update your code + +Add `swagger-php` annotations or attributes to your source code. + + + + + + +### 3. Generate OpenAPI documentation + +```shell +> ./bin/openapi src -o openapi.yaml +``` + +### 4. Explore and interact with your API + +Use an OpenAPI tool like [Swagger UI ](https://swagger.io/tools/swagger-ui/) to explore and interact with your API. + +## Links + +- [User Guide](guide/index.md) +- [Reference](reference/index.md) +- [OpenApi Documentation](https://oai.github.io/Documentation/) +- [OpenApi Specification](https://spec.openapis.org/oas/v3.1.0.html) +- [Learn by example](https://github.com/zircote/swagger-php/tree/master/Examples) +- [Related projects](related-projects.md) +- [Swagger-php 2.x documentation](https://github.com/zircote/swagger-php/tree/2.x/docs) diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/package.json b/vendor/passkit/vendor/zircote/swagger-php/docs/package.json new file mode 100644 index 0000000..1663db1 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/package.json @@ -0,0 +1,14 @@ +{ + "name": "swagger-php-docs", + "version": "4.0.0", + "license": "Apache-2.0", + "scripts": { + "dev": "vitepress dev .", + "build": "vitepress build .", + "deploy": "npm run build && git-directory-deploy --branch gh-pages --directory .vitepress/dist/" + }, + "devDependencies": { + "vitepress": "^0.22", + "vue3-tabs-component": "^1.0.8" + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md new file mode 100644 index 0000000..5f83e69 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md @@ -0,0 +1,1212 @@ +# Annotations + +This page is generated automatically from the `swagger-php` sources. + +For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) + +In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. + + +## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Annotations/AdditionalProperties.php) + + + +#### Allowed in +--- +Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Attachable.php) + +A container for custom data to be attached to an annotation. + +These will be ignored by `swagger-php` but can be used for custom processing. + +#### Allowed in +--- +AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent + +## [Components](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Components.php) + +Holds a set of reusable objects for different aspects of the OA. + +All objects defined within the components object will have no effect on the API unless they are explicitly +referenced from properties outside the components object. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable + +#### Properties +--- +
+
callbacks : callable[]
+

Reusable Callbacks.

+
+ +#### Reference +--- +- [OAI Components Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#components-object) + +## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Contact.php) + +Contact information for the exposed API. + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

The identifying name of the contact person/organization.

+
url : string
+

The URL pointing to the contact information.

+
email : string
+

The email address of the contact person/organization.

+
+ +#### Reference +--- +- [OAI Contact Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#contact-object) + +## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Delete.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Discriminator.php) + +The discriminator is a specific object in a schema which is used to inform the consumer of +the specification of an alternative schema based on the value associated with it. + +This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. +On top of this subset, there are extensions provided by this specification to allow for more complete documentation. + +#### Allowed in +--- +Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
propertyName : string
+

The name of the property in the payload that will hold the discriminator value.

+
mapping : string[]
+

An object to hold mappings between payload values and schema names or references.

+
+ +#### Reference +--- +- [OAI Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminatorObject) +- [JSON Schema](http://json-schema.org/) + +## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Examples.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
example : string
+

The key into `#/components/examples`.

+
summary : string
+

Short description for the example.

+
description : string
+

Embedded literal example.
+
+The value field and externalValue field are mutually exclusive.
+
+To represent examples of media types that cannot naturally be represented
+in JSON or YAML, use a string value to contain the example, escaping where necessary.

+
value : int|string|array
+

Embedded literal example.
+
+The value field and externalValue field are mutually exclusive.
+
+To represent examples of media types that cannot naturally be represented
+in JSON or YAML, use a string value to contain the example, escaping where necessary.

+
externalValue : string
+

An URL that points to the literal example.
+
+This provides the capability to reference examples that cannot easily be included
+in JSON or YAML documents.
+
+The value field and externalValue field are mutually exclusive.

+
+ +## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ExternalDocumentation.php) + +Allows referencing an external resource for extended documentation. + +#### Allowed in +--- +OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
description : string
+

A short description of the target documentation. GFM syntax can be used for rich text representation.

+
url : string
+

The URL for the target documentation.

+
+ +#### Reference +--- +- [OAI External Documentation Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#external-documentation-object) + +## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Flow.php) + +Configuration details for a supported OAuth Flow. + +#### Allowed in +--- +SecurityScheme + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
authorizationUrl : string
+

The authorization url to be used for this flow.
+
+This must be in the form of an url.

+
tokenUrl : string
+

The token URL to be used for this flow.
+
+This must be in the form of an url.

+
refreshUrl : string
+

The URL to be used for obtaining refresh tokens.
+
+This must be in the form of an url.

+
flow : string
+

Flow name.
+
+One of ['implicit', 'password', 'authorizationCode', 'clientCredentials'].

+
scopes : array
+

The available scopes for the OAuth2 security scheme.
+
+A map between the scope name and a short description for it.

+
+ +#### Reference +--- +- [OAI OAuth Flow Object](https://swagger.io/specification/#oauthFlowObject) + +## [Get](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Get.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Head](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Head.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Header](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Header.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Schema, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
header : string
+

No details available.

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+CommonMark syntax MAY be used for rich text representation.

+
required : bool
+

No details available.

+
deprecated : bool
+

Specifies that a parameter is deprecated and SHOULD be transitioned out of usage.

+
allowEmptyValue : bool
+

Sets the ability to pass empty-valued parameters.
+
+This is valid only for query parameters and allows sending a parameter with an empty value.
+
+Default value is false.
+
+If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue SHALL be ignored.

+
+ +#### Reference +--- +- [OAI Header Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#headerObject). + +## [Info](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Info.php) + +The object provides metadata about the API. + +The metadata may be used by the clients if needed and may be presented in editing or documentation generation tools for convenience. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Contact, License, Attachable + +#### Properties +--- +
+
title : string
+

The title of the application.

+
description : string
+

A short description of the application.
+
+CommonMark syntax may be used for rich text representation.

+
termsOfService : string
+

An URL to the Terms of Service for the API.
+
+Must be in the format of an url.

+
version : string
+

The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API implementation version).

+
+ +#### Reference +--- +- [OAI Info Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#info-object) + +## [Items](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Items.php) + +The description of an item in a Schema with type `array`. + +#### Allowed in +--- +Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/JsonContent.php) + +Shorthand for a json response. + +Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/json'` will be generated. + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable + +## [License](https://github.com/zircote/swagger-php/tree/master/src/Annotations/License.php) + +License information for the exposed API. + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

The license name used for the API.

+
identifier : string
+

An SPDX license expression for the API. The `identifier` field is mutually exclusive of the `url` field.

+
url : string
+

An URL to the license used for the API. This MUST be in the form of an URL.
+
+The `url` field is mutually exclusive of the `identifier` field.

+
+ +#### Reference +--- +- [OAI License Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#license-object) + +## [Link](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Link.php) + +The Link object represents a possible design-time link for a response. + +The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known +relationship and traversal mechanism between responses and other operations. + +Unlike dynamic links (i.e. links provided in the response payload), the OA linking mechanism does not require +link information in the runtime response. + +For computing links, and providing instructions to execute them, a runtime expression is used for +accessing values in an operation and using them as parameters while invoking the linked operation. + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Server, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
link : string
+

The key into MediaType->links array.

+
operationRef : string
+

A relative or absolute reference to an OA operation.
+
+This field is mutually exclusive of the operationId field, and must point to an Operation object.
+
+Relative values may be used to locate an existing Operation object in the OpenAPI definition.

+
operationId : string
+

The name of an existing, resolvable OA operation, as defined with a unique operationId.
+
+This field is mutually exclusive of the operationRef field.

+
parameters : array<string,mixed>
+

A map representing parameters to pass to an operation as specified with operationId or identified via
+operationRef.
+
+The key is the parameter name to be used, whereas the value can be a constant or an expression to
+be evaluated and passed to the linked operation.
+The parameter name can be qualified using the parameter location [{in}.]{name} for operations
+that use the same parameter name in different locations (e.g. path.id).

+
requestBody
+

A literal value or {expression} to use as a request body when calling the target operation.

+
description : string
+

A description of the link.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Link Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object) + +## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Annotations/MediaType.php) + +Each Media Type object provides schema and examples for the media type identified by its key. + +#### Allowed in +--- +Response, RequestBody + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
mediaType : string
+

The key into Operation->content array.

+
example
+

Example of the media type.
+
+The example object should be in the correct format as specified by the media type.
+The example object is mutually exclusive of the examples object.
+
+Furthermore, if referencing a schema which contains an example,
+the example value shall override the example provided by the schema.

+
encoding : array<string,mixed>
+

A map between a property name and its encoding information.
+
+The key, being the property name, must exist in the schema as a property.
+
+The encoding object shall only apply to requestBody objects when the media type is multipart or
+application/x-www-form-urlencoded.

+
+ +#### Reference +--- +- [OAI Media Type Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) + +## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Annotations/OpenApi.php) + +This is the root document object for the API specification. + +#### Nested elements +--- +Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable + +#### Properties +--- +
+
openapi : string
+

The semantic version number of the OpenAPI Specification version that the OpenAPI document uses.
+
+The openapi field should be used by tooling specifications and clients to interpret the OpenAPI document.
+
+A version specified via `Generator::setVersion()` will overwrite this value.
+
+This is not related to the API info::version string.

+
security : array
+

Lists the required security schemes to execute this operation.
+
+The name used for each property must correspond to a security scheme declared
+in the Security Schemes under the Components Object.
+Security Requirement Objects that contain multiple schemes require that
+all schemes must be satisfied for a request to be authorized.
+This enables support for scenarios where multiple query parameters or
+HTTP headers are required to convey security information.
+When a list of Security Requirement Objects is defined on the Open API object or
+Operation Object, only one of Security Requirement Objects in the list needs to
+be satisfied to authorize the request.

+
+ +#### Reference +--- +- [OAI OpenApi Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#openapi-object) + +## [Options](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Options.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Parameter.php) + +Describes a single operation parameter. + +A unique parameter is defined by a combination of a name and location. + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
parameter : string
+

The key into Components::parameters or PathItem::parameters array.

+
name : string
+

The (case-sensitive) name of the parameter.
+
+If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object.
+
+If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored.
+For all other cases, the name corresponds to the parameter name used by the in property.

+
in : string
+

The location of the parameter.
+
+Possible values are "query", "header", "path" or "cookie".

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+
+CommonMark syntax may be used for rich text representation.

+
required : bool
+

Determines whether this parameter is mandatory.
+
+If the parameter location is "path", this property is required and its value must be true.
+Otherwise, the property may be included and its default value is false.

+
deprecated : bool
+

Specifies that a parameter is deprecated and should be transitioned out of usage.

+
allowEmptyValue : bool
+

Sets the ability to pass empty-valued parameters.
+
+This is valid only for query parameters and allows sending a parameter with an empty value.
+
+Default value is false.
+
+If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored.

+
style : string
+

Describes how the parameter value will be serialized depending on the type of the parameter value.
+
+Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form.

+
explode : bool
+

When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map.
+
+For other types of parameters this property has no effect.
+
+When style is form, the default value is true.
+For all other styles, the default value is false.

+
allowReserved : bool
+

Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding.
+
+This property only applies to parameters with an in value of query.
+
+The default value is false.

+
example
+

Example of the media type.
+
+The example should match the specified schema and encoding properties if present.
+The example object is mutually exclusive of the examples object.
+Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema.
+To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary.

+
content : MediaType[]
+

A map containing the representations for the parameter.
+
+The key is the media type and the value describes it.
+The map must only contain one entry.

+
matrix
+

Path-style parameters defined by RFC6570.

See: RFC6570

+
label
+

Label style parameters defined by RFC6570.

See: RFC6570

+
form
+

Form style parameters defined by RFC6570.
+
+This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0.

See: RFC6570

+
simple : array
+

Simple style parameters defined by RFC6570.
+
+This option replaces collectionFormat with a csv value from OpenAPI 2.0.

See: RFC6570

+
spaceDelimited : array
+

Space separated array values.
+
+This option replaces collectionFormat equal to ssv from OpenAPI 2.0.

+
pipeDelimited : array
+

Pipe separated array values.
+
+This option replaces collectionFormat equal to pipes from OpenAPI 2.0.

+
deepObject
+

Provides a simple way of rendering nested objects using form parameters.

+
+ +#### Reference +--- +- [OAA Parameter Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) + +## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Patch.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathItem.php) + +Describes the operations available on a single path. + +A Path Item may be empty, due to ACL constraints. +The path itself is still exposed to the documentation viewer, but they will not know which operations and parameters are available. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
path : string
+

Key for the Path Object (OpenApi->paths array).

+
summary : string
+

An optional, string summary, intended to apply to all operations in this path.

+
+ +#### Reference +--- +- [OAI Path Item Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object) + +## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathParameter.php) + +A `@OA\Request` path parameter. + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
in
+

No details available.

+
required
+

No details available.

+
+ +## [Post](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Post.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Property](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Property.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Properties +--- +
+
property : string
+

The key into Schema->properties array.

+
+ +## [Put](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Put.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Annotations/RequestBody.php) + +Describes a single request body. + +#### Allowed in +--- +Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put + +#### Nested elements +--- +MediaType, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
request : string
+

Request body model name.

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+
+CommonMark syntax may be used for rich text representation.

+
required : bool
+

Determines whether this parameter is mandatory.
+
+If the parameter location is "path", this property is required and its value must be true.
+Otherwise, the property may be included and its default value is false.

+
+ +#### Reference +--- +- [OAI Request Body Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#requestBodyObject) + +## [Response](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Response.php) + +Describes a single response from an API Operation, including design-time, +static links to operations based on the response. + +#### Allowed in +--- +Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace + +#### Nested elements +--- +MediaType, Header, Link, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
response : string|int
+

The key into Operations->responses array.
+
+A HTTP status code or default.

+
description : string
+

A short description of the response.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object) + +## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Schema.php) + +The definition of input and output data types. + +These types can be objects, but also primitives and arrays. + +This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. +On top of this subset, there are extensions provided by this specification to allow for more complete documentation. + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, Header + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
schema : string
+

The key into Components->schemas array.

+
title : string
+

Can be used to decorate a user interface with information about the data produced by this user interface.
+
+Preferably short; use description for more details.

+
description : string
+

A description will provide explanation about the purpose of the instance described by this schema.

+
maxProperties : int
+

An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the
+value of this property.

+
minProperties : int
+

An object instance is valid against "minProperties" if its number of properties is greater than, or equal to,
+the value of this property.

+
required : string[]
+

An object instance is valid against this property if its property set contains all elements in this property's
+array value.

+
type : string
+

The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or
+"object".

+
format : string
+

The extending format for the previously mentioned type. See Data Type Formats for further details.

+
collectionFormat : string
+

Determines the format of the array if type array is used.
+Possible values are:
+- csv: comma separated values foo,bar.
+- ssv: space separated values foo bar.
+- tsv: tab separated values foo\tbar.
+- pipes: pipe separated values foo|bar.
+- multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz.
+This is valid only for parameters of type query or formData.
+Default value is csv.

+
default
+

Sets a default value to the parameter. The type of the value depends on the defined type.

See: JSON schema validation

+
maximum : int|float
+

No details available.

See: JSON schema validation

+
exclusiveMaximum : bool
+

No details available.

See: JSON schema validation

+
minimum : int|float
+

No details available.

See: JSON schema validation

+
exclusiveMinimum : bool
+

No details available.

See: JSON schema validation

+
maxLength : int
+

No details available.

See: JSON schema validation

+
minLength : int
+

No details available.

See: JSON schema validation

+
pattern : string
+

A string instance is considered valid if the regular expression matches the instance successfully.

+
maxItems : int
+

No details available.

See: JSON schema validation

+
minItems : int
+

No details available.

See: JSON schema validation

+
uniqueItems : bool
+

No details available.

See: JSON schema validation

+
enum : string[]|int[]|float[]
+

No details available.

See: JSON schema validation

+
multipleOf : int|float
+

A numeric instance is valid against "multipleOf" if the result of the division of the instance by this
+property's value is an integer.

+
readOnly : bool
+

Declares the property as "read only".
+
+Relevant only for Schema "properties" definitions.
+
+This means that it may be sent as part of a response but should not be sent as part of the request.
+If the property is marked as readOnly being true and is in the required list, the required will take effect on
+the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is
+false.

+
writeOnly : bool
+

Declares the property as "write only".
+
+Relevant only for Schema "properties" definitions.
+Therefore, it may be sent as part of a request but should not be sent as part of the response.
+If the property is marked as writeOnly being true and is in the required list, the required will take effect on
+the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is
+false.

+
example
+

A free-form property to include an example of an instance for this schema.
+
+To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to
+contain the example with escaping where necessary.

+
nullable : bool
+

Allows sending a null value for the defined schema.
+Default value is false.

+
deprecated : bool
+

Specifies that a schema is deprecated and should be transitioned out of usage.
+Default value is false.

+
allOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against all schemas
+defined by this property's value.

+
anyOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against at least one
+schema defined by this property's value.

+
oneOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against exactly one schema
+defined by this property's value.

+
not
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29.

+
additionalItems
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10.

+
contains
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14.

+
patternProperties
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19.

+
dependencies
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21.

+
propertyNames
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22.

+
const : mixed
+

http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3.

+
+ +#### Reference +--- +- [OAI Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schemaObject) +- [JSON Schema](http://json-schema.org/) + +## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Annotations/SecurityScheme.php) + + + +#### Allowed in +--- +Components + +#### Nested elements +--- +Flow, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
securityScheme : string
+

The key into OpenApi->security array.

+
type : string
+

The type of the security scheme.

+
description : string
+

A short description for security scheme.

+
name : string
+

The name of the header or query parameter to be used.

+
in : string
+

Required The location of the API key.

+
bearerFormat : string
+

A hint to the client to identify how the bearer token is formatted.
+
+Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.

+
scheme : string
+

The name of the HTTP Authorization scheme.

See: RFC7235

+
openIdConnectUrl : string
+

OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL.

+
+ +#### Reference +--- +- [OAI Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#securitySchemeObject). + +## [Server](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Server.php) + +An object representing a server. + +#### Allowed in +--- +OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link + +#### Nested elements +--- +ServerVariable, Attachable + +#### Properties +--- +
+
url : string
+

An URL to the target host.
+
+This URL supports Server Variables and may be relative,
+to indicate that the host location is relative to the location where the OpenAPI document is being served.
+Variable substitutions will be made when a variable is named in {brackets}.

+
description : string
+

An optional string describing the host designated by the URL.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Server Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-object) + +## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ServerVariable.php) + +An object representing a server variable for server URL template substitution. + +#### Allowed in +--- +Server + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
serverVariable : string
+

The key into Server->variables array.

+
enum : string[]|int[]|float[]
+

An enumeration of values to be used if the substitution options are from a limited set.

+
default : string
+

The default value to use for substitution, and to send, if an alternate value is not supplied.
+
+Unlike the Schema Object's default, this value must be provided by the consumer.

+
variables : array
+

A map between a variable name and its value.
+
+The value is used for substitution in the server's URL template.

+
description : string
+

An optional description for the server variable.
+
+CommonMark syntax MAY be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Server Variable Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object) + +## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Tag.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +ExternalDocumentation, Attachable + +#### Properties +--- +
+
name : string
+

The name of the tag.

+
description : string
+

A short description for the tag. GFM syntax can be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Tag Object]( https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#tagObject). + +## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Trace.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Xml.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, Property, Schema, Items, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

Replaces the name of the element/attribute used for the described schema property.
+
+When defined within the Items Object (items), it will affect the name of the individual XML elements within the list.
+When defined alongside type being array (outside the items), it will affect the wrapping element
+and only if wrapped is true.
+
+If wrapped is false, it will be ignored.

+
namespace : string
+

The URL of the namespace definition. Value SHOULD be in the form of an URL.

+
prefix : string
+

The prefix to be used for the name.

+
attribute : bool
+

Declares whether the property definition translates to an attribute instead of an element.
+
+Default value is false.

+
wrapped : bool
+

MAY be used only for an array definition.
+
+Signifies whether the array is wrapped (for example <books><book/><book/></books>)
+or unwrapped (<book/><book/>).
+
+Default value is false. The definition takes effect only when defined alongside type being array (outside the items).

+
+ +#### Reference +--- +- [OAI XML Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#xmlObject). + +## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/XmlContent.php) + +Shorthand for a xml response. + +Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/xml'` will be generated. + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable + diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md new file mode 100644 index 0000000..55dfd66 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md @@ -0,0 +1,1664 @@ +# Attributes + +This page is generated automatically from the `swagger-php` sources. + +For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) + +In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. + + +## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Attributes/AdditionalProperties.php) + + + +#### Allowed in +--- +Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Attachable.php) + + + +#### Allowed in +--- +AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent + +#### Parameters +--- +
+
properties : array
+

No details available.

+
+ +## [Components](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Components.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable + +#### Parameters +--- +
+
schemas : Schema[]|null
+

No details available.

+
responses : Response[]|null
+

No details available.

+
parameters : Parameter[]|null
+

No details available.

+
requestBodies : RequestBody[]|null
+

No details available.

+
examples : Examples[]|null
+

No details available.

+
headers : Header[]|null
+

No details available.

+
securitySchemes : SecurityScheme[]|null
+

No details available.

+
links : Link[]|null
+

No details available.

+
callbacks : callable[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Contact.php) + + + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
url : string|null
+

No details available.

+
email : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Delete.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Discriminator.php) + + + +#### Allowed in +--- +Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
propertyName : string|null
+

No details available.

+
mapping : string[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Examples.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
example : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
description : string|null
+

No details available.

+
value : array|string|int|null
+

No details available.

+
externalValue : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ExternalDocumentation.php) + + + +#### Allowed in +--- +OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
description : string|null
+

No details available.

+
url : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Flow.php) + + + +#### Allowed in +--- +SecurityScheme + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
authorizationUrl : string|null
+

No details available.

+
tokenUrl : string|null
+

No details available.

+
refreshUrl : string|null
+

No details available.

+
flow : string|null
+

No details available.

+
scopes : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Get](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Get.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Head](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Head.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Header](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Header.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Schema, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
header : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Info](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Info.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Contact, License, Attachable + +#### Parameters +--- +
+
version : string|null
+

No details available.

+
description : string|null
+

No details available.

+
title : string|null
+

No details available.

+
termsOfService : string|null
+

No details available.

+
contact : OpenApi\Attributes\Contact|null
+

No details available.

+
license : OpenApi\Attributes\License|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Items](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Items.php) + + + +#### Allowed in +--- +Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/JsonContent.php) + + + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable + +#### Parameters +--- +
+
examples : array<string,Examples>
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [License](https://github.com/zircote/swagger-php/tree/master/src/Attributes/License.php) + + + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
identifier : string|null
+

No details available.

+
url : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Link](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Link.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Server, Attachable + +#### Parameters +--- +
+
link : string|null
+

No details available.

+
operationRef : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
parameters : array<string,mixed>
+

No details available.

+
requestBody
+

No details available.

+
description : string|null
+

No details available.

+
server : OpenApi\Attributes\Server|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Attributes/MediaType.php) + + + +#### Allowed in +--- +Response, RequestBody + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
mediaType : string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
encoding : array<string,mixed>
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Attributes/OpenApi.php) + + + +#### Nested elements +--- +Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable + +#### Parameters +--- +
+
openapi : string
+

No details available.

+
info : OpenApi\Attributes\Info|null
+

No details available.

+
servers : Server[]|null
+

No details available.

+
security : array|null
+

No details available.

+
tags : Tag[]|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
paths : PathItem[]|null
+

No details available.

+
components : OpenApi\Attributes\Components|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Options](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Options.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Parameter.php) + + + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
parameter : string|null
+

No details available.

+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
in : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
style : string|null
+

No details available.

+
explode : bool|null
+

No details available.

+
allowReserved : bool|null
+

No details available.

+
spaceDelimited : array|null
+

No details available.

+
pipeDelimited : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Patch.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathItem.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
servers : Server[]|null
+

No details available.

+
parameters : Parameter[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathParameter.php) + + + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
parameter : string|null
+

No details available.

+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
in : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
style : string|null
+

No details available.

+
explode : bool|null
+

No details available.

+
allowReserved : bool|null
+

No details available.

+
spaceDelimited : array|null
+

No details available.

+
pipeDelimited : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Post](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Post.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Property](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Property.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
property : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Put](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Put.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Attributes/RequestBody.php) + + + +#### Allowed in +--- +Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put + +#### Nested elements +--- +MediaType, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
request : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
content : array<MediaType>|JsonContent|XmlContent|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Response](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Response.php) + + + +#### Allowed in +--- +Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace + +#### Nested elements +--- +MediaType, Header, Link, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
response : string|int|null
+

No details available.

+
description : string|null
+

No details available.

+
headers : Header[]
+

No details available.

+
content : MediaType|JsonContent|XmlContent|array<MediaType|XmlContent>
+

No details available.

+
links : Link[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Schema.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, Header + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
const : mixed
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Attributes/SecurityScheme.php) + + + +#### Allowed in +--- +Components + +#### Nested elements +--- +Flow, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
securityScheme : string|null
+

No details available.

+
type : string|null
+

No details available.

+
description : string|null
+

No details available.

+
name : string|null
+

No details available.

+
in : string|null
+

No details available.

+
bearerFormat : string|null
+

No details available.

+
scheme : string|null
+

No details available.

+
openIdConnectUrl : string|null
+

No details available.

+
flows : Flow[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Server](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Server.php) + + + +#### Allowed in +--- +OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link + +#### Nested elements +--- +ServerVariable, Attachable + +#### Parameters +--- +
+
url : string|null
+

No details available.

+
description : string|null
+

No details available.

+
variables : ServerVariable[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ServerVariable.php) + + + +#### Allowed in +--- +Server + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
serverVariable : string|null
+

No details available.

+
description : string|null
+

No details available.

+
default : string|null
+

No details available.

+
enum : string[]|int[]|float[]|null
+

No details available.

+
variables : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Tag.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +ExternalDocumentation, Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Trace.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Xml.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, Property, Schema, Items, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
namespace : string|null
+

No details available.

+
prefix : string|null
+

No details available.

+
attribute : bool|null
+

No details available.

+
wrapped : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/XmlContent.php) + + + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable + +#### Parameters +--- +
+
examples : array<string,Examples>
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md new file mode 100644 index 0000000..a8f9c99 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md @@ -0,0 +1,161 @@ +# Using the `Generator` + +## Introduction +The `Generator` class provides an object-oriented way to use `swagger-php` and all its aspects in a single place. + +## The `\OpenApi\scan()` function + +For a long time the `\OpenApi\scan()` function was the main entry point into using swagger-php from PHP code. + +```php +/** + * Scan the filesystem for OpenAPI annotations and build openapi-documentation. + * + * @param array|Finder|string $directory The directory(s) or filename(s) + * @param array $options + * exclude: string|array $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) + * pattern: string $pattern File pattern(s) to scan (default: *.php) + * analyser: defaults to StaticAnalyser + * analysis: defaults to a new Analysis + * processors: defaults to the registered processors in Analysis + * + * @return OpenApi + */ + function scan($directory, $options = []) { /* ... */ } +``` + +Using it looked typically something like this: +```php +require("vendor/autoload.php"); + +$openapi = \OpenApi\scan(__DIR__, ['exclude' => ['tests'], 'pattern' => '*.php']); +``` + +The two configuration options for the underlying Doctrine doc-block parser `aliases` and `namespaces` +are not part of this function and need to be set separately. + +Being static this means setting them back is the callers responsibility and there is also the fact that +some Doctrine configuration currently can not be reverted easily. + +Therefore, having a single side effect free way of using swagger-php seemed like a good idea... + +## The `\OpenApi\Generator` class + +The `Generator` class can be used in object-oriented (and fluent) style which allows for easy customization +if needed. + +In that case to actually process the given input files the **non-static** method `generate()` is to be used. + +Full example of using the `Generator` class to generate OpenApi specs. + +```php +require("vendor/autoload.php"); + +$validate = true; +$logger = new \Psr\Log\NullLogger(); +$processors = [/* my processors */]; +$finder = \Symfony\Component\Finder\Finder::create()->files()->name('*.php')->in(__DIR__); + +$openapi = (new \OpenApi\Generator($logger)) + ->setProcessors($processors) + ->setAliases(['MY' => 'My\Annotations']) + ->setNamespaces(['My\\Annotations\\']) + ->setAnalyser(new \OpenApi\Analysers\TokenAnalyser()) + ->setVersion(\OpenApi\Annotations\OpenApi::VERSION_3_0_0) + ->generate(['/path1/to/project', $finder], new \OpenApi\Analysis(), $validate); +``` + +`Aliases` and `namespaces` are additional options that allow to customize the parsing of docblocks. + +Defaults: +* **aliases**: `['oa' => 'OpenApi\\Annotations']` + + Aliases help the underlying `doctrine annotations library` to parse annotations. Effectively they avoid having + to write `use OpenApi\Annotations as OA;` in your code and make `@OA\property(..)` annotations still work. + +* **namespaces**: `['OpenApi\\Annotations\\']` + + Namespaces control which annotation namespaces can be autoloaded automatically. Under the hood this + is handled by registering a custom loader with the `doctrine annotation library`. + +Advantages: +* The `Generator` code will handle configuring things as before in a single place +* Static settings will be reverted to the default once finished +* The get/set methods allow for using type hints +* Static configuration is deprecated and can be removed at some point without code changes +* Build in support for PSR logger +* Support for [Symfony Finder](https://symfony.com/doc/current/components/finder.html), `\SplInfo` and file/directory names (`string) as source. + +The minimum code required, using the `generate()` method, looks quite similar to the old `scan()` code: + +```php + /** + * Generate OpenAPI spec by scanning the given source files. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string - file / directory name + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param null|Analysis $analysis custom analysis instance + * @param bool $validate flag to enable/disable validation of the returned spec + */ + public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): \OpenApi\OpenApi { /* ... */ } +``` + +```php +require("vendor/autoload.php"); + +$openapi = (new \OpenApi\Generator())->generate(['/path1/to/project']); +``` + +For those that want to type even less and keep using a plain array to configure `swagger-php` there is also a static version: + +```php +toYaml(); +``` + +**Note:** While using the same name as the old `scan()` function, the `Generator::scan` method is not +100% backwards compatible. + +```php + /** + * Static wrapper around `Generator::generate()`. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param array $options + * aliases: null|array Defaults to `['oa' => 'OpenApi\\Annotations']`. + * namespaces: null|array Defaults to `['OpenApi\\Annotations\\']`. + * analyser: null|AnalyserInterface Defaults to a new `ReflectionAnalyser` supporting both docblocks and attributes. + * analysis: null|Analysis Defaults to a new `Analysis`. + * processors: null|array Defaults to `Analysis::processors()`. + * logger: null|\Psr\Log\LoggerInterface If not set logging will use \OpenApi\Logger as before. + * validate: bool Defaults to `true`. + */ + public static function scan(iterable $sources, array $options = []): OpenApi { /* ... */ } +``` + +Most notably the `exclude` and `pattern` keys are no longer supported. Instead, a Symfony `Finder` instance can be passed in +as source directly (same as with `Generator::generate()`). + +If needed, the `\OpenApi\Util` class provides a builder method that allows to keep the status-quo + +```php +$exclude = ['tests']; +$pattern = '*.php'; + +$openapi = \OpenApi\Generator::scan(\OpenApi\Util::finder(__DIR__, $exclude, $pattern)); + +// same as + +$openapi = \OpenApi\scan(__DIR__, ['exclude' => $exclude, 'pattern' => $pattern]); diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md new file mode 100644 index 0000000..6ec960a --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md @@ -0,0 +1,23 @@ +# Reference + +In total there are a number of different aspects to using `swagger-php`. Depending on how custom your requirements are this might be limited to just annotating your code and using the command line tool. + +However, `swagger-php` offers more. + +* [Attributes](attributes.md) + + The new way of adding meta-data to your codebase. Requires PHP 8.1 + +* [Docblock annotations](annotations.md) + + The 'traditional' way of documenting your API. + +* The [`Generator`](generator.md) + + The `\OpenAPI\Generator` class is the main entry point to programmatically generate OpenAPI documents from your code. + +* [Processors](processors.md) + + `swagger-php` comes with a list of pre-defined processors that convert the raw data to a + complete OpenAPI document. + Custom processors can be added or existing removed to tweak swagger-php` to your requirements. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md new file mode 100644 index 0000000..5010a6a --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md @@ -0,0 +1,6 @@ +# Processors + +## Adding/removing processors + +## Processors +### OperationId diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md b/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md new file mode 100644 index 0000000..2f20ef7 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md @@ -0,0 +1,35 @@ +--- +sidebar: false +--- + +# Related projects + +| Project | Description | +| ----------------------------- | --------------------------------------------------------- | +| [Swagger UI][1] | The webinterface for reading the generated documentation | +| [Swagger Explained][2] | Browse the spec by using an swagger.json. | +| [silex2swagger][3] | Generate swagger documentation from Silex Annotations | +| [yii2-swagger][4] | swagger-php intergation with yii2 | +| [Lumen swagger][5] | swagger-php integration with lumen/laravel | +| [NelmioApiDocBundle][6] | Symfony bundle on top of swagger-php | +| [auto-swagger-ui][7] | Automatically add swagger ui and json to your application | +| [openapi-router][8] | Configure framework routes from OpenApi annotations | +| [openapi-verifier][9] | Verify response against OpenAPI specification in PHPUnit | +| [openapi-filter][10] | Filter internal paths, operations, parameters, etc | +| [OpenAPI-Symfony-Routing][11] | Load routes in Symfony based on OpenAPI annotations | +| [Swag It PHP][12] | Convert JSON to PHP Swagger annotations | + +Is a related project missing? Create a pull request! + +[1]: https://swagger.io/tools/swagger-ui/ +[2]: https://bfanger.nl/swagger-explained/ +[3]: https://github.com/DerManoMann/silex2swagger +[4]: https://github.com/lichunqiang/yii2-swagger +[5]: https://github.com/DarkaOnLine/SwaggerLumen +[6]: https://github.com/nelmio/NelmioApiDocBundle +[7]: https://github.com/kevupton/auto-swagger-ui +[8]: https://github.com/DerManoMann/openapi-router +[9]: https://github.com/DerManoMann/openapi-verifier +[10]: https://github.com/Mermade/openapi-filter +[11]: https://github.com/Tobion/OpenAPI-Symfony-Routing +[12]: https://kizu514.com/swagit.php diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php b/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php new file mode 100644 index 0000000..2772d36 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php @@ -0,0 +1,21 @@ + top level annotations + */ + public function build(\Reflector $reflector, Context $context): array; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php new file mode 100644 index 0000000..0db5bdb --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php @@ -0,0 +1,132 @@ +generator = $generator; + } + + public function build(\Reflector $reflector, Context $context): array + { + if (\PHP_VERSION_ID < 80100 || !method_exists($reflector, 'getAttributes')) { + return []; + } + + if ($reflector instanceof \ReflectionProperty && method_exists($reflector, 'isPromoted') && $reflector->isPromoted()) { + // handled via __construct() parameter + return []; + } + + // no proper way to inject + Generator::$context = $context; + + /** @var AbstractAnnotation[] $annotations */ + $annotations = []; + try { + foreach ($reflector->getAttributes() as $attribute) { + try { + $instance = $attribute->newInstance(); + if ($instance instanceof AbstractAnnotation) { + $annotations[] = $instance; + } + } catch (\Error $e) { + $context->logger->debug('Could not instantiate attribute: ' . $e->getMessage(), ['exception' => $e]); + } + } + + if ($reflector instanceof \ReflectionMethod) { + // also look at parameter attributes + foreach ($reflector->getParameters() as $rp) { + foreach ([Property::class, Parameter::class, PathParameter::class] as $attributeName) { + foreach ($rp->getAttributes($attributeName) as $attribute) { + $instance = $attribute->newInstance(); + $type = (($rnt = $rp->getType()) && $rnt instanceof \ReflectionNamedType) ? $rnt->getName() : Generator::UNDEFINED; + $nullable = $rnt ? $rnt->allowsNull() : true; + + if ($instance instanceof Property) { + $instance->property = $rp->getName(); + if (Generator::isDefault($instance->type)) { + $instance->type = $type; + } + $instance->nullable = $nullable; + } else { + $instance->name = $rp->getName(); + $instance->required = !$nullable; + $context = new Context(['nested' => $this], $context); + $context->comment = null; + $instance->merge([new Schema(['type' => $type, '_context' => $context])]); + } + $annotations[] = $instance; + } + } + } + } + } finally { + Generator::$context = null; + } + + $annotations = array_values(array_filter($annotations, function ($a) { + return $a !== null && $a instanceof AbstractAnnotation; + })); + + // merge backwards into parents... + $isParent = function (AbstractAnnotation $annotation, AbstractAnnotation $possibleParent): bool { + // regular annotation hierarchy + $explicitParent = null !== $possibleParent::matchNested(get_class($annotation)); + + $isParentAllowed = false; + // support Attachable subclasses + if ($isAttachable = $annotation instanceof Attachable) { + if (!$isParentAllowed = (null === $annotation->allowedParents())) { + // check for allowed parents + foreach ($annotation->allowedParents() as $allowedParent) { + if ($possibleParent instanceof $allowedParent) { + $isParentAllowed = true; + break; + } + } + } + } + + // Property can be nested... + return get_class($annotation) != get_class($possibleParent) + && ($explicitParent || ($isAttachable && $isParentAllowed)); + }; + foreach ($annotations as $index => $annotation) { + for ($ii = 0; $ii < count($annotations); ++$ii) { + if ($ii === $index) { + continue; + } + $possibleParent = $annotations[$ii]; + if ($isParent($annotation, $possibleParent)) { + $possibleParent->merge([$annotation]); + } + } + } + + $annotations = array_filter($annotations, function ($a) { + return !$a instanceof Attachable; + }); + + return $annotations; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php new file mode 100644 index 0000000..d604f56 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php @@ -0,0 +1,49 @@ +getComposerAutoloader()) { + foreach (array_keys($autoloader->getClassMap()) as $unit) { + foreach ($namespaces as $namespace) { + if (0 === strpos($unit, $namespace)) { + $units[] = $unit; + break; + } + } + } + } + + return $units; + } + + public static function getComposerAutoloader(): ?ClassLoader + { + foreach (spl_autoload_functions() as $fkt) { + if (is_array($fkt) && $fkt[0] instanceof ClassLoader) { + return $fkt[0]; + } + } + + return null; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php new file mode 100644 index 0000000..21d1768 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php @@ -0,0 +1,58 @@ +docBlockParser = $docBlockParser ?: new DocBlockParser(); + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + $this->docBlockParser->setAliases($generator->getAliases()); + } + + public function build(\Reflector $reflector, Context $context): array + { + $aliases = $this->generator ? $this->generator->getAliases() : []; + + if (method_exists($reflector, 'getShortName') && method_exists($reflector, 'getName')) { + $aliases[strtolower($reflector->getShortName())] = $reflector->getName(); + } + + if ($context->with('scanned')) { + $details = $context->scanned; + foreach ($details['uses'] as $alias => $name) { + $aliasKey = strtolower($alias); + if ($name != $alias && !array_key_exists($aliasKey, $aliases)) { + // real aliases only + $aliases[strtolower($alias)] = $name; + } + } + } + $this->docBlockParser->setAliases($aliases); + + if (method_exists($reflector, 'getDocComment') && ($comment = $reflector->getDocComment())) { + return $this->docBlockParser->fromComment($comment, $context); + } + + return []; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php new file mode 100644 index 0000000..407dd39 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php @@ -0,0 +1,76 @@ +setIgnoreNotImportedAnnotations(true); + $docParser->setImports($aliases); + $this->docParser = $docParser; + } + + public function setAliases(array $aliases): void + { + $this->docParser->setImports($aliases); + } + + /** + * Use doctrine to parse the comment block and return the detected annotations. + * + * @param string $comment a T_DOC_COMMENT + * @param Context $context + * + * @return array Annotations + */ + public function fromComment(string $comment, Context $context): array + { + $context->comment = $comment; + + try { + Generator::$context = $context; + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + return $this->docParser->parse($comment, $context->getDebugLocation()); + } catch (\Exception $e) { + if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote((string) $context, '/') . '\.$/', $e->getMessage(), $matches)) { + $errorMessage = $matches[1]; + $errorPos = (int) $matches[2]; + $atPos = strpos($comment, '@'); + $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos); + $lines = explode("\n", substr($comment, $atPos, $errorPos)); + $context->character = strlen(array_pop($lines)) + 1; // position starts at 0 character starts at 1 + $context->logger->error($errorMessage . ' in ' . $context, ['exception' => $e]); + } else { + $context->logger->error( + $e->getMessage() . ($context->filename ? ('; file=' . $context->filename) : ''), + ['exception' => $e] + ); + } + + return []; + } finally { + Generator::$context = null; + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php new file mode 100644 index 0000000..a8f3a58 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php @@ -0,0 +1,186 @@ +annotationFactories = $annotationFactories; + if (!$this->annotationFactories) { + throw new \InvalidArgumentException('Need at least one annotation factory'); + } + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + foreach ($this->annotationFactories as $annotationFactory) { + $annotationFactory->setGenerator($generator); + } + } + + public function fromFile(string $filename, Context $context): Analysis + { + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $analysis = new Analysis([], $context); + foreach ($fileDetails as $fqdn => $details) { + $this->analyzeFqdn($fqdn, $analysis, $details); + } + + return $analysis; + } + + public function fromFqdn(string $fqdn, Analysis $analysis): Analysis + { + $fqdn = ltrim($fqdn, '\\'); + + $rc = new \ReflectionClass($fqdn); + if (!$filename = $rc->getFileName()) { + return $analysis; + } + + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $this->analyzeFqdn($fqdn, $analysis, $fileDetails[$fqdn]); + + return $analysis; + } + + protected function analyzeFqdn(string $fqdn, Analysis $analysis, array $details): Analysis + { + if (!class_exists($fqdn) && !interface_exists($fqdn) && !trait_exists($fqdn) && (!function_exists('enum_exists') || !enum_exists($fqdn))) { + $analysis->context->logger->warning('Skipping unknown ' . $fqdn); + + return $analysis; + } + + $rc = new \ReflectionClass($fqdn); + $contextType = $rc->isInterface() ? 'interface' : ($rc->isTrait() ? 'trait' : ((method_exists($rc, 'isEnum') && $rc->isEnum()) ? 'enum' : 'class')); + $context = new Context([ + $contextType => $rc->getShortName(), + 'namespace' => $rc->getNamespaceName() ?: null, + 'comment' => $rc->getDocComment() ?: null, + 'filename' => $rc->getFileName() ?: null, + 'line' => $rc->getStartLine(), + 'annotations' => [], + 'scanned' => $details, + ], $analysis->context); + + $definition = [ + $contextType => $rc->getShortName(), + 'extends' => null, + 'implements' => [], + 'traits' => [], + 'properties' => [], + 'methods' => [], + 'context' => $context, + ]; + $normaliseClass = function (string $name): string { + return '\\' . $name; + }; + if ($parentClass = $rc->getParentClass()) { + $definition['extends'] = $normaliseClass($parentClass->getName()); + } + $definition[$contextType == 'class' ? 'implements' : 'extends'] = array_map($normaliseClass, $details['interfaces']); + $definition['traits'] = array_map($normaliseClass, $details['traits']); + + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($rc, $context), $context); + } + + foreach ($rc->getMethods() as $method) { + if (in_array($method->name, $details['methods'])) { + $definition['methods'][$method->getName()] = $ctx = new Context([ + 'method' => $method->getName(), + 'comment' => $method->getDocComment() ?: null, + 'filename' => $method->getFileName() ?: null, + 'line' => $method->getStartLine(), + 'annotations' => [], + ], $context); + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($method, $ctx), $ctx); + } + } + } + + foreach ($rc->getProperties() as $property) { + if (in_array($property->name, $details['properties'])) { + $definition['properties'][$property->getName()] = $ctx = new Context([ + 'property' => $property->getName(), + 'comment' => $property->getDocComment() ?: null, + 'annotations' => [], + ], $context); + if ($property->isStatic()) { + $ctx->static = true; + } + if (\PHP_VERSION_ID >= 70400 && ($type = $property->getType())) { + $ctx->nullable = $type->allowsNull(); + if ($type instanceof \ReflectionNamedType) { + $ctx->type = $type->getName(); + // Context::fullyQualifiedName(...) expects this + if (class_exists($absFqn = '\\' . $ctx->type)) { + $ctx->type = $absFqn; + } + } + } + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($property, $ctx), $ctx); + } + } + } + + foreach ($rc->getReflectionConstants() as $constant) { + foreach ($this->annotationFactories as $annotationFactory) { + $definition['constants'][$constant->getName()] = $ctx = new Context([ + 'constant' => $constant->getName(), + 'comment' => $constant->getDocComment() ?: null, + 'annotations' => [], + ], $context); + foreach ($annotationFactory->build($constant, $ctx) as $annotation) { + if ($annotation instanceof Property) { + if (Generator::isDefault($annotation->property)) { + $annotation->property = $constant->getName(); + } + if (Generator::isDefault($annotation->const)) { + $annotation->const = $constant->getValue(); + } + $analysis->addAnnotation($annotation, $ctx); + } + } + } + } + + $addDefinition = 'add' . ucfirst($contextType) . 'Definition'; + $analysis->{$addDefinition}($definition); + + return $analysis; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php new file mode 100644 index 0000000..2a3916d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php @@ -0,0 +1,639 @@ +generator = $generator; + } + + /** + * Extract and process all doc-comments from a file. + * + * @param string $filename path to a php file + */ + public function fromFile(string $filename, Context $context): Analysis + { + if (function_exists('opcache_get_status') && function_exists('opcache_get_configuration')) { + if (empty($GLOBALS['openapi_opcache_warning'])) { + $GLOBALS['openapi_opcache_warning'] = true; + $status = opcache_get_status(); + $config = opcache_get_configuration(); + if (is_array($status) && $status['opcache_enabled'] && $config['directives']['opcache.save_comments'] == false) { + $context->logger->error("php.ini \"opcache.save_comments = 0\" interferes with extracting annotations.\n[LINK] https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments"); + } + } + } + $tokens = token_get_all(file_get_contents($filename)); + + return $this->fromTokens($tokens, new Context(['filename' => $filename], $context)); + } + + /** + * Extract and process all doc-comments from the contents. + * + * @param string $code PHP code. (including fromTokens($tokens, $context); + } + + /** + * Shared implementation for parseFile() & parseContents(). + * + * @param array $tokens The result of a token_get_all() + */ + protected function fromTokens(array $tokens, Context $parseContext): Analysis + { + $generator = $this->generator ?: new Generator(); + $analysis = new Analysis([], $parseContext); + $docBlockParser = new DocBlockParser($generator->getAliases()); + + reset($tokens); + $token = ''; + + $aliases = $generator->getAliases(); + + $parseContext->uses = []; + // default to parse context to start with + $schemaContext = $parseContext; + + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + $comment = false; + + $line = 0; + $lineOffset = $parseContext->line ?: 0; + + while ($token !== false) { + $previousToken = $token; + $token = $this->nextToken($tokens, $parseContext); + + if (is_array($token) === false) { + // Ignore tokens like "{", "}", etc + continue; + } + + if (defined('T_ATTRIBUTE') && $token[0] === T_ATTRIBUTE) { + // consume + $this->parseAttribute($tokens, $token, $parseContext); + continue; + } + + if ($token[0] === T_DOC_COMMENT) { + if ($comment) { + // 2 Doc-comments in succession? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + $comment = $token[1]; + $line = $token[2] + $lineOffset; + continue; + } + + if (in_array($token[0], [T_ABSTRACT, T_FINAL])) { + // skip + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token[0] === T_CLASS) { + // Doc-comment before a class? + if (is_array($previousToken) && $previousToken[0] === T_DOUBLE_COLON) { + //php 5.5 class name resolution (i.e. ClassName::class) + continue; + } + + $token = $this->nextToken($tokens, $parseContext); + + if (is_string($token) && ($token === '(' || $token === '{')) { + // php7 anonymous classes (i.e. new class() { public function foo() {} };) + continue; + } + + if (is_array($token) && ($token[1] === 'extends' || $token[1] === 'implements')) { + // php7 anonymous classes with extends (i.e. new class() extends { public function foo() {} };) + continue; + } + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $schemaContext = new Context(['class' => $token[1], 'line' => $token[2]], $parseContext); + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + $classDefinition = [ + 'class' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespace($tokens, $token, $parseContext); + $classDefinition['extends'] = $schemaContext->fullyQualifiedName($schemaContext->extends); + } + + if ($token[0] === T_IMPLEMENTS) { + $schemaContext->implements = $this->parseNamespaceList($tokens, $token, $parseContext); + $classDefinition['implements'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->implements); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-class and reset $schemaContext + } + + if ($token[0] === T_INTERFACE) { // Doc-comment before an interface? + $classDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['interface' => $token[1], 'line' => $token[2]], $parseContext); + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + $interfaceDefinition = [ + 'interface' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespaceList($tokens, $token, $parseContext); + $interfaceDefinition['extends'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->extends); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-interface and reset $schemaContext + } + + if ($token[0] === T_TRAIT) { + $classDefinition = false; + $interfaceDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['trait' => $token[1], 'line' => $token[2]], $parseContext); + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + $traitDefinition = [ + 'trait' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if (defined('T_ENUM') && $token[0] === T_ENUM) { + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['enum' => $token[1], 'line' => $token[2]], $parseContext); + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + $enumDefinition = [ + 'enum' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // static property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'static' => true, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + continue; + } + } + + if (in_array($token[0], [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR])) { // Scope + [$type, $nullable, $token] = $this->parseTypeAndNextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // instance property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'type' => $type, + 'nullable' => $nullable, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + continue; + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + + if (in_array($token[0], [T_NAMESPACE, T_USE]) === false) { + // Skip "use" & "namespace" to prevent "never imported" warnings) + if ($comment) { + // Not a doc-comment for a class, property or method? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + $comment = false; + } + } + + if ($token[0] === T_NAMESPACE) { + $parseContext->namespace = $this->parseNamespace($tokens, $token, $parseContext); + $aliases['__NAMESPACE__'] = $parseContext->namespace; + $docBlockParser->setAliases($aliases); + continue; + } + + if ($token[0] === T_USE) { + $statements = $this->parseUseStatement($tokens, $token, $parseContext); + foreach ($statements as $alias => $target) { + if ($classDefinition) { + // class traits + $classDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } elseif ($traitDefinition) { + // trait traits + $traitDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } else { + // not a trait use + $parseContext->uses[$alias] = $target; + + $namespaces = $generator->getNamespaces(); + if (null === $namespaces) { + $aliases[strtolower($alias)] = $target; + } else { + foreach ($namespaces as $namespace) { + if (strcasecmp(substr($target . '\\', 0, strlen($namespace)), $namespace) === 0) { + $aliases[strtolower($alias)] = $target; + break; + } + } + } + $docBlockParser->setAliases($aliases); + } + } + } + } + + // cleanup final comment and definition + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + + return $analysis; + } + + /** + * Parse comment and add annotations to analysis. + */ + private function analyseComment(Analysis $analysis, DocBlockParser $docBlockParser, string $comment, Context $context): void + { + $analysis->addAnnotations($docBlockParser->fromComment($comment, $context), $context); + } + + /** + * The next non-whitespace, non-comment token. + * + * + * @return array|string The next token (or false) + */ + private function nextToken(array &$tokens, Context $context) + { + while (true) { + $token = next($tokens); + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + continue; + } + if ($token[0] === T_COMMENT) { + $pos = strpos($token[1], '@OA\\'); + if ($pos) { + $line = $context->line ? $context->line + $token[2] : $token[2]; + $commentContext = new Context(['line' => $line], $context); + $context->logger->warning('Annotations are only parsed inside `/**` DocBlocks, skipping ' . $commentContext); + } + continue; + } + } + + return $token; + } + } + + private function parseAttribute(array &$tokens, &$token, Context $parseContext): void + { + $nesting = 1; + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!is_array($token) && '[' === $token) { + ++$nesting; + continue; + } + + if (!is_array($token) && ']' === $token) { + --$nesting; + if (!$nesting) { + break; + } + } + } + } + + /** + * @return int[] + */ + private function php8NamespaceToken(): array + { + return defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + } + + /** + * Parse namespaced string. + * + * @param array|string $token + */ + private function parseNamespace(array &$tokens, &$token, Context $parseContext): string + { + $namespace = ''; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!in_array($token[0], $nsToken)) { + break; + } + $namespace .= $token[1]; + } + + return $namespace; + } + + /** + * Parse comma separated list of namespaced strings. + * + * @param array|string $token + */ + private function parseNamespaceList(array &$tokens, &$token, Context $parseContext): array + { + $namespaces = []; + while ($namespace = $this->parseNamespace($tokens, $token, $parseContext)) { + $namespaces[] = $namespace; + if ($token != ',') { + break; + } + } + + return $namespaces; + } + + /** + * Parse a use statement. + */ + private function parseUseStatement(array &$tokens, &$token, Context $parseContext): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } else { + break; + } + } + + return $statements; + } + + /** + * Parse type of variable (if it exists). + */ + private function parseTypeAndNextToken(array &$tokens, Context $parseContext): array + { + $type = Generator::UNDEFINED; + $nullable = false; + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token === '?') { // nullable type + $nullable = true; + $token = $this->nextToken($tokens, $parseContext); + } + + $qualifiedToken = array_merge([T_NS_SEPARATOR, T_STRING, T_ARRAY], $this->php8NamespaceToken()); + $typeToken = array_merge([T_STRING], $this->php8NamespaceToken()); + // drill down namespace segments to basename property type declaration + while (in_array($token[0], $qualifiedToken)) { + if (in_array($token[0], $typeToken)) { + $type = $token[1]; + } + $token = $this->nextToken($tokens, $parseContext); + } + + return [$type, $nullable, $token]; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php new file mode 100644 index 0000000..8d916e2 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php @@ -0,0 +1,356 @@ +scanTokens(token_get_all(file_get_contents($filename))); + } + + /** + * Scan file for all classes, interfaces and traits. + * + * @return array> File details + */ + protected function scanTokens(array $tokens): array + { + $units = []; + $uses = []; + $isInterface = false; + $namespace = ''; + $currentName = null; + $unitLevel = 0; + $lastToken = null; + $stack = []; + + $initUnit = function ($uses): array { + return [ + 'uses' => $uses, + 'interfaces' => [], + 'traits' => [], + 'enums' => [], + 'methods' => [], + 'properties' => [], + ]; + }; + + while (false !== ($token = $this->nextToken($tokens))) { + if (!is_array($token)) { + switch ($token) { + case '{': + $stack[] = $token; + break; + case '}': + array_pop($stack); + if (count($stack) == $unitLevel) { + $currentName = null; + } + break; + } + continue; + } + + switch ($token[0]) { + case T_CURLY_OPEN: + case T_DOLLAR_OPEN_CURLY_BRACES: + $stack[] = $token[1]; + break; + + case T_NAMESPACE: + $namespace = $this->nextWord($tokens); + break; + + case T_USE: + if (!$stack) { + $uses = array_merge($uses, $this->parseFQNStatement($tokens, $token)); + } elseif ($currentName) { + $traits = $this->resolveFQN($this->parseFQNStatement($tokens, $token), $namespace, $uses); + $units[$currentName]['traits'] = array_merge($units[$currentName]['traits'], $traits); + } + break; + + case T_CLASS: + if ($currentName) { + break; + } + + if ($lastToken && is_array($lastToken) && $lastToken[0] === T_DOUBLE_COLON) { + // ::class + break; + } + + // class name + $token = $this->nextToken($tokens); + + // unless ... + if (is_string($token) && ($token === '(' || $token === '{')) { + // new class[()] { ... } + if ('{' == $token) { + prev($tokens); + } + break; + } elseif (is_array($token) && in_array($token[1], ['extends', 'implements'])) { + // new class[()] extends { ... } + break; + } + + $isInterface = false; + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_INTERFACE: + if ($currentName) { + break; + } + + $isInterface = true; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_EXTENDS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($isInterface && $currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + if (!is_array($token) || T_IMPLEMENTS !== $token[0]) { + break; + } + // no break + case T_IMPLEMENTS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + break; + + case T_FUNCTION: + $token = $this->nextToken($tokens); + + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['methods'][] = $token[1]; + if (!$isInterface) { + // more nesting + $units[$currentName]['properties'] = array_merge( + $units[$currentName]['properties'], + $this->parsePromotedProperties($tokens) + ); + $this->skipTo($tokens, '{', true); + } else { + // no function body + $this->skipTo($tokens, ';'); + } + } + break; + + case T_VARIABLE: + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['properties'][] = substr($token[1], 1); + } + break; + default: + // handle trait here too to avoid duplication + if (T_TRAIT === $token[0] || (defined('T_ENUM') && T_ENUM === $token[0])) { + if ($currentName) { + break; + } + + $isInterface = false; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $this->skipTo($tokens, '{', true); + $units[$currentName] = $initUnit($uses); + } + break; + + } + $lastToken = $token; + } + + return $units; + } + + /** + * Get the next token that is not whitespace or comment. + */ + protected function nextToken(array &$tokens) + { + $token = true; + while ($token) { + $token = next($tokens); + if (is_array($token)) { + if (in_array($token[0], [T_WHITESPACE, T_COMMENT])) { + continue; + } + } + + return $token; + } + + return $token; + } + + protected function resolveFQN(array $names, string $namespace, array $uses): array + { + $resolve = function ($name) use ($namespace, $uses) { + if ('\\' == $name[0]) { + return substr($name, 1); + } + + if (array_key_exists($name, $uses)) { + return $uses[$name]; + } + + return $namespace . '\\' . $name; + }; + + return array_values(array_map($resolve, $names)); + } + + protected function skipTo(array &$tokens, string $char, bool $prev = false): void + { + while (false !== ($token = next($tokens))) { + if (is_string($token) && $token == $char) { + if ($prev) { + prev($tokens); + } + + break; + } + } + } + + /** + * Read next word. + * + * Skips leading whitespace. + */ + protected function nextWord(array &$tokens): string + { + $word = ''; + while (false !== ($token = next($tokens))) { + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + if ($word) { + break; + } + continue; + } + $word .= $token[1]; + } + } + + return $word; + } + + /** + * Parse a use statement. + */ + protected function parseFQNStatement(array &$tokens, array &$token): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $php8NSToken = defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $php8NSToken); + while ($token !== false) { + $token = $this->nextToken($tokens); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token[0] === T_IMPLEMENTS) { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === '{') { + $statements[$normalizeAlias($alias)] = $class; + prev($tokens); + break; + } else { + break; + } + } + + return $statements; + } + + protected function parsePromotedProperties(array &$tokens): array + { + $properties = []; + + $this->skipTo($tokens, '('); + $round = 1; + $promoted = false; + while (false !== ($token = $this->nextToken($tokens))) { + if (is_string($token)) { + switch ($token) { + case '(': + ++$round; + break; + case ')': + --$round; + if (0 == $round) { + return $properties; + } + } + } + if (is_array($token)) { + switch ($token[0]) { + case T_PUBLIC: + case T_PROTECTED: + case T_PRIVATE: + $promoted = true; + break; + case T_VARIABLE: + if ($promoted) { + $properties[] = ltrim($token[1], '$'); + $promoted = false; + } + break; + } + } + } + + return $properties; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php new file mode 100644 index 0000000..eec1071 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php @@ -0,0 +1,440 @@ +annotations = new \SplObjectStorage(); + $this->context = $context; + + $this->addAnnotations($annotations, $context); + } + + public function addAnnotation(object $annotation, Context $context): void + { + if ($this->annotations->contains($annotation)) { + return; + } + + if ($annotation instanceof OpenApi) { + $this->openapi = $this->openapi ?: $annotation; + } else { + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + if (in_array($annotation, $context->annotations, true) === false) { + $context->annotations[] = $annotation; + } + } + $this->annotations->attach($annotation, $context); + $blacklist = property_exists($annotation, '_blacklist') ? $annotation::$_blacklist : []; + foreach ($annotation as $property => $value) { + if (in_array($property, $blacklist)) { + if ($property === '_unmerged') { + foreach ($value as $item) { + $this->addAnnotation($item, $context); + } + } + continue; + } elseif (is_array($value)) { + foreach ($value as $item) { + if ($item instanceof AbstractAnnotation) { + $this->addAnnotation($item, $context); + } + } + } elseif ($value instanceof AbstractAnnotation) { + $this->addAnnotation($value, $context); + } + } + } + + public function addAnnotations(array $annotations, Context $context): void + { + foreach ($annotations as $annotation) { + $this->addAnnotation($annotation, $context); + } + } + + public function addClassDefinition(array $definition): void + { + $class = $definition['context']->fullyQualifiedName($definition['class']); + $this->classes[$class] = $definition; + } + + public function addInterfaceDefinition(array $definition): void + { + $interface = $definition['context']->fullyQualifiedName($definition['interface']); + $this->interfaces[$interface] = $definition; + } + + public function addTraitDefinition(array $definition): void + { + $trait = $definition['context']->fullyQualifiedName($definition['trait']); + $this->traits[$trait] = $definition; + } + + public function addEnumDefinition(array $definition): void + { + $enum = $definition['context']->fullyQualifiedName($definition['enum']); + $this->enums[$enum] = $definition; + } + + public function addAnalysis(Analysis $analysis): void + { + foreach ($analysis->annotations as $annotation) { + $this->addAnnotation($annotation, $analysis->annotations[$annotation]); + } + $this->classes = array_merge($this->classes, $analysis->classes); + $this->interfaces = array_merge($this->interfaces, $analysis->interfaces); + $this->traits = array_merge($this->traits, $analysis->traits); + $this->enums = array_merge($this->enums, $analysis->enums); + if ($this->openapi === null && $analysis->openapi !== null) { + $this->openapi = $analysis->openapi; + } + } + + /** + * Get all subclasses of the given parent class. + * + * @param string $parent the parent class + * + * @return array map of class => definition pairs of sub-classes + */ + public function getSubClasses(string $parent): array + { + $definitions = []; + foreach ($this->classes as $class => $classDefinition) { + if ($classDefinition['extends'] === $parent) { + $definitions[$class] = $classDefinition; + $definitions = array_merge($definitions, $this->getSubClasses($class)); + } + } + + return $definitions; + } + + /** + * Get a list of all super classes for the given class. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class parents + * + * @return array map of class => definition pairs of parent classes + */ + public function getSuperClasses(string $class, bool $direct = false): array + { + $classDefinition = isset($this->classes[$class]) ? $this->classes[$class] : null; + if (!$classDefinition || empty($classDefinition['extends'])) { + // unknown class, or no inheritance + return []; + } + + $extends = $classDefinition['extends']; + $extendsDefinition = isset($this->classes[$extends]) ? $this->classes[$extends] : null; + if (!$extendsDefinition) { + return []; + } + + $parentDetails = [$extends => $extendsDefinition]; + + if ($direct) { + return $parentDetails; + } + + return array_merge($parentDetails, $this->getSuperClasses($extends)); + } + + /** + * Get the list of interfaces used by the given class or by classes which it extends. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class interfaces + * + * @return array map of class => definition pairs of interfaces + */ + public function getInterfacesOfClass(string $class, bool $direct = false): array + { + $classes = $direct ? [] : array_keys($this->getSuperClasses($class)); + // add self + $classes[] = $class; + + $definitions = []; + foreach ($classes as $clazz) { + if (isset($this->classes[$clazz])) { + $definition = $this->classes[$clazz]; + if (isset($definition['implements'])) { + foreach ($definition['implements'] as $interface) { + if (array_key_exists($interface, $this->interfaces)) { + $definitions[$interface] = $this->interfaces[$interface]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for interfaces extending other interfaces + $collect = function ($interfaces, $cb) use (&$definitions): void { + foreach ($interfaces as $interface) { + if (isset($this->interfaces[$interface]['extends'])) { + $cb($this->interfaces[$interface]['extends'], $cb); + foreach ($this->interfaces[$interface]['extends'] as $fqdn) { + $definitions[$fqdn] = $this->interfaces[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * Get the list of traits used by the given class/trait or by classes which it extends. + * + * @param string $source the source name + * @param bool $direct flag to find only the actual class traits + * + * @return array map of class => definition pairs of traits + */ + public function getTraitsOfClass(string $source, bool $direct = false): array + { + $sources = $direct ? [] : array_keys($this->getSuperClasses($source)); + // add self + $sources[] = $source; + + $definitions = []; + foreach ($sources as $sourze) { + if (isset($this->classes[$sourze]) || isset($this->traits[$sourze])) { + $definition = isset($this->classes[$sourze]) ? $this->classes[$sourze] : $this->traits[$sourze]; + if (isset($definition['traits'])) { + foreach ($definition['traits'] as $trait) { + if (array_key_exists($trait, $this->traits)) { + $definitions[$trait] = $this->traits[$trait]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for traits using other traits + $collect = function ($traits, $cb) use (&$definitions): void { + foreach ($traits as $trait) { + if (isset($this->traits[$trait]['traits'])) { + $cb($this->traits[$trait]['traits'], $cb); + foreach ($this->traits[$trait]['traits'] as $fqdn) { + $definitions[$fqdn] = $this->traits[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * @param string|array $classes One ore more class names + * @param bool $strict in non-strict mode child classes are also detected + * + * @return AbstractAnnotation[] + */ + public function getAnnotationsOfType($classes, bool $strict = false): array + { + $annotations = []; + if ($strict) { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if (get_class($annotation) === $class) { + $annotations[] = $annotation; + } + } + } + } else { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if ($annotation instanceof $class) { + $annotations[] = $annotation; + } + } + } + } + + return $annotations; + } + + /** + * @param string $fqdn the source class/interface/trait + */ + public function getSchemaForSource(string $fqdn): ?AnnotationSchema + { + $fqdn = '\\' . ltrim($fqdn, '\\'); + + foreach ([$this->classes, $this->interfaces, $this->traits, $this->enums] as $definitions) { + if (array_key_exists($fqdn, $definitions)) { + $definition = $definitions[$fqdn]; + if (is_iterable($definition['context']->annotations)) { + foreach (array_reverse($definition['context']->annotations) as $annotation) { + if (in_array(get_class($annotation), [AnnotationSchema::class, AttributeSchema::class]) && !$annotation->_aux) { + return $annotation; + } + } + } + } + } + + return null; + } + + public function getContext(object $annotation): ?Context + { + if ($annotation instanceof AbstractAnnotation) { + return $annotation->_context; + } + if ($this->annotations->contains($annotation) === false) { + throw new \Exception('Annotation not found'); + } + $context = $this->annotations[$annotation]; + if ($context instanceof Context) { + return $context; + } + // Weird, did you use the addAnnotation/addAnnotations methods? + throw new \Exception('Annotation has no context'); + } + + /** + * Build an analysis with only the annotations that are merged into the OpenAPI annotation. + */ + public function merged(): Analysis + { + if ($this->openapi === null) { + throw new \Exception('No openapi target set. Run the MergeIntoOpenApi processor'); + } + $unmerged = $this->openapi->_unmerged; + $this->openapi->_unmerged = []; + $analysis = new Analysis([$this->openapi], $this->context); + $this->openapi->_unmerged = $unmerged; + + return $analysis; + } + + /** + * Analysis with only the annotations that not merged. + */ + public function unmerged(): Analysis + { + return $this->split()->unmerged; + } + + /** + * Split the annotation into two analysis. + * One with annotations that are merged and one with annotations that are not merged. + * + * @return object {merged: Analysis, unmerged: Analysis} + */ + public function split() + { + $result = new \stdClass(); + $result->merged = $this->merged(); + $result->unmerged = new Analysis([], $this->context); + foreach ($this->annotations as $annotation) { + if ($result->merged->annotations->contains($annotation) === false) { + $result->unmerged->annotations->attach($annotation, $this->annotations[$annotation]); + } + } + + return $result; + } + + /** + * Apply the processor(s). + * + * @param callable|callable[] $processors One or more processors + */ + public function process($processors = null): void + { + if (is_array($processors) === false && is_callable($processors)) { + $processors = [$processors]; + } + foreach ($processors as $processor) { + $processor($this); + } + } + + public function validate(): bool + { + if ($this->openapi !== null) { + return $this->openapi->validate(); + } + + $this->context->logger->warning('No openapi target set. Run the MergeIntoOpenApi processor before validate()'); + + return false; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php new file mode 100644 index 0000000..b4469be --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php @@ -0,0 +1,714 @@ + + */ + public $x = Generator::UNDEFINED; + + /** + * Arbitrary attachables for this annotation. + * These will be ignored but can be used for custom processing. + * + * @var array + */ + public $attachables = Generator::UNDEFINED; + + /** + * @var bool + */ + public $_aux = false; + + /** + * @var Context|null + */ + public $_context = null; + + /** + * Annotations that couldn't be merged by mapping or postprocessing. + * + * @var array + */ + public $_unmerged = []; + + /** + * The properties which are required by [the spec](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). + * + * @var array + */ + public static $_required = []; + + /** + * Specify the type of the property. + * + * Examples: + * 'name' => 'string' // a string + * 'required' => 'boolean', // true or false + * 'tags' => '[string]', // array containing strings + * 'in' => ["query", "header", "path", "formData", "body"] // must be one on these + * 'oneOf' => [Schema::class] // array of schema objects. + * + * @var array> + */ + public static $_types = []; + + /** + * Declarative mapping of Annotation types to properties. + * Examples: + * Info::clas => 'info', // Set @OA\Info annotation as the info property. + * Parameter::clas => ['parameters'], // Append @OA\Parameter annotations the parameters array. + * PathItem::clas => ['paths', 'path'], // Append @OA\PathItem annotations the paths array and use path as key. + * + * @var array,string|array> + */ + public static $_nested = []; + + /** + * Reverse mapping of $_nested with the allowed parent annotations. + * + * @var array> + */ + public static $_parents = []; + + /** + * List of properties are blacklisted from the JSON output. + * + * @var array + */ + public static $_blacklist = ['_context', '_unmerged', '_analysis', '_aux', 'attachables']; + + public function __construct(array $properties) + { + if (isset($properties['_context'])) { + $this->_context = $properties['_context']; + unset($properties['_context']); + } elseif (Generator::$context) { + $this->_context = Generator::$context; + } else { + $this->_context = Context::detect(1); + } + + if ($this->_context->is('annotations') === false) { + $this->_context->annotations = []; + } + + $this->_context->annotations[] = $this; + $nestedContext = new Context(['nested' => $this], $this->_context); + foreach ($properties as $property => $value) { + if (property_exists($this, $property)) { + $this->$property = $value; + if (is_array($value)) { + foreach ($value as $key => $annotation) { + if (is_object($annotation) && $annotation instanceof AbstractAnnotation) { + $this->$property[$key] = $this->nested($annotation, $nestedContext); + } + } + } + } elseif ($property !== 'value') { + $this->$property = $value; + } elseif (is_array($value)) { + $annotations = []; + foreach ($value as $annotation) { + if ($annotation instanceof AbstractAnnotation) { + $annotations[] = $annotation; + } else { + $this->_context->logger->warning('Unexpected field in ' . $this->identity() . ' in ' . $this->_context); + } + } + $this->merge($annotations); + } elseif (is_object($value)) { + $this->merge([$value]); + } else { + if ($value !== Generator::UNDEFINED) { + $this->_context->logger->warning('Unexpected parameter "' . $property . '" in ' . $this->identity()); + } + } + } + + if ($this instanceof OpenApi) { + if ($this->_context->root()->version) { + // override via `Generator::setVersion()` + $this->openapi = $this->_context->root()->version; + } else { + $this->_context->root()->version = $this->openapi; + } + } + } + + public function __get($property) + { + $properties = get_object_vars($this); + $this->_context->logger->warning('Property "' . $property . '" doesn\'t exist in a ' . $this->identity() . ', existing properties: "' . implode('", "', array_keys($properties)) . '" in ' . $this->_context); + } + + public function __set($property, $value) + { + $fields = get_object_vars($this); + foreach (static::$_blacklist as $_property) { + unset($fields[$_property]); + } + $this->_context->logger->warning('Unexpected field "' . $property . '" for ' . $this->identity() . ', expecting "' . implode('", "', array_keys($fields)) . '" in ' . $this->_context); + $this->$property = $value; + } + + /** + * Merge given annotations to their mapped properties configured in static::$_nested. + * + * Annotations that couldn't be merged are added to the _unmerged array. + * + * @param AbstractAnnotation[] $annotations + * @param bool $ignore Ignore unmerged annotations + * + * @return AbstractAnnotation[] The unmerged annotations + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = []; + $nestedContext = new Context(['nested' => $this], $this->_context); + + foreach ($annotations as $annotation) { + $mapped = false; + if ($details = static::matchNested(get_class($annotation))) { + $property = $details->value; + if (is_array($property)) { + $property = $property[0]; + if (Generator::isDefault($this->$property)) { + $this->$property = []; + } + $this->$property[] = $this->nested($annotation, $nestedContext); + $mapped = true; + } elseif (Generator::isDefault($this->$property)) { + // ignore duplicate nested if only one expected + $this->$property = $this->nested($annotation, $nestedContext); + $mapped = true; + } + } + if (!$mapped) { + $unmerged[] = $annotation; + } + } + if (!$ignore) { + foreach ($unmerged as $annotation) { + $this->_unmerged[] = $this->nested($annotation, $nestedContext); + } + } + + return $unmerged; + } + + /** + * Merge the properties from the given object into this annotation. + * Prevents overwriting properties that are already configured. + * + * @param object $object + */ + public function mergeProperties($object): void + { + $defaultValues = get_class_vars(get_class($this)); + $currentValues = get_object_vars($this); + foreach ($object as $property => $value) { + if ($property === '_context') { + continue; + } + if ($currentValues[$property] === $defaultValues[$property]) { // Overwrite default values + $this->$property = $value; + continue; + } + if ($property === '_unmerged') { + $this->_unmerged = array_merge($this->_unmerged, $value); + continue; + } + if ($currentValues[$property] !== $value) { // New value is not the same? + if ($defaultValues[$property] === $value) { // but is the same as the default? + continue; // Keep current, no notice + } + $identity = method_exists($object, 'identity') ? $object->identity() : get_class($object); + $context1 = $this->_context; + $context2 = property_exists($object, '_context') ? $object->_context : 'unknown'; + if (is_object($this->$property) && $this->{$property} instanceof AbstractAnnotation) { + $context1 = $this->$property->_context; + } + $this->_context->logger->error('Multiple definitions for ' . $identity . '->' . $property . "\n Using: " . $context1 . "\n Skipping: " . $context2); + } + } + } + + /** + * Generate the documentation in YAML format. + */ + public function toYaml($flags = null): string + { + if ($flags === null) { + $flags = Yaml::DUMP_OBJECT_AS_MAP ^ Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE; + } + + return Yaml::dump(json_decode($this->toJson(JSON_INVALID_UTF8_IGNORE)), 10, 2, $flags); + } + + /** + * Generate the documentation in JSON format. + */ + public function toJson(?int $flags = null): string + { + if ($flags === null) { + $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE; + } + + return json_encode($this, $flags); + } + + public function __debugInfo() + { + $properties = []; + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $properties[$property] = $value; + } + } + + return $properties; + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = new \stdClass(); + + // Strip undefined values. + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $data->$property = $value; + } + } + + // Strip properties that are for internal (swagger-php) use. + foreach (static::$_blacklist as $property) { + unset($data->$property); + } + + // Correct empty array to empty objects. + foreach (static::$_types as $property => $type) { + if ($type === 'object' && is_array($data->$property) && empty($data->$property)) { + $data->$property = new \stdClass(); + } + } + + // Inject vendor properties. + unset($data->x); + if (is_array($this->x)) { + foreach ($this->x as $property => $value) { + $prefixed = 'x-' . $property; + $data->$prefixed = $value; + } + } + + // Map nested keys + foreach (static::$_nested as $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->$property)) { + continue; + } + $keyField = $nested[1]; + $object = new \stdClass(); + foreach ($this->$property as $key => $item) { + if (is_numeric($key) === false && is_array($item)) { + $object->$key = $item; + } else { + $key = $item->$keyField; + if (!Generator::isDefault($key) && empty($object->$key)) { + if ($item instanceof \JsonSerializable) { + $object->$key = $item->jsonSerialize(); + } else { + $object->$key = $item; + } + unset($object->$key->$keyField); + } + } + } + $data->$property = $object; + } + + // $ref + if (isset($data->ref)) { + // Only specific https://github.com/OAI/OpenAPI-Specification/blob/3.1.0/versions/3.1.0.md#reference-object + $ref = ['$ref' => $data->ref]; + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + $defaultValues = get_class_vars(get_class($this)); + foreach (['summary', 'description'] as $prop) { + if (property_exists($this, $prop)) { + if ($this->$prop !== $defaultValues[$prop]) { + $ref[$prop] = $data->$prop; + } + } + } + } + $data = (object) $ref; + } + + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + if (isset($data->nullable)) { + if (true === $data->nullable) { + $data->type = (array) $data->type; + $data->type[] = 'null'; + } + unset($data->nullable); + } + } + + return $data; + } + + /** + * Validate annotation tree, and log notices & warnings. + * + * @param array $stack the path of annotations above this annotation in the tree + * @param array $skip (prevent stack overflow, when traversing an infinite dependency graph) + * @param string $ref Current ref path? + * @param object $context a free-form context contains + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = true; + + // Report orphaned annotations + foreach ($this->_unmerged as $annotation) { + if (!is_object($annotation)) { + $this->_context->logger->warning('Unexpected type: "' . gettype($annotation) . '" in ' . $this->identity() . '->_unmerged, expecting a Annotation object'); + break; + } + + $class = get_class($annotation); + if ($details = static::matchNested($class)) { + $property = $details->value; + if (is_array($property)) { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . ' multiple found, skipped: ' . $annotation->_context); + } else { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . " multiple found in:\n Using: " . $this->$property->_context . "\n Skipped: " . $annotation->_context); + } + } elseif ($annotation instanceof AbstractAnnotation) { + $message = 'Unexpected ' . $annotation->identity(); + if ($class::$_parents) { + $message .= ', expected to be inside ' . implode(', ', Util::shorten($class::$_parents)); + } + $this->_context->logger->warning($message . ' in ' . $annotation->_context); + } + $valid = false; + } + + // Report conflicting key + foreach (static::$_nested as $annotationClass => $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->$property)) { + continue; + } + $keys = []; + $keyField = $nested[1]; + foreach ($this->$property as $key => $item) { + if (is_array($item) && is_numeric($key) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' is an object literal, use nested ' . Util::shorten($annotationClass) . '() annotation(s) in ' . $this->_context); + $keys[$key] = $item; + } elseif (Generator::isDefault($item->$keyField)) { + $this->_context->logger->error($item->identity() . ' is missing key-field: "' . $keyField . '" in ' . $item->_context); + } elseif (isset($keys[$item->$keyField])) { + $this->_context->logger->error('Multiple ' . $item->_identity([]) . ' with the same ' . $keyField . '="' . $item->$keyField . "\":\n " . $item->_context . "\n " . $keys[$item->$keyField]->_context); + } else { + $keys[$item->$keyField] = $item; + } + } + } + + if (property_exists($this, 'ref') && !Generator::isDefault($this->ref) && $this->ref !== null) { + if (substr($this->ref, 0, 2) === '#/' && count($stack) > 0 && $stack[0] instanceof OpenApi) { + // Internal reference + try { + $stack[0]->ref($this->ref); + } catch (\Exception $e) { + $this->_context->logger->warning($e->getMessage() . ' for ' . $this->identity() . ' in ' . $this->_context, ['exception' => $e]); + } + } + } else { + // Report missing required fields (when not a $ref) + foreach (static::$_required as $property) { + if (Generator::isDefault($this->$property)) { + $message = 'Missing required field "' . $property . '" for ' . $this->identity() . ' in ' . $this->_context; + foreach (static::$_nested as $class => $nested) { + $nestedProperty = is_array($nested) ? $nested[0] : $nested; + if ($property === $nestedProperty) { + if ($this instanceof OpenApi) { + $message = 'Required ' . Util::shorten($class) . '() not found'; + } elseif (is_array($nested)) { + $message = $this->identity() . ' requires at least one ' . Util::shorten($class) . '() in ' . $this->_context; + } else { + $message = $this->identity() . ' requires a ' . Util::shorten($class) . '() in ' . $this->_context; + } + break; + } + } + $this->_context->logger->warning($message); + } + } + } + + // Report invalid types + foreach (static::$_types as $property => $type) { + $value = $this->$property; + if (Generator::isDefault($value) || $value === null) { + continue; + } + if (is_string($type)) { + if ($this->validateType($type, $value) === false) { + $valid = false; + $this->_context->logger->warning($this->identity() . '->' . $property . ' is a "' . gettype($value) . '", expecting a "' . $type . '" in ' . $this->_context); + } + } elseif (is_array($type)) { // enum? + if (in_array($value, $type) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' "' . $value . '" is invalid, expecting "' . implode('", "', $type) . '" in ' . $this->_context); + } + } else { + throw new \Exception('Invalid ' . get_class($this) . '::$_types[' . $property . ']'); + } + } + $stack[] = $this; + + return self::_validate($this, $stack, $skip, $ref, $context) ? $valid : false; + } + + /** + * Recursively validate all annotation properties. + * + * @param array|object $fields + */ + private static function _validate($fields, array $stack, array $skip, string $baseRef, ?object $context): bool + { + $valid = true; + $blacklist = []; + if (is_object($fields)) { + if (in_array($fields, $skip, true)) { + return true; + } + $skip[] = $fields; + $blacklist = property_exists($fields, '_blacklist') ? $fields::$_blacklist : []; + } + + foreach ($fields as $field => $value) { + if ($value === null || is_scalar($value) || in_array($field, $blacklist)) { + continue; + } + $ref = $baseRef !== '' ? $baseRef . '/' . urlencode((string) $field) : urlencode((string) $field); + if (is_object($value)) { + if (method_exists($value, 'validate')) { + if (!$value->validate($stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (!self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (is_array($value) && !self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } + + return $valid; + } + + /** + * Return a identity for easy debugging. + * Example: "@OA\Get(path="/pets")". + */ + public function identity(): string + { + $class = get_class($this); + $properties = []; + foreach (static::$_parents as $parent) { + foreach ($parent::$_nested as $annotationClass => $entry) { + if ($annotationClass === $class && is_array($entry) && !Generator::isDefault($this->{$entry[1]})) { + $properties[] = $entry[1]; + break 2; + } + } + } + + return $this->_identity($properties); + } + + /** + * Find matching nested details. + * + * @param string $class the class to match + * + * @return null|object key/value object or `null` + */ + public static function matchNested(string $class) + { + if (array_key_exists($class, static::$_nested)) { + return (object) ['key' => $class, 'value' => static::$_nested[$class]]; + } + + $parent = $class; + // only consider the immediate OpenApi parent + while (0 !== strpos($parent, 'OpenApi\\Annotations\\') && $parent = get_parent_class($parent)) { + if ($kvp = static::matchNested($parent)) { + return $kvp; + } + } + + return null; + } + + /** + * Helper for generating the identity(). + */ + protected function _identity(array $properties): string + { + $fields = []; + foreach ($properties as $property) { + $value = $this->$property; + if ($value !== null && !Generator::isDefault($value)) { + $fields[] = $property . '=' . (is_string($value) ? '"' . $value . '"' : $value); + } + } + + return Util::shorten(get_class($this)) . '(' . implode(',', $fields) . ')'; + } + + /** + * Validates the matching of the property value to a annotation type. + * + * @param string $type The annotations property type + * @param mixed $value The property value + */ + private function validateType(string $type, $value): bool + { + if (substr($type, 0, 1) === '[' && substr($type, -1) === ']') { // Array of a specified type? + if ($this->validateType('array', $value) === false) { + return false; + } + $itemType = substr($type, 1, -1); + foreach ($value as $i => $item) { + if ($this->validateType($itemType, $item) === false) { + return false; + } + } + + return true; + } + + if (is_subclass_of($type, AbstractAnnotation::class)) { + $type = 'object'; + } + + return $this->validateDefaultTypes($type, $value); + } + + /** + * Validates default Open Api types. + * + * @param string $type The property type + * @param mixed $value The value to validate + */ + private function validateDefaultTypes(string $type, $value): bool + { + switch ($type) { + case 'string': + return is_string($value); + case 'boolean': + return is_bool($value); + case 'integer': + return is_int($value); + case 'number': + return is_numeric($value); + case 'object': + return is_object($value); + case 'array': + return $this->validateArrayType($value); + case 'scheme': + return in_array($value, ['http', 'https', 'ws', 'wss'], true); + default: + throw new \Exception('Invalid type "' . $type . '"'); + } + } + + /** + * Validate array type. + */ + private function validateArrayType($value): bool + { + if (is_array($value) === false) { + return false; + } + $count = 0; + foreach ($value as $i => $item) { + //not a array, but a hash/map + if ($count !== $i) { + return false; + } + $count++; + } + + return true; + } + + /** + * Wrap the context with a reference to the annotation it is nested in. + * + * @param AbstractAnnotation $annotation + * + * @return AbstractAnnotation + */ + protected function nested(AbstractAnnotation $annotation, Context $nestedContext) + { + if (property_exists($annotation, '_context') && $annotation->_context === $this->_context) { + $annotation->_context = $nestedContext; + } + + return $annotation; + } + + protected function combine(...$args): array + { + $combined = []; + foreach ($args as $arg) { + if (is_array($arg)) { + $combined = array_merge($combined, $arg); + } else { + $combined[] = $arg; + } + } + + return array_filter($combined, function ($value) { + return !Generator::isDefault($value) && $value !== null; + }); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php new file mode 100644 index 0000000..0cdf211 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php @@ -0,0 +1,38 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php new file mode 100644 index 0000000..5cb64ef --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php @@ -0,0 +1,73 @@ + + */ + public $schemas = Generator::UNDEFINED; + + /** + * Reusable Responses. + * + * @var Response[] + */ + public $responses = Generator::UNDEFINED; + + /** + * Reusable Parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * Reusable Examples. + * + * @var Examples[] + */ + public $examples = Generator::UNDEFINED; + + /** + * Reusable Request Bodies. + * + * @var RequestBody[] + */ + public $requestBodies = Generator::UNDEFINED; + + /** + * Reusable Headers. + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * Reusable Security Schemes. + * + * @var SecurityScheme[] + */ + public $securitySchemes = Generator::UNDEFINED; + + /** + * Reusable Links. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * Reusable Callbacks. + * + * @var callable[] + */ + public $callbacks = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Response::class => ['responses', 'response'], + Parameter::class => ['parameters', 'parameter'], + PathParameter::class => ['parameters', 'parameter'], + RequestBody::class => ['requestBodies', 'request'], + Examples::class => ['examples', 'example'], + Header::class => ['headers', 'header'], + SecurityScheme::class => ['securitySchemes', 'securityScheme'], + Link::class => ['links', 'link'], + Schema::class => ['schemas', 'schema'], + Attachable::class => ['attachables'], + ]; + + /** + * Generate a `#/components/...` reference for the given annotation. + * + * A `string` component value always assumes type `Schema`. + * + * @param AbstractAnnotation|string $component + */ + public static function ref($component, bool $encode = true): string + { + if ($component instanceof AbstractAnnotation) { + foreach (Components::$_nested as $type => $nested) { + // exclude attachables + if (2 == count($nested)) { + if ($component instanceof $type) { + $type = $nested[0]; + $name = $component->{$nested[1]}; + break; + } + } + } + } else { + $type = 'schemas'; + $name = $component; + } + + return self::COMPONENTS_PREFIX . $type . '/' . ($encode ? Util::refEncode((string) $name) : $name); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php new file mode 100644 index 0000000..1075627 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php @@ -0,0 +1,63 @@ + 'string', + 'url' => 'string', + 'email' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php new file mode 100644 index 0000000..8c3a54f --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php @@ -0,0 +1,25 @@ + 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Schema::class, + Property::class, + AdditionalProperties::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php new file mode 100644 index 0000000..c38a24b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php @@ -0,0 +1,96 @@ + 'string', + 'description' => 'string', + 'externalValue' => 'string', + ]; + + public static $_required = ['summary']; + + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php new file mode 100644 index 0000000..81bff45 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php @@ -0,0 +1,76 @@ + 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + Tag::class, + Schema::class, + AdditionalProperties::class, + Property::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php new file mode 100644 index 0000000..5409206 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php @@ -0,0 +1,106 @@ + ['implicit', 'password', 'authorizationCode', 'clientCredentials'], + 'refreshUrl' => 'string', + 'authorizationUrl' => 'string', + 'tokenUrl' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + SecurityScheme::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + if (is_array($this->scopes) && empty($this->scopes)) { + $this->scopes = new \stdClass(); + } + + return parent::jsonSerialize(); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php new file mode 100644 index 0000000..c0ff442 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php @@ -0,0 +1,25 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php new file mode 100644 index 0000000..db535b3 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php @@ -0,0 +1,98 @@ + 'string', + 'version' => 'string', + 'description' => 'string', + 'termsOfService' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Contact::class => 'contact', + License::class => 'license', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php new file mode 100644 index 0000000..c46ec94 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php @@ -0,0 +1,62 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Property::class, + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + $parent = end($stack); + if ($parent instanceof Schema && $parent->type !== 'array') { + $this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context); + $valid = false; + } + + // @todo Additional validation when used inside a Header or Parameter context. + + return $valid; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php new file mode 100644 index 0000000..348f8d6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php @@ -0,0 +1,42 @@ +`'application/json'` will be generated. + * + * @Annotation + */ +class JsonContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php new file mode 100644 index 0000000..01e7250 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php @@ -0,0 +1,102 @@ + 'string', + 'identifier' => 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['name']; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + unset($data->identifier); + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if ($this->_context->isVersion(OpenApi::VERSION_3_1_0)) { + if (!Generator::isDefault($this->url) && $this->identifier !== Generator::UNDEFINED) { + $this->_context->logger->warning($this->identity() . ' url and identifier are mutually exclusive'); + $valid = false; + } + } + + return $valid; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php new file mode 100644 index 0000000..99924db --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php @@ -0,0 +1,113 @@ +links array. + * + * @var string + */ + public $link = Generator::UNDEFINED; + + /** + * A relative or absolute reference to an OA operation. + * + * This field is mutually exclusive of the operationId field, and must point to an Operation object. + * + * Relative values may be used to locate an existing Operation object in the OpenAPI definition. + * + * @var string + */ + public $operationRef = Generator::UNDEFINED; + + /** + * The name of an existing, resolvable OA operation, as defined with a unique operationId. + * + * This field is mutually exclusive of the operationRef field. + * + * @var string + */ + public $operationId = Generator::UNDEFINED; + + /** + * A map representing parameters to pass to an operation as specified with operationId or identified via + * operationRef. + * + * The key is the parameter name to be used, whereas the value can be a constant or an expression to + * be evaluated and passed to the linked operation. + * The parameter name can be qualified using the parameter location [{in}.]{name} for operations + * that use the same parameter name in different locations (e.g. path.id). + * + * @var array + */ + public $parameters = Generator::UNDEFINED; + + /** + * A literal value or {expression} to use as a request body when calling the target operation. + */ + public $requestBody = Generator::UNDEFINED; + + /** + * A description of the link. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * A server object to be used by the target operation. + * + * @var Server + */ + public $server = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Server::class => 'server', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php new file mode 100644 index 0000000..5abfcdb --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php @@ -0,0 +1,87 @@ +content array. + * + * @var string + */ + public $mediaType = Generator::UNDEFINED; + + /** + * The schema defining the type used for the request body. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example object should be in the correct format as specified by the media type. + * The example object is mutually exclusive of the examples object. + * + * Furthermore, if referencing a schema which contains an example, + * the example value shall override the example provided by the schema. + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example object should match the media type and specified schema if present. + * The examples object is mutually exclusive of the example object. + * + * Furthermore, if referencing a schema which contains an example, + * the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map between a property name and its encoding information. + * + * The key, being the property name, must exist in the schema as a property. + * + * The encoding object shall only apply to requestBody objects when the media type is multipart or + * application/x-www-form-urlencoded. + * + * @var array + */ + public $encoding = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Response::class, + RequestBody::class, + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php new file mode 100644 index 0000000..5a42184 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php @@ -0,0 +1,236 @@ +@OA\Server objects, which provide connectivity information to a target server. + * + * If not provided, or is an empty array, the default value would be a Server Object with an url value of /. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * The available paths and operations for the API. + * + * @var PathItem[] + */ + public $paths = Generator::UNDEFINED; + + /** + * An element to hold various components for the specification. + * + * @var Components + */ + public $components = Generator::UNDEFINED; + + /** + * Lists the required security schemes to execute this operation. + * + * The name used for each property must correspond to a security scheme declared + * in the Security Schemes under the Components Object. + * Security Requirement Objects that contain multiple schemes require that + * all schemes must be satisfied for a request to be authorized. + * This enables support for scenarios where multiple query parameters or + * HTTP headers are required to convey security information. + * When a list of Security Requirement Objects is defined on the Open API object or + * Operation Object, only one of Security Requirement Objects in the list needs to + * be satisfied to authorize the request. + * + * @var array + */ + public $security = Generator::UNDEFINED; + + /** + * A list of tags used by the specification with additional metadata. + * + * The order of the tags can be used to reflect on their order by the parsing tools. + * Not all tags that are used by the Operation Object must be declared. + * The tags that are not declared may be organized randomly or based on the tools' logic. + * Each tag name in the list must be unique. + * + * @var Tag[] + */ + public $tags = Generator::UNDEFINED; + + /** + * Additional external documentation. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * @var Analysis + */ + public $_analysis = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['openapi', 'info', 'paths']; + + /** + * @inheritdoc + */ + public static $_nested = [ + Info::class => 'info', + Server::class => ['servers'], + PathItem::class => ['paths', 'path'], + Components::class => 'components', + Tag::class => ['tags'], + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_types = []; + + /** + * @inheritdoc + */ + public function validate(array $stack = null, array $skip = null, string $ref = '', $context = null): bool + { + if ($stack !== null || $skip !== null || $ref !== '') { + $this->_context->logger->warning('Nested validation for ' . $this->identity() . ' not allowed'); + + return false; + } + + if (!in_array($this->openapi, self::SUPPORTED_VERSIONS)) { + $this->_context->logger->warning('Unsupported OpenAPI version "' . $this->openapi . '". Allowed versions are: ' . implode(', ', self::SUPPORTED_VERSIONS)); + + return false; + } + + return parent::validate([], [], '#', new \stdClass()); + } + + /** + * Save the OpenAPI documentation to a file. + */ + public function saveAs(string $filename, string $format = 'auto'): void + { + if ($format === 'auto') { + $format = strtolower(substr($filename, -5)) === '.json' ? 'json' : 'yaml'; + } + + if (strtolower($format) === 'json') { + $content = $this->toJson(); + } else { + $content = $this->toYaml(); + } + + if (file_put_contents($filename, $content) === false) { + throw new \Exception('Failed to saveAs("' . $filename . '", "' . $format . '")'); + } + } + + /** + * Look up an annotation with a $ref url. + * + * @param string $ref The $ref value, for example: "#/components/schemas/Product" + */ + public function ref(string $ref) + { + if (substr($ref, 0, 2) !== '#/') { + // @todo Add support for external (http) refs? + throw new \Exception('Unsupported $ref "' . $ref . '", it should start with "#/"'); + } + + return $this->resolveRef($ref, '#/', $this, []); + } + + /** + * Recursive helper for ref(). + */ + private static function resolveRef(string $ref, string $resolved, $container, array $mapping) + { + if ($ref === $resolved) { + return $container; + } + $path = substr($ref, strlen($resolved)); + $slash = strpos($path, '/'); + + $subpath = $slash === false ? $path : substr($path, 0, $slash); + $property = Util::refDecode($subpath); + $unresolved = $slash === false ? $resolved . $subpath : $resolved . $subpath . '/'; + + if (is_object($container)) { + if (property_exists($container, $property) === false) { + throw new \Exception('$ref "' . $ref . '" not found'); + } + if ($slash === false) { + return $container->$property; + } + $mapping = []; + if ($container instanceof AbstractAnnotation) { + foreach ($container::$_nested as $nestedClass => $nested) { + if (is_string($nested) === false && count($nested) === 2 && $nested[0] === $property) { + $mapping[$nestedClass] = $nested[1]; + } + } + } + + return self::resolveRef($ref, $unresolved, $container->$property, $mapping); + } elseif (is_array($container)) { + if (array_key_exists($property, $container)) { + return self::resolveRef($ref, $unresolved, $container[$property], []); + } + foreach ($mapping as $nestedClass => $keyField) { + foreach ($container as $key => $item) { + if (is_numeric($key) && is_object($item) && $item instanceof $nestedClass && (string) $item->$keyField === $property) { + return self::resolveRef($ref, $unresolved, $item, []); + } + } + } + } + + throw new \Exception('$ref "' . $unresolved . '" not found'); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php new file mode 100644 index 0000000..be8d60a --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php @@ -0,0 +1,248 @@ + 'string', + 'method' => 'string', + 'tags' => '[string]', + 'summary' => 'string', + 'description' => 'string', + 'deprecated' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Response::class => ['responses', 'response'], + ExternalDocumentation::class => 'externalDocs', + Server::class => ['servers'], + RequestBody::class => 'requestBody', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + unset($data->method); + unset($data->path); + + // ensure security elements are object + if (isset($data->security) && is_array($data->security)) { + foreach ($data->security as $key => $scheme) { + $data->security[$key] = (object) $scheme; + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (!Generator::isDefault($this->responses)) { + foreach ($this->responses as $response) { + if (!Generator::isDefault($response->response) && $response->response !== 'default' && preg_match('/^([12345]{1}[0-9]{2})|([12345]{1}XX)$/', (string) $response->response) === 0) { + $this->_context->logger->warning('Invalid value "' . $response->response . '" for ' . $response->_identity([]) . '->response, expecting "default", a HTTP Status Code or HTTP Status Code range definition in ' . $response->_context); + $valid = false; + } + } + } + + if (is_object($context) && !Generator::isDefault($this->operationId)) { + if (!property_exists($context, 'operationIds')) { + $context->operationIds = []; + } + + if (in_array($this->operationId, $context->operationIds)) { + $this->_context->logger->warning('operationId must be unique. Duplicate value found: "' . $this->operationId . '"'); + $valid = false; + } + + $context->operationIds[] = $this->operationId; + } + + return $valid; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php new file mode 100644 index 0000000..312505e --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php @@ -0,0 +1,25 @@ +Components::parameters or PathItem::parameters array. + * + * @var string + */ + public $parameter = Generator::UNDEFINED; + + /** + * The (case-sensitive) name of the parameter. + * + * If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object. + * + * If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored. + * For all other cases, the name corresponds to the parameter name used by the in property. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The location of the parameter. + * + * Possible values are "query", "header", "path" or "cookie". + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * A brief description of the parameter. + * + * This could contain examples of use. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Determines whether this parameter is mandatory. + * + * If the parameter location is "path", this property is required and its value must be true. + * Otherwise, the property may be included and its default value is false. + * + * @var bool + */ + public $required = Generator::UNDEFINED; + + /** + * Specifies that a parameter is deprecated and should be transitioned out of usage. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * Sets the ability to pass empty-valued parameters. + * + * This is valid only for query parameters and allows sending a parameter with an empty value. + * + * Default value is false. + * + * If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored. + * + * @var bool + */ + public $allowEmptyValue = Generator::UNDEFINED; + + /** + * Describes how the parameter value will be serialized depending on the type of the parameter value. + * + * Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form. + * + * @var string + */ + public $style = Generator::UNDEFINED; + + /** + * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. + * + * For other types of parameters this property has no effect. + * + * When style is form, the default value is true. + * For all other styles, the default value is false. + * + * @var bool + */ + public $explode = Generator::UNDEFINED; + + /** + * Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. + * + * This property only applies to parameters with an in value of query. + * + * The default value is false. + * + * @var bool + */ + public $allowReserved = Generator::UNDEFINED; + + /** + * The schema defining the type used for the parameter. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example should match the specified schema and encoding properties if present. + * The example object is mutually exclusive of the examples object. + * Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema. + * To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary. + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example should contain a value in the correct format as specified in the parameter encoding. + * The examples object is mutually exclusive of the example object. + * Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map containing the representations for the parameter. + * + * The key is the media type and the value describes it. + * The map must only contain one entry. + * + * @var MediaType[] + */ + public $content = Generator::UNDEFINED; + + /** + * Path-style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) + */ + public $matrix = Generator::UNDEFINED; + + /** + * Label style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.5) + */ + public $label = Generator::UNDEFINED; + + /** + * Form style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.8) + */ + public $form = Generator::UNDEFINED; + + /** + * Simple style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.2) + * + * @var array + */ + public $simple = Generator::UNDEFINED; + + /** + * Space separated array values. + * + * This option replaces collectionFormat equal to ssv from OpenAPI 2.0. + * + * @var array + */ + public $spaceDelimited = Generator::UNDEFINED; + + /** + * Pipe separated array values. + * + * This option replaces collectionFormat equal to pipes from OpenAPI 2.0. + * + * @var array + */ + public $pipeDelimited = Generator::UNDEFINED; + + /** + * Provides a simple way of rendering nested objects using form parameters. + */ + public $deepObject = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['name', 'in']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'in' => ['query', 'header', 'path', 'cookie'], + 'description' => 'string', + 'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'], + 'required' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + PathItem::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->ref)) { + if ($this->in === 'body') { + if (Generator::isDefault($this->schema)) { + $this->_context->logger->warning('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context); + $valid = false; + } + } + } + + return $valid; + } + + /** + * @inheritdoc + */ + public function identity(): string + { + return parent::_identity(['name', 'in']); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php new file mode 100644 index 0000000..7972f3b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php @@ -0,0 +1,25 @@ +paths array). + * + * @var string + */ + public $path = Generator::UNDEFINED; + + /** + * An optional, string summary, intended to apply to all operations in this path. + * + * @var string + */ + public $summary = Generator::UNDEFINED; + + /** + * A definition of a GET operation on this path. + * + * @var Get + */ + public $get = Generator::UNDEFINED; + + /** + * A definition of a PUT operation on this path. + * + * @var Put + */ + public $put = Generator::UNDEFINED; + + /** + * A definition of a POST operation on this path. + * + * @var Post + */ + public $post = Generator::UNDEFINED; + + /** + * A definition of a DELETE operation on this path. + * + * @var Delete + */ + public $delete = Generator::UNDEFINED; + + /** + * A definition of a OPTIONS operation on this path. + * + * @var Options + */ + public $options = Generator::UNDEFINED; + + /** + * A definition of a HEAD operation on this path. + * + * @var Head + */ + public $head = Generator::UNDEFINED; + + /** + * A definition of a PATCH operation on this path. + * + * @var Patch + */ + public $patch = Generator::UNDEFINED; + + /** + * A definition of a TRACE operation on this path. + * + * @var Trace + */ + public $trace = Generator::UNDEFINED; + + /** + * An alternative server array to service all operations in this path. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * A list of parameters that are applicable for all the operations described under this path. + * + * These parameters can be overridden at the operation level, but cannot be removed there. + * The list must not include duplicated parameters. + * A unique parameter is defined by a combination of a name and location. + * The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'path' => 'string', + 'summary' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Get::class => 'get', + Post::class => 'post', + Put::class => 'put', + Delete::class => 'delete', + Patch::class => 'patch', + Trace::class => 'trace', + Head::class => 'head', + Options::class => 'options', + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Server::class => ['servers'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php new file mode 100644 index 0000000..9e600b4 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php @@ -0,0 +1,25 @@ +properties array. + * + * @var string + */ + public $property = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Property::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php new file mode 100644 index 0000000..a0a0303 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php @@ -0,0 +1,25 @@ +|JsonContent|XmlContent + */ + public $content = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + 'required' => 'boolean', + 'request' => 'string', + ]; + + public static $_parents = [ + Components::class, + Delete::class, + Get::class, + Head::class, + Operation::class, + Options::class, + Patch::class, + Post::class, + Trace::class, + Put::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php new file mode 100644 index 0000000..5c8d304 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php @@ -0,0 +1,128 @@ +responses array. + * + * A HTTP status code or default. + * + * @var string|int + */ + public $response = Generator::UNDEFINED; + + /** + * A short description of the response. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Maps a header name to its definition. + * + * RFC7230 states header names are case insensitive. + * + * If a response header is defined with the name "Content-Type", it shall be ignored. + * + * @see [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * A map containing descriptions of potential response payloads. + * + * The key is a media type or media type range and the value describes it. + * + * For responses that match multiple keys, only the most specific key is applicable; + * e.g. text/plain overrides text/*. + * + * @var MediaType|JsonContent|XmlContent|array + */ + public $content = Generator::UNDEFINED; + + /** + * A map of operations links that can be followed from the response. + * + * The key of the map is a short name for the link, following the naming constraints of the names for Component + * Objects. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Header::class => ['headers', 'header'], + Link::class => ['links', 'link'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Patch::class, + Delete::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->description) && Generator::isDefault($this->ref)) { + $this->_context->logger->warning($this->identity() . ' One of description or ref is required'); + $valid = false; + } + + return $valid; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php new file mode 100644 index 0000000..c7f960b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php @@ -0,0 +1,440 @@ +schemas array. + * + * @var string + */ + public $schema = Generator::UNDEFINED; + + /** + * Can be used to decorate a user interface with information about the data produced by this user interface. + * + * Preferably short; use description for more details. + * + * @var string + */ + public $title = Generator::UNDEFINED; + + /** + * A description will provide explanation about the purpose of the instance described by this schema. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the + * value of this property. + * + * @var int + */ + public $maxProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to, + * the value of this property. + * + * @var int + */ + public $minProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against this property if its property set contains all elements in this property's + * array value. + * + * @var string[] + */ + public $required = Generator::UNDEFINED; + + /** + * @var Property[] + */ + public $properties = Generator::UNDEFINED; + + /** + * The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or + * "object". + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * The extending format for the previously mentioned type. See Data Type Formats for further details. + * + * @var string + */ + public $format = Generator::UNDEFINED; + + /** + * Required if type is "array". Describes the type of items in the array. + * + * @var Items + */ + public $items = Generator::UNDEFINED; + + /** + * Determines the format of the array if type array is used. + * Possible values are: + * - csv: comma separated values foo,bar. + * - ssv: space separated values foo bar. + * - tsv: tab separated values foo\tbar. + * - pipes: pipe separated values foo|bar. + * - multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz. + * This is valid only for parameters of type query or formData. + * Default value is csv. + * + * @var string + */ + public $collectionFormat = Generator::UNDEFINED; + + /** + * Sets a default value to the parameter. The type of the value depends on the defined type. + * + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor101) + */ + public $default = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var int|float + */ + public $maximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var bool + */ + public $exclusiveMaximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var int|float + */ + public $minimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var bool + */ + public $exclusiveMinimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor26) + * + * @var int + */ + public $maxLength = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor29) + * + * @var int + */ + public $minLength = Generator::UNDEFINED; + + /** + * A string instance is considered valid if the regular expression matches the instance successfully. + * + * @var string + */ + public $pattern = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor42) + * + * @var int + */ + public $maxItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor45) + * + * @var int + */ + public $minItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor49) + * + * @var bool + */ + public $uniqueItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor76) + * + * @var string[]|int[]|float[] + */ + public $enum = Generator::UNDEFINED; + + /** + * A numeric instance is valid against "multipleOf" if the result of the division of the instance by this + * property's value is an integer. + * + * @var int|float + */ + public $multipleOf = Generator::UNDEFINED; + + /** + * Adds support for polymorphism. + * + * The discriminator is an object name that is used to differentiate between other schemas which may satisfy the + * payload description. See Composition and Inheritance for more details. + * + * @var Discriminator + */ + public $discriminator = Generator::UNDEFINED; + + /** + * Declares the property as "read only". + * + * Relevant only for Schema "properties" definitions. + * + * This means that it may be sent as part of a response but should not be sent as part of the request. + * If the property is marked as readOnly being true and is in the required list, the required will take effect on + * the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $readOnly = Generator::UNDEFINED; + + /** + * Declares the property as "write only". + * + * Relevant only for Schema "properties" definitions. + * Therefore, it may be sent as part of a request but should not be sent as part of the response. + * If the property is marked as writeOnly being true and is in the required list, the required will take effect on + * the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $writeOnly = Generator::UNDEFINED; + + /** + * This may be used only on properties schemas. + * + * It has no effect on root schemas. + * Adds additional metadata to describe the XML representation of this property. + * + * @var Xml + */ + public $xml = Generator::UNDEFINED; + + /** + * Additional external documentation for this schema. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * A free-form property to include an example of an instance for this schema. + * + * To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to + * contain the example with escaping where necessary. + */ + public $example = Generator::UNDEFINED; + + /** + * Allows sending a null value for the defined schema. + * Default value is false. + * + * @var bool + */ + public $nullable = Generator::UNDEFINED; + + /** + * Specifies that a schema is deprecated and should be transitioned out of usage. + * Default value is false. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against all schemas + * defined by this property's value. + * + * @var array + */ + public $allOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against at least one + * schema defined by this property's value. + * + * @var array + */ + public $anyOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against exactly one schema + * defined by this property's value. + * + * @var array + */ + public $oneOf = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29. + */ + public $not = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#anchor64. + * + * @var bool|AdditionalProperties + */ + public $additionalProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10. + */ + public $additionalItems = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14. + */ + public $contains = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19. + */ + public $patternProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21. + */ + public $dependencies = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22. + */ + public $propertyNames = Generator::UNDEFINED; + + /** + * http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3. + * + * @var mixed + */ + public $const = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'title' => 'string', + 'description' => 'string', + 'required' => '[string]', + 'format' => 'string', + 'collectionFormat' => ['csv', 'ssv', 'tsv', 'pipes', 'multi'], + 'maximum' => 'number', + 'exclusiveMaximum' => 'boolean', + 'minimum' => 'number', + 'exclusiveMinimum' => 'boolean', + 'maxLength' => 'integer', + 'minLength' => 'integer', + 'pattern' => 'string', + 'maxItems' => 'integer', + 'minItems' => 'integer', + 'uniqueItems' => 'boolean', + 'multipleOf' => 'integer', + 'allOf' => '[' . Schema::class . ']', + 'oneOf' => '[' . Schema::class . ']', + 'anyOf' => '[' . Schema::class . ']', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + Header::class, + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if (isset($data->const)) { + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + $data->enum = [$data->const]; + unset($data->const); + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if ($this->type === 'array' && Generator::isDefault($this->items)) { + $this->_context->logger->warning('@OA\\Items() is required when ' . $this->identity() . ' has type "array" in ' . $this->_context); + + return false; + } + + return parent::validate($stack, $skip, $ref, $context); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php new file mode 100644 index 0000000..13fa564 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php @@ -0,0 +1,136 @@ +security array. + * + * @var string + */ + public $securityScheme = Generator::UNDEFINED; + + /** + * The type of the security scheme. + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * A short description for security scheme. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * The name of the header or query parameter to be used. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * Required The location of the API key. + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * The flow used by the OAuth2 security scheme. + * + * @var Flow[] + */ + public $flows = Generator::UNDEFINED; + + /** + * A hint to the client to identify how the bearer token is formatted. + * + * Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes. + * + * @var string + */ + public $bearerFormat = Generator::UNDEFINED; + + /** + * The name of the HTTP Authorization scheme. + * + * @see [RFC7235](https://tools.ietf.org/html/rfc7235#section-5.1) + * + * @var string + */ + public $scheme = Generator::UNDEFINED; + + /** + * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL. + * + * @var string + */ + public $openIdConnectUrl = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['securityScheme', 'type']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'type' => ['http', 'apiKey', 'oauth2', 'openIdConnect'], + 'description' => 'string', + 'name' => 'string', + 'bearerFormat' => 'string', + 'in' => ['query', 'header', 'cookie'], + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Flow::class => ['flows', 'flow'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + ]; + + /** + * @inheritdoc + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = parent::merge($annotations, $ignore); + + if ($this->type === 'oauth2') { + $this->name = Generator::UNDEFINED; + } + + return $unmerged; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php new file mode 100644 index 0000000..df0cb0d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php @@ -0,0 +1,87 @@ + ['variables', 'serverVariable'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'url' => 'string', + 'description' => 'string', + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php new file mode 100644 index 0000000..99423aa --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php @@ -0,0 +1,87 @@ +variables array. + * + * @var string + */ + public $serverVariable = Generator::UNDEFINED; + + /** + * An enumeration of values to be used if the substitution options are from a limited set. + * + * @var string[]|int[]|float[] + */ + public $enum = Generator::UNDEFINED; + + /** + * The default value to use for substitution, and to send, if an alternate value is not supplied. + * + * Unlike the Schema Object's default, this value must be provided by the consumer. + * + * @var string + */ + public $default = Generator::UNDEFINED; + + /** + * A map between a variable name and its value. + * + * The value is used for substitution in the server's URL template. + * + * @var array + */ + public $variables = Generator::UNDEFINED; + + /** + * An optional description for the server variable. + * + * CommonMark syntax MAY be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + Server::class, + ]; + + /** + * @inheritdoc + */ + public static $_required = ['default']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'default' => 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php new file mode 100644 index 0000000..670ac87 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php @@ -0,0 +1,66 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php new file mode 100644 index 0000000..aac2820 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php @@ -0,0 +1,25 @@ +true. + * + * If wrapped is false, it will be ignored. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The URL of the namespace definition. Value SHOULD be in the form of an URL. + * + * @var string + */ + public $namespace = Generator::UNDEFINED; + + /** + * The prefix to be used for the name. + * + * @var string + */ + public $prefix = Generator::UNDEFINED; + + /** + * Declares whether the property definition translates to an attribute instead of an element. + * + * Default value is false. + * + * @var bool + */ + public $attribute = Generator::UNDEFINED; + + /** + * MAY be used only for an array definition. + * + * Signifies whether the array is wrapped (for example <books><book/><book/></books>) + * or unwrapped (<book/><book/>). + * + * Default value is false. The definition takes effect only when defined alongside type being array (outside the items). + * + * @var bool + */ + public $wrapped = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'namespace' => 'string', + 'prefix' => 'string', + 'attribute' => 'boolean', + 'wrapped' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + Property::class, + Schema::class, + Items::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php new file mode 100644 index 0000000..59f7651 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php @@ -0,0 +1,43 @@ +`'application/xml'` will be generated. + * + * @Annotation + */ +class XmlContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php new file mode 100644 index 0000000..a6f28c8 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php @@ -0,0 +1,101 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php new file mode 100644 index 0000000..0fc6fa7 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php @@ -0,0 +1,16 @@ +|null $schemas + * @param Response[]|null $responses + * @param Parameter[]|null $parameters + * @param RequestBody[]|null $requestBodies + * @param Examples[]|null $examples + * @param Header[]|null $headers + * @param SecurityScheme[]|null $securitySchemes + * @param Link[]|null $links + * @param callable[]|null $callbacks + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $schemas = null, + ?array $responses = null, + ?array $parameters = null, + ?array $requestBodies = null, + ?array $examples = null, + ?array $headers = null, + ?array $securitySchemes = null, + ?array $links = null, + ?array $callbacks = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($schemas, $responses, $parameters, $examples, $requestBodies, $headers, $securitySchemes, $links, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php new file mode 100644 index 0000000..332979e --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $url = null, + ?string $email = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'email' => $email ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php new file mode 100644 index 0000000..d2f1c73 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $propertyName = null, + ?array $mapping = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'propertyName' => $propertyName ?? Generator::UNDEFINED, + 'mapping' => $mapping ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php new file mode 100644 index 0000000..9e1a9a0 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php @@ -0,0 +1,42 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $example = null, + ?string $summary = null, + ?string $description = null, + int|string|array|null $value = null, + ?string $externalValue = null, + string|object|null $ref = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'example' => $example ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'value' => $value ?? Generator::UNDEFINED, + 'externalValue' => $externalValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + ]); + if ($attachables) { + $this->merge($attachables); + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php new file mode 100644 index 0000000..f9bfa94 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php @@ -0,0 +1,32 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $description = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'description' => $description ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php new file mode 100644 index 0000000..80e6ebc --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $authorizationUrl = null, + ?string $tokenUrl = null, + ?string $refreshUrl = null, + ?string $flow = null, + ?array $scopes = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'authorizationUrl' => $authorizationUrl ?? Generator::UNDEFINED, + 'tokenUrl' => $tokenUrl ?? Generator::UNDEFINED, + 'refreshUrl' => $refreshUrl ?? Generator::UNDEFINED, + 'flow' => $flow ?? Generator::UNDEFINED, + 'scopes' => $scopes ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php new file mode 100644 index 0000000..81e5ad8 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $header = null, + ?string $description = null, + ?bool $required = null, + ?Schema $schema = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + // annotation4 + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'header' => $header ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables, $schema), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php new file mode 100644 index 0000000..39348f5 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $version = null, + ?string $description = null, + ?string $title = null, + ?string $termsOfService = null, + ?Contact $contact = null, + ?License $license = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'version' => $version ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'termsOfService' => $termsOfService ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($contact, $license, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php new file mode 100644 index 0000000..00d1d49 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php @@ -0,0 +1,105 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php new file mode 100644 index 0000000..5472064 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param Property[] $properties + * @param int|float $maximum + * @param int|float $minimum + * @param string[]|int[]|float[] $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php new file mode 100644 index 0000000..b929237 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $identifier = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'identifier' => $identifier ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php new file mode 100644 index 0000000..58eeb0a --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php @@ -0,0 +1,44 @@ + $parameters + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $link = null, + ?string $operationRef = null, + string|object|null $ref = null, + ?string $operationId = null, + ?array $parameters = null, + $requestBody = null, + ?string $description = null, + ?Server $server = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'link' => $link ?? Generator::UNDEFINED, + 'operationRef' => $operationRef ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'parameters' => $parameters ?? Generator::UNDEFINED, + 'requestBody' => $requestBody ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($server, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php new file mode 100644 index 0000000..b351510 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php @@ -0,0 +1,38 @@ + $examples + * @param array $encoding + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $mediaType = null, + ?Schema $schema = null, + $example = Generator::UNDEFINED, + ?array $examples = null, + ?array $encoding = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'mediaType' => $mediaType ?? Generator::UNDEFINED, + 'example' => $example, + 'encoding' => $encoding ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php new file mode 100644 index 0000000..ce625e2 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php @@ -0,0 +1,41 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string $openapi = self::DEFAULT_VERSION, + ?Info $info = null, + ?array $servers = null, + ?array $security = null, + ?array $tags = null, + ?ExternalDocumentation $externalDocs = null, + ?array $paths = null, + ?Components $components = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'openapi' => $openapi, + 'security' => $security ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($info, $servers, $tags, $externalDocs, $paths, $components, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php new file mode 100644 index 0000000..7473f3f --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php @@ -0,0 +1,55 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $operationId = null, + ?string $description = null, + ?string $summary = null, + ?array $security = null, + ?array $servers = null, + ?RequestBody $requestBody = null, + ?array $tags = null, + ?array $parameters = null, + ?array $responses = null, + ?array $callbacks = null, + ?ExternalDocumentation $externalDocs = null, + ?bool $deprecated = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'security' => $security ?? Generator::UNDEFINED, + 'servers' => $servers ?? Generator::UNDEFINED, + 'tags' => $tags ?? Generator::UNDEFINED, + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($requestBody, $responses, $parameters, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php new file mode 100644 index 0000000..175b962 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php @@ -0,0 +1,13 @@ + $examples + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $parameter = null, + ?string $name = null, + ?string $description = null, + ?string $in = null, + ?bool $required = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + string|object|null $ref = null, + ?Schema $schema = null, + $example = Generator::UNDEFINED, + ?array $examples = null, + ?string $style = null, + ?bool $explode = null, + ?bool $allowReserved = null, + ?array $spaceDelimited = null, + ?array $pipeDelimited = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'parameter' => $parameter ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'in' => Generator::isDefault($this->in) ? $in : $this->in, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'example' => $example, + 'style' => $style ?? Generator::UNDEFINED, + 'explode' => $explode ?? Generator::UNDEFINED, + 'allowReserved' => $allowReserved ?? Generator::UNDEFINED, + 'spaceDelimited' => $spaceDelimited ?? Generator::UNDEFINED, + 'pipeDelimited' => $pipeDelimited ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php new file mode 100644 index 0000000..1a0a3c8 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $summary = null, + ?array $servers = null, + ?array $parameters = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($servers, $parameters, $attachables), + ]); + } +} + +//Missing parameters: get, put, post, delete, options, head, patch, trace, parameters diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php new file mode 100644 index 0000000..70ccfd6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php @@ -0,0 +1,13 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $property = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'property' => $property ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php new file mode 100644 index 0000000..2133102 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php @@ -0,0 +1,13 @@ +|JsonContent|XmlContent|null $content + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $request = null, + ?string $description = null, + ?bool $required = null, + array|JsonContent|XmlContent|null $content = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'request' => $request ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($content, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php new file mode 100644 index 0000000..9106141 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php @@ -0,0 +1,43 @@ + $content + * @param Link[] $links + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + int|string $response = null, + ?string $description = null, + ?array $headers = null, + MediaType|JsonContent|XmlContent|array|null $content = null, + ?array $links = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'response' => $response ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($headers, $content, $links, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php new file mode 100644 index 0000000..5e4bfe5 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php @@ -0,0 +1,106 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param mixed $const + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + $const = Generator::UNDEFINED, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + 'const' => $const, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php new file mode 100644 index 0000000..f1d8bec --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php @@ -0,0 +1,48 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $securityScheme = null, + ?string $type = null, + ?string $description = null, + ?string $name = null, + ?string $in = null, + ?string $bearerFormat = null, + ?string $scheme = null, + ?string $openIdConnectUrl = null, + ?array $flows = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'securityScheme' => $securityScheme ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'in' => $in ?? Generator::UNDEFINED, + 'bearerFormat' => $bearerFormat ?? Generator::UNDEFINED, + 'scheme' => $scheme ?? Generator::UNDEFINED, + 'openIdConnectUrl' => $openIdConnectUrl ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($flows, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php new file mode 100644 index 0000000..337d595 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $url = null, + ?string $description = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'url' => $url ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($variables, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php new file mode 100644 index 0000000..e378812 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php @@ -0,0 +1,39 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $serverVariable = null, + ?string $description = null, + ?string $default = null, + ?array $enum = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'serverVariable' => $serverVariable ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'default' => $default ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'variables' => $variables ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php new file mode 100644 index 0000000..8ef0ef1 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php @@ -0,0 +1,33 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $description = null, + ?ExternalDocumentation $externalDocs = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php new file mode 100644 index 0000000..aff7fe7 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $namespace = null, + ?string $prefix = null, + ?bool $attribute = null, + ?bool $wrapped = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'namespace' => $namespace ?? Generator::UNDEFINED, + 'prefix' => $prefix ?? Generator::UNDEFINED, + 'attribute' => $attribute ?? Generator::UNDEFINED, + 'wrapped' => $wrapped ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php new file mode 100644 index 0000000..6126951 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param int|float $maximum + * @param int|float $minimum + * @param Property[] $properties + * @param string[]|int[]|float[] $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Context.php b/vendor/passkit/vendor/zircote/swagger-php/src/Context.php new file mode 100644 index 0000000..30ab050 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Context.php @@ -0,0 +1,273 @@ + $value) { + $this->$property = $value; + } + $this->_parent = $parent; + + $this->logger = $this->logger ?: new DefaultLogger(); + } + + /** + * Check if a property is set directly on this context and not its parent context. + * + * Example: $c->is('method') or $c->is('class') + */ + public function is(string $type): bool + { + return property_exists($this, $type); + } + + /** + * Check if a property is NOT set directly on this context and but its parent context. + * + * Example: $c->not('method') or $c->not('class') + */ + public function not(string $type): bool + { + return property_exists($this, $type) === false; + } + + /** + * Return the context containing the specified property. + */ + public function with(string $property): ?Context + { + if (property_exists($this, $property)) { + return $this; + } + if ($this->_parent !== null) { + return $this->_parent->with($property); + } + + return null; + } + + /** + * Get the root context. + */ + public function root(): Context + { + if ($this->_parent !== null) { + return $this->_parent->root(); + } + + return $this; + } + + /** + * Check if one of the given version numbers matches the current OpenAPI version. + * + * @param string|array $versions One or more version numbers + */ + public function isVersion($versions): bool + { + if (!$this->version) { + throw new \RuntimeException('Version is only available reliably for validation and serialization'); + } + + $versions = (array) $versions; + $currentVersion = $this->version ?: OpenApi::DEFAULT_VERSION; + + return in_array($currentVersion, $versions); + } + + /** + * Export location for debugging. + * + * @return string Example: "file1.php on line 12" + */ + public function getDebugLocation(): string + { + $location = ''; + if ($this->class && ($this->method || $this->property)) { + $location .= $this->fullyQualifiedName($this->class); + if ($this->method) { + $location .= ($this->static ? '::' : '->') . $this->method . '()'; + } elseif ($this->property) { + $location .= ($this->static ? '::$' : '->') . $this->property; + } + } + if ($this->filename) { + if ($location !== '') { + $location .= ' in '; + } + $location .= $this->filename; + } + if ($this->line) { + if ($location !== '') { + $location .= ' on'; + } + $location .= ' line ' . $this->line; + if ($this->character) { + $location .= ':' . $this->character; + } + } + + return $location; + } + + /** + * Traverse the context tree to get the property value. + */ + public function __get(string $property) + { + if ($this->_parent !== null) { + return $this->_parent->$property; + } + + return null; + } + + public function __toString() + { + return $this->getDebugLocation(); + } + + public function __debugInfo() + { + return ['-' => $this->getDebugLocation()]; + } + + /** + * Create a Context based on the debug_backtrace. + * + * @deprecated + */ + public static function detect(int $index = 0): Context + { + $context = new Context(); + $backtrace = debug_backtrace(); + $position = $backtrace[$index]; + if (isset($position['file'])) { + $context->filename = $position['file']; + } + if (isset($position['line'])) { + $context->line = $position['line']; + } + $caller = isset($backtrace[$index + 1]) ? $backtrace[$index + 1] : null; + if (isset($caller['function'])) { + $context->method = $caller['function']; + if (isset($caller['type']) && $caller['type'] === '::') { + $context->static = true; + } + } + if (isset($caller['class'])) { + $fqn = explode('\\', $caller['class']); + $context->class = array_pop($fqn); + if (count($fqn)) { + $context->namespace = implode('\\', $fqn); + } + } + + // @todo extract namespaces and use statements + return $context; + } + + /** + * Resolve the fully qualified name. + */ + public function fullyQualifiedName(?string $source): string + { + if ($source === null) { + return ''; + } + + if ($this->namespace) { + $namespace = str_replace('\\\\', '\\', '\\' . $this->namespace . '\\'); + } else { + // global namespace + $namespace = '\\'; + } + + $thisSource = $this->class ?? $this->interface ?? $this->trait; + if ($thisSource && strcasecmp($source, $thisSource) === 0) { + return $namespace . $thisSource; + } + $pos = strpos($source, '\\'); + if ($pos !== false) { + if ($pos === 0) { + // Fully qualified name (\Foo\Bar) + return $source; + } + // Qualified name (Foo\Bar) + if ($this->uses) { + foreach ($this->uses as $alias => $aliasedNamespace) { + $alias .= '\\'; + if (strcasecmp(substr($source, 0, strlen($alias)), $alias) === 0) { + // Aliased namespace (use \Long\Namespace as Foo) + return '\\' . $aliasedNamespace . substr($source, strlen($alias) - 1); + } + } + } + } elseif ($this->uses) { + // Unqualified name (Foo) + foreach ($this->uses as $alias => $aliasedNamespace) { + if (strcasecmp($alias, $source) === 0) { + return '\\' . $aliasedNamespace; + } + } + } + + return $namespace . $source; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php b/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php new file mode 100644 index 0000000..e82d565 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php @@ -0,0 +1,438 @@ + */ + public const DEFAULT_ALIASES = ['oa' => 'OpenApi\\Annotations']; + /** @var array */ + public const DEFAULT_NAMESPACES = ['OpenApi\\Annotations\\']; + + /** @var array Map of namespace aliases to be supported by doctrine. */ + protected $aliases; + + /** @var array|null List of annotation namespaces to be autoloaded by doctrine. */ + protected $namespaces; + + /** @var AnalyserInterface|null The configured analyzer. */ + protected $analyser; + + /** @var array */ + protected $config = []; + + /** @var callable[]|null List of configured processors. */ + protected $processors = null; + + /** @var LoggerInterface|null PSR logger. */ + protected $logger = null; + + /** + * OpenApi version override. + * + * If set, it will override the version set in the `OpenApi` annotation. + * + * Due to the order of processing any conditional code using this (via `Context::$version`) + * must come only after the analysis is finished. + * + * @var string|null + */ + protected $version = null; + + private $configStack; + + public function __construct(?LoggerInterface $logger = null) + { + $this->logger = $logger; + + $this->setAliases(self::DEFAULT_ALIASES); + $this->setNamespaces(self::DEFAULT_NAMESPACES); + + // kinda config stack to stay BC... + $this->configStack = new class() { + protected $generator; + + public function push(Generator $generator): void + { + $this->generator = $generator; + if (class_exists(AnnotationRegistry::class, true)) { + // keeping track of &this->generator allows to 'disable' the loader after we are done; + // no unload, unfortunately :/ + $gref = &$this->generator; + AnnotationRegistry::registerLoader( + function (string $class) use (&$gref): bool { + if ($gref) { + foreach ($gref->getNamespaces() as $namespace) { + if (strtolower(substr($class, 0, strlen($namespace))) === strtolower($namespace)) { + $loaded = class_exists($class); + if (!$loaded && $namespace === 'OpenApi\\Annotations\\') { + if (in_array(strtolower(substr($class, 20)), ['definition', 'path'])) { + // Detected an 2.x annotation? + throw new \Exception('The annotation @SWG\\' . substr($class, 20) . '() is deprecated. Found in ' . Generator::$context . "\nFor more information read the migration guide: https://github.com/zircote/swagger-php/blob/master/docs/Migrating-to-v3.md"); + } + } + + return $loaded; + } + } + } + + return false; + } + ); + } + } + + public function pop(): void + { + $this->generator = null; + } + }; + } + + public static function isDefault($value): bool + { + return $value === Generator::UNDEFINED; + } + + public function getAliases(): array + { + return $this->aliases; + } + + public function addAlias(string $alias, string $namespace): Generator + { + $this->aliases[$alias] = $namespace; + + return $this; + } + + public function setAliases(array $aliases): Generator + { + $this->aliases = $aliases; + + return $this; + } + + public function getNamespaces(): ?array + { + return $this->namespaces; + } + + public function addNamespace(string $namespace): Generator + { + $namespaces = (array) $this->getNamespaces(); + $namespaces[] = $namespace; + + return $this->setNamespaces(array_unique($namespaces)); + } + + public function setNamespaces(?array $namespaces): Generator + { + $this->namespaces = $namespaces; + + return $this; + } + + public function getAnalyser(): AnalyserInterface + { + $this->analyser = $this->analyser ?: new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); + $this->analyser->setGenerator($this); + + return $this->analyser; + } + + public function setAnalyser(?AnalyserInterface $analyser): Generator + { + $this->analyser = $analyser; + + return $this; + } + + public function getDefaultConfig(): array + { + return [ + 'operationId' => [ + 'hash' => true, + ], + ]; + } + + public function getConfig(): array + { + return $this->config + $this->getDefaultConfig(); + } + + /** + * Set generator and/or processor config. + * + * @param array $config + */ + public function setConfig(array $config): Generator + { + $this->config = $config + $this->config; + + return $this; + } + + /** + * @return callable[] + */ + public function getProcessors(): array + { + if (null === $this->processors) { + $this->processors = [ + new Processors\DocBlockDescriptions(), + new Processors\MergeIntoOpenApi(), + new Processors\MergeIntoComponents(), + new Processors\ExpandClasses(), + new Processors\ExpandInterfaces(), + new Processors\ExpandTraits(), + new Processors\ExpandEnums(), + new Processors\AugmentSchemas(), + new Processors\AugmentProperties(), + new Processors\BuildPaths(), + new Processors\AugmentParameters(), + new Processors\AugmentRefs(), + new Processors\MergeJsonContent(), + new Processors\MergeXmlContent(), + new Processors\OperationId(), + new Processors\CleanUnmerged(), + ]; + } + + $config = $this->getConfig(); + foreach ($this->processors as $processor) { + $rc = new \ReflectionClass($processor); + + // apply config + $processorKey = lcfirst($rc->getShortName()); + if (array_key_exists($processorKey, $config)) { + foreach ($config[$processorKey] as $name => $value) { + $setter = 'set' . ucfirst($name); + if (method_exists($processor, $setter)) { + $processor->{$setter}($value); + } + } + } + } + + return $this->processors; + } + + /** + * @param null|callable[] $processors + */ + public function setProcessors(?array $processors): Generator + { + $this->processors = $processors; + + return $this; + } + + public function addProcessor(callable $processor): Generator + { + $processors = $this->getProcessors(); + $processors[] = $processor; + $this->setProcessors($processors); + + return $this; + } + + public function removeProcessor(callable $processor, bool $silent = false): Generator + { + $processors = $this->getProcessors(); + if (false === ($key = array_search($processor, $processors, true))) { + if ($silent) { + return $this; + } + throw new \InvalidArgumentException('Processor not found'); + } + unset($processors[$key]); + $this->setProcessors($processors); + + return $this; + } + + /** + * Update/replace an existing processor with a new one. + * + * @param callable $processor The new processor + * @param null|callable $matcher Optional matcher callable to identify the processor to replace. + * If none given, matching is based on the processors class. + */ + public function updateProcessor(callable $processor, ?callable $matcher = null): Generator + { + $matcher = $matcher ?: function ($other) use ($processor): bool { + $otherClass = get_class($other); + + return $processor instanceof $otherClass; + }; + + $processors = array_map(function ($other) use ($processor, $matcher) { + return $matcher($other) ? $processor : $other; + }, $this->getProcessors()); + $this->setProcessors($processors); + + return $this; + } + + public function getLogger(): ?LoggerInterface + { + return $this->logger ?: new DefaultLogger(); + } + + public function getVersion(): ?string + { + return $this->version; + } + + public function setVersion(?string $version): Generator + { + $this->version = $version; + + return $this; + } + + public static function scan(iterable $sources, array $options = []): ?OpenApi + { + // merge with defaults + $config = $options + [ + 'aliases' => self::DEFAULT_ALIASES, + 'namespaces' => self::DEFAULT_NAMESPACES, + 'analyser' => null, + 'analysis' => null, + 'processors' => null, + 'logger' => null, + 'validate' => true, + 'version' => null, + ]; + + return (new Generator($config['logger'])) + ->setVersion($config['version']) + ->setAliases($config['aliases']) + ->setNamespaces($config['namespaces']) + ->setAnalyser($config['analyser']) + ->setProcessors($config['processors']) + ->generate($sources, $config['analysis'], $config['validate']); + } + + /** + * Run code in the context of this generator. + * + * @param callable $callable Callable in the form of + * `function(Generator $generator, Analysis $analysis, Context $context): mixed` + * + * @return mixed the result of the `callable` + */ + public function withContext(callable $callable) + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + return $callable($this, $analysis, $rootContext); + } finally { + $this->configStack->pop(); + } + } + + /** + * Generate OpenAPI spec by scanning the given source files. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string - file / directory name + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param null|Analysis $analysis custom analysis instance + * @param bool $validate flag to enable/disable validation of the returned spec + */ + public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): ?OpenApi + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = $analysis ?: new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + $this->scanSources($sources, $analysis, $rootContext); + + // post processing + $analysis->process($this->getProcessors()); + + if ($analysis->openapi) { + $analysis->openapi->openapi = $this->version ?: $analysis->openapi->openapi; + $rootContext->version = $analysis->openapi->openapi; + } + + // validation + if ($validate) { + $analysis->validate(); + } + } finally { + $this->configStack->pop(); + } + + return $analysis->openapi; + } + + protected function scanSources(iterable $sources, Analysis $analysis, Context $rootContext): void + { + $analyser = $this->getAnalyser(); + + foreach ($sources as $source) { + if (is_iterable($source)) { + $this->scanSources($source, $analysis, $rootContext); + } else { + $resolvedSource = $source instanceof \SplFileInfo ? $source->getPathname() : realpath($source); + if (!$resolvedSource) { + $rootContext->logger->warning(sprintf('Skipping invalid source: %s', $source)); + continue; + } + if (is_dir($resolvedSource)) { + $this->scanSources(Util::finder($resolvedSource), $analysis, $rootContext); + } else { + $analysis->addAnalysis($analyser->fromFile($resolvedSource, $rootContext)); + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php new file mode 100644 index 0000000..94e9406 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php @@ -0,0 +1,95 @@ +debug = $debug; + } + + public function loggedMessageAboveNotice(): bool + { + return $this->loggedMessageAboveNotice; + } + + /** + * @param array $context additional details; supports custom `prefix` and `exception` + */ + public function log($level, $message, array $context = []): void + { + $prefix = ''; + $color = ''; + // level adjustments + switch ($level) { + case LogLevel::DEBUG: + if (!$this->debug) { + return; + } + // no break + case LogLevel::WARNING: + $prefix = $context['prefix'] ?? 'Warning: '; + $color = static::COLOR_WARNING; + break; + case LogLevel::ERROR: + $prefix = $context['prefix'] ?? 'Error: '; + $color = static::COLOR_ERROR; + break; + } + $stop = !empty($color) ? static::COLOR_STOP : ''; + + if (!in_array($level, self::LOG_LEVELS_UP_TO_NOTICE, true)) { + $this->loggedMessageAboveNotice = true; + } + + /** @var ?\Exception $exception */ + $exception = $context['exception'] ?? null; + if ($message instanceof \Exception) { + $exception = $message; + $message = $exception->getMessage(); + } + + $logLine = sprintf('%s%s%s%s', $color, $prefix, $message, $stop); + error_log($logLine); + + if ($this->debug) { + if ($exception) { + error_log($exception->getTraceAsString()); + } elseif (!empty($logLine)) { + $stack = explode(PHP_EOL, (new \Exception())->getTraceAsString()); + // self + array_shift($stack); + // AbstractLogger + array_shift($stack); + foreach ($stack as $line) { + error_log($line); + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php new file mode 100644 index 0000000..d4118f0 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php @@ -0,0 +1,33 @@ +getMessage(); + } + + if (in_array($level, [LogLevel::NOTICE, LogLevel::INFO])) { + $error_level = E_USER_NOTICE; + } else { + $error_level = E_USER_WARNING; + } + + trigger_error($message, $error_level); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php new file mode 100644 index 0000000..2949702 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php @@ -0,0 +1,94 @@ +augmentOperationParameters = $augmentOperationParameters; + } + + public function isAugmentOperationParameters(): bool + { + return $this->augmentOperationParameters; + } + + public function setAugmentOperationParameters(bool $augmentOperationParameters): void + { + $this->augmentOperationParameters = $augmentOperationParameters; + } + + public function __invoke(Analysis $analysis) + { + $this->augmentSharedParameters($analysis); + if ($this->augmentOperationParameters) { + $this->augmentOperationParameters($analysis); + } + } + + /** + * Use the parameter->name as key field (parameter->parameter) when used as reusable component + * (openapi->components->parameters). + */ + protected function augmentSharedParameters(Analysis $analysis) + { + if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) { + $keys = []; + $parametersWithoutKey = []; + foreach ($analysis->openapi->components->parameters as $parameter) { + if (!Generator::isDefault($parameter->parameter)) { + $keys[$parameter->parameter] = $parameter; + } else { + $parametersWithoutKey[] = $parameter; + } + } + foreach ($parametersWithoutKey as $parameter) { + if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) { + $parameter->parameter = $parameter->name; + $keys[$parameter->parameter] = $parameter; + } + } + } + } + + protected function augmentOperationParameters(Analysis $analysis) + { + /** @var Operation[] $operations */ + $operations = $analysis->getAnnotationsOfType(Operation::class); + + foreach ($operations as $operation) { + if (!Generator::isDefault($operation->parameters)) { + $tags = []; + $this->extractContent($operation->_context->comment, $tags); + if (array_key_exists('param', $tags)) { + foreach ($tags['param'] as $name => $details) { + foreach ($operation->parameters as $parameter) { + if ($parameter->name == $name) { + if (Generator::isDefault($parameter->description) && $details['description']) { + $parameter->description = $details['description']; + } + } + } + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php new file mode 100644 index 0000000..9f3e7fc --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php @@ -0,0 +1,197 @@ +openapi->components) && !Generator::isDefault($analysis->openapi->components->schemas)) { + foreach ($analysis->openapi->components->schemas as $schema) { + if (!Generator::isDefault($schema->schema)) { + $refKey = $this->toRefKey($schema->_context, $schema->_context->class); + $refs[$refKey] = Components::ref($schema); + } + } + } + + /** @var Property[] $properties */ + $properties = $analysis->getAnnotationsOfType(Property::class); + + foreach ($properties as $property) { + $context = $property->_context; + + if (Generator::isDefault($property->property)) { + $property->property = $context->property; + } + + if (!Generator::isDefault($property->ref)) { + continue; + } + + $comment = str_replace("\r\n", "\n", (string) $context->comment); + preg_match('/@var\s+(?[^\s]+)([ \t])?(?.+)?$/im', $comment, $varMatches); + + if (Generator::isDefault($property->type)) { + $this->augmentType($analysis, $property, $context, $refs, $varMatches); + } else { + Util::mapNativeType($property, $property->type); + } + + if (Generator::isDefault($property->description) && isset($varMatches['description'])) { + $property->description = trim($varMatches['description']); + } + if (Generator::isDefault($property->description) && $this->isRoot($property)) { + $property->description = $this->extractContent($context->comment); + } + + if (Generator::isDefault($property->example) && preg_match('/@example\s+([ \t])?(?.+)?$/im', $comment, $varMatches)) { + $property->example = $varMatches['example']; + } + } + } + + protected function toRefKey(Context $context, ?string $name): string + { + $fqn = strtolower($context->fullyQualifiedName($name)); + + return ltrim($fqn, '\\'); + } + + protected function augmentType(Analysis $analysis, Property $property, Context $context, array $refs, array $varMatches): void + { + // docblock typehints + if (isset($varMatches['type'])) { + $allTypes = strtolower(trim($varMatches['type'])); + + if ($this->isNullable($allTypes) && Generator::isDefault($property->nullable)) { + $property->nullable = true; + } + + $allTypes = $this->stripNull($allTypes); + preg_match('/^([^\[]+)(.*$)/', $allTypes, $typeMatches); + $type = $typeMatches[1]; + + // finalise property type/ref + if (!Util::mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $property->ref = $refs[$refKey]; + } + } + + // ok, so we possibly have a type or ref + if (!Generator::isDefault($property->ref) && $typeMatches[2] === '' && $property->nullable) { + $refKey = $this->toRefKey($context, $type); + $property->oneOf = [ + $schema = new Schema([ + 'ref' => $refs[$refKey], + '_context' => $property->_context, + '_aux' => true, + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + $property->nullable = true; + } elseif ($typeMatches[2] === '[]') { + if (Generator::isDefault($property->items)) { + $property->items = $items = new Items( + [ + 'type' => $property->type, + '_context' => new Context(['generated' => true], $context), + '_aux' => true, + ] + ); + $analysis->addAnnotation($items, $items->_context); + if (!Generator::isDefault($property->ref)) { + $property->items->ref = $property->ref; + $property->ref = Generator::UNDEFINED; + } + $property->type = 'array'; + } + } + } + + // native typehints + if ($context->type && !Generator::isDefault($context->type)) { + if ($context->nullable === true) { + $property->nullable = true; + } + $type = strtolower($context->type); + if (!Util::mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $this->applyRef($analysis, $property, $refs[$refKey]); + } else { + if ($typeSchema = $analysis->getSchemaForSource($context->type)) { + if (Generator::isDefault($property->format)) { + $property->ref = Components::ref($typeSchema); + $property->type = Generator::UNDEFINED; + } + } + } + } + } + + if (!Generator::isDefault($property->const) && Generator::isDefault($property->type)) { + if (!Util::mapNativeType($property, gettype($property->const))) { + $property->type = Generator::UNDEFINED; + } + } + } + + protected function isNullable(string $typeDescription): bool + { + return in_array('null', explode('|', strtolower($typeDescription))); + } + + protected function stripNull(string $typeDescription): string + { + if (strpos($typeDescription, '|') === false) { + return $typeDescription; + } + $types = []; + foreach (explode('|', $typeDescription) as $type) { + if (strtolower($type) === 'null') { + continue; + } + $types[] = $type; + } + + return implode('|', $types); + } + + protected function applyRef(Analysis $analysis, Property $property, string $ref): void + { + if ($property->nullable === true) { + $property->oneOf = [ + $schema = new Schema([ + 'ref' => $ref, + '_context' => $property->_context, + '_aux' => true, + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + } else { + $property->ref = $ref; + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php new file mode 100644 index 0000000..adfb898 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php @@ -0,0 +1,50 @@ +getAnnotationsOfType(Schema::class); + + // ref rewriting + $updatedRefs = []; + foreach ($schemas as $schema) { + if ($schema->allOf!== Generator::UNDEFINED) { + // do we have to keep track of properties refs that need updating? + foreach ($schema->allOf as $ii => $allOfSchema) { + if ($allOfSchema->properties!== Generator::UNDEFINED) { + $updatedRefs[Components::ref($schema->schema . '/properties', false)] = Components::ref($schema->schema . '/allOf/' . $ii . '/properties', false); + break; + } + } + } + } + + if ($updatedRefs) { + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && $annotation->ref !== Generator::UNDEFINED && $annotation->ref !== null) { + foreach ($updatedRefs as $origRef => $updatedRef) { + if (0 === strpos($annotation->ref, $origRef)) { + $annotation->ref = str_replace($origRef, $updatedRef, $annotation->ref); + } + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php new file mode 100644 index 0000000..0e1186c --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php @@ -0,0 +1,137 @@ +getAnnotationsOfType(Schema::class); + + // Use the class names for @OA\Schema() + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->schema)) { + if ($schema->_context->is('class')) { + $schema->schema = $schema->_context->class; + } elseif ($schema->_context->is('interface')) { + $schema->schema = $schema->_context->interface; + } elseif ($schema->_context->is('trait')) { + $schema->schema = $schema->_context->trait; + } elseif ($schema->_context->is('enum')) { + $schema->schema = $schema->_context->enum; + } + } + } + + // Merge unmerged @OA\Property annotations into the @OA\Schema of the class + $unmergedProperties = $analysis->unmerged()->getAnnotationsOfType(Property::class); + foreach ($unmergedProperties as $property) { + if ($property->_context->nested) { + continue; + } + + $schemaContext = $property->_context->with('class') + ?: $property->_context->with('interface') + ?: $property->_context->with('trait') + ?: $property->_context->with('enum'); + if ($schemaContext->annotations) { + foreach ($schemaContext->annotations as $annotation) { + if ($annotation instanceof Schema) { + if ($annotation->_context->nested) { + // we shouldn't merge property into nested schemas + continue; + } + + if (!Generator::isDefault($annotation->allOf)) { + $schema = null; + foreach ($annotation->allOf as $nestedSchema) { + if (!Generator::isDefault($nestedSchema->ref)) { + continue; + } + + $schema = $nestedSchema; + } + + if ($schema === null) { + $schema = new Schema([ + '_context' => $annotation->_context, + '_aux' => true, + ]); + $analysis->addAnnotation($schema, $schema->_context); + $annotation->allOf[] = $schema; + } + + $schema->merge([$property], true); + break; + } + + $annotation->merge([$property], true); + break; + } + } + } + } + + // set schema type based on various properties + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->type)) { + if (is_array($schema->properties) && count($schema->properties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->additionalProperties) && count($schema->additionalProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->patternProperties) && count($schema->patternProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->propertyNames) && count($schema->propertyNames) > 0) { + $schema->type = 'object'; + } + } else { + if ($typeSchema = $analysis->getSchemaForSource($schema->type)) { + if (Generator::isDefault($schema->format)) { + $schema->ref = Components::ref($typeSchema); + $schema->type = Generator::UNDEFINED; + } + } + } + } + + // move schema properties into allOf if both exist + foreach ($schemas as $schema) { + if (!Generator::isDefault($schema->properties) && !Generator::isDefault($schema->allOf)) { + $allOfPropertiesSchema = null; + foreach ($schema->allOf as $allOfSchema) { + if (!Generator::isDefault($allOfSchema->properties)) { + $allOfPropertiesSchema = $allOfSchema; + break; + } + } + if (!$allOfPropertiesSchema) { + $allOfPropertiesSchema = new Schema([ + 'properties' => [], + '_context' => $schema->_context, + '_aux' => true, + ]); + $analysis->addAnnotation($allOfPropertiesSchema, $allOfPropertiesSchema->_context); + $schema->allOf[] = $allOfPropertiesSchema; + } + $allOfPropertiesSchema->properties = array_merge($allOfPropertiesSchema->properties, $schema->properties); + $schema->properties = Generator::UNDEFINED; + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php new file mode 100644 index 0000000..4688b96 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php @@ -0,0 +1,62 @@ +paths using the detected `@OA\PathItem` and `@OA\Operation` (`@OA\Get`, `@OA\Post`, etc). + */ +class BuildPaths +{ + public function __invoke(Analysis $analysis) + { + $paths = []; + // Merge @OA\PathItems with the same path. + if (!Generator::isDefault($analysis->openapi->paths)) { + foreach ($analysis->openapi->paths as $annotation) { + if (empty($annotation->path)) { + $annotation->_context->logger->warning($annotation->identity() . ' is missing required property "path" in ' . $annotation->_context); + } elseif (isset($paths[$annotation->path])) { + $paths[$annotation->path]->mergeProperties($annotation); + $analysis->annotations->detach($annotation); + } else { + $paths[$annotation->path] = $annotation; + } + } + } + + /** @var Operation[] $operations */ + $operations = $analysis->unmerged()->getAnnotationsOfType(Operation::class); + + // Merge @OA\Operations into existing @OA\PathItems or create a new one. + foreach ($operations as $operation) { + if ($operation->path) { + if (empty($paths[$operation->path])) { + $paths[$operation->path] = $pathItem = new PathItem( + [ + 'path' => $operation->path, + '_context' => new Context(['generated' => true], $operation->_context), + '_aux' => true, + ] + ); + $analysis->addAnnotation($pathItem, $pathItem->_context); + } + if ($paths[$operation->path]->merge([$operation])) { + $operation->_context->logger->warning('Unable to merge ' . $operation->identity() . ' in ' . $operation->_context); + } + } + } + if ($paths) { + $analysis->openapi->paths = array_values($paths); + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php new file mode 100644 index 0000000..20c12a6 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php @@ -0,0 +1,35 @@ +split(); + $merged = $split->merged->annotations; + $unmerged = $split->unmerged->annotations; + + /** @var AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, '_unmerged')) { + foreach ($annotation->_unmerged as $i => $item) { + if ($merged->contains($item)) { + unset($annotation->_unmerged[$i]); // Property was merged + } + } + } + } + $analysis->openapi->_unmerged = []; + foreach ($unmerged as $annotation) { + $analysis->openapi->_unmerged[] = $annotation; + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php new file mode 100644 index 0000000..adadf1b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php @@ -0,0 +1,110 @@ +openapi->components)) { + return; + } + + // allow multiple runs to catch nested dependencies + for ($ii = 0; $ii < 10; ++$ii) { + if (!$this->cleanup($analysis)) { + break; + } + } + } + + protected function cleanup(Analysis $analysis): bool + { + $usedRefs = []; + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && !Generator::isDefault($annotation->ref) && $annotation->ref !== null) { + $usedRefs[$annotation->ref] = $annotation->ref; + } + foreach (['allOf', 'anyOf', 'oneOff'] as $sub) { + if (property_exists($annotation, $sub) && !Generator::isDefault($annotation->{$sub})) { + foreach ($annotation->{$sub} as $subElem) { + if (is_object($subElem) && property_exists($subElem, 'ref') && !Generator::isDefault($subElem->ref) && $subElem->ref !== null) { + $usedRefs[$subElem->ref] = $subElem->ref; + } + } + } + } + if ($annotation instanceof OpenApi || $annotation instanceof Operation) { + if (!Generator::isDefault($annotation->security)) { + foreach ($annotation->security as $security) { + foreach (array_keys($security) as $securityName) { + $ref = Components::COMPONENTS_PREFIX . 'securitySchemes/' . $securityName; + $usedRefs[$ref] = $ref; + } + } + } + } + } + + $unusedRefs = []; + foreach (Components::$_nested as $nested) { + if (2 == count($nested)) { + // $nested[1] is the name of the property that holds the component name + [$componentType, $nameProperty] = $nested; + if (!Generator::isDefault($analysis->openapi->components->{$componentType})) { + foreach ($analysis->openapi->components->{$componentType} as $component) { + $ref = Components::ref($component); + if (!in_array($ref, $usedRefs)) { + $unusedRefs[$ref] = [$ref, $nameProperty]; + } + } + } + } + } + + $detachNested = function (Analysis $analysis, AbstractAnnotation $annotation, callable $detachNested): void { + foreach ($annotation::$_nested as $nested) { + $nestedKey = ((array) $nested)[0]; + if (!Generator::isDefault($annotation->{$nestedKey})) { + if (is_array($annotation->{$nestedKey})) { + foreach ($annotation->{$nestedKey} as $elem) { + if ($elem instanceof AbstractAnnotation) { + $detachNested($analysis, $elem, $detachNested); + } + } + } elseif ($annotation->{$nestedKey} instanceof AbstractAnnotation) { + $analysis->annotations->detach($annotation->{$nestedKey}); + } + } + } + $analysis->annotations->detach($annotation); + }; + + // remove unused + foreach ($unusedRefs as $refDetails) { + [$ref, $nameProperty] = $refDetails; + [$hash, $components, $componentType, $name] = explode('/', $ref); + foreach ($analysis->openapi->components->{$componentType} as $ii => $component) { + if ($component->{$nameProperty} == $name) { + $annotation = $analysis->openapi->components->{$componentType}[$ii]; + $detachNested($analysis, $annotation, $detachNested); + unset($analysis->openapi->components->{$componentType}[$ii]); + } + } + } + + return 0 != count($unusedRefs); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php new file mode 100644 index 0000000..7f4f845 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php @@ -0,0 +1,104 @@ +annotations as $annotation) { + if (property_exists($annotation, '_context') === false) { + // only annotations with context + continue; + } + + if (!$this->isRoot($annotation)) { + // only top-level annotations + continue; + } + + $hasSummary = property_exists($annotation, 'summary'); + $hasDescription = property_exists($annotation, 'description'); + if (!$hasSummary && !$hasDescription) { + continue; + } + + if ($hasSummary && $hasDescription) { + $this->summaryAndDescription($annotation); + } elseif ($hasDescription) { + $this->description($annotation); + } + } + } + + /** + * @param Operation|Property|Parameter|Schema $annotation + */ + protected function description(AbstractAnnotation $annotation): void + { + if (!Generator::isDefault($annotation->description)) { + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + } + + return; + } + + $annotation->description = $this->extractContent($annotation->_context->comment); + } + + /** + * @param Operation|Property|Parameter|Schema $annotation + */ + protected function summaryAndDescription(AbstractAnnotation $annotation): void + { + $ignoreSummary = !Generator::isDefault($annotation->summary); + $ignoreDescription = !Generator::isDefault($annotation->description); + if ($annotation->summary === null) { + $ignoreSummary = true; + $annotation->summary = Generator::UNDEFINED; + } + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + $ignoreDescription = true; + } + if ($ignoreSummary && $ignoreDescription) { + return; + } + if ($ignoreSummary) { + $annotation->description = $this->extractContent($annotation->_context->comment); + } elseif ($ignoreDescription) { + $annotation->summary = $this->extractContent($annotation->_context->comment); + } else { + $annotation->summary = $this->extractSummary($annotation->_context->comment); + $annotation->description = $this->extractDescription($annotation->_context->comment); + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php new file mode 100644 index 0000000..650b024 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php @@ -0,0 +1,170 @@ +_context) { + return true; + } + + if (1 == count($annotation->_context->annotations)) { + return true; + } + + // find best match + $matchPriorityMap = [ + Operation::class => false, + Property::class => false, + Parameter::class => false, + AnnotationSchema::class => true, + AttributeSchema::class => true, + ]; + foreach ($matchPriorityMap as $className => $strict) { + foreach ($annotation->_context->annotations as $contextAnnotation) { + if ($strict) { + if ($className == get_class($contextAnnotation)) { + return $annotation === $contextAnnotation; + } + } else { + if ($contextAnnotation instanceof $className) { + return $annotation === $contextAnnotation; + } + } + } + } + + return false; + } + + protected function handleTag(string $line, ?array &$tags = null): void + { + if (null === $tags) { + return; + } + + // split of tag name + $token = preg_split("@[\s+ ]@u", $line, 2); + if (2 == count($token)) { + $tag = substr($token[0], 1); + $tail = $token[1]; + if (!array_key_exists($tag, $tags)) { + $tags[$tag] = []; + } + + if (false !== ($dpos = strpos($tail, '$'))) { + $type = trim(substr($tail, 0, $dpos)); + $token = preg_split("@[\s+ ]@u", substr($tail, $dpos), 2); + $name = trim(substr($token[0], 1)); + $description = 2 == count($token) ? trim($token[1]) : null; + + $tags[$tag][$name] = [ + 'type' => $type, + 'description' => $description, + ]; + } + } + } + + /** + * The text contents of the phpdoc comment (excl. tags). + */ + public function extractContent(?string $docblock, ?array &$tags = null): string + { + if (Generator::isDefault($docblock)) { + return Generator::UNDEFINED; + } + + $comment = preg_split('/(\n|\r\n)/', (string) $docblock); + $comment[0] = preg_replace('/[ \t]*\\/\*\*/', '', $comment[0]); // strip '/**' + $i = count($comment) - 1; + $comment[$i] = preg_replace('/\*\/[ \t]*$/', '', $comment[$i]); // strip '*/' + $lines = []; + $append = false; + $skip = false; + foreach ($comment as $line) { + $line = ltrim($line, "\t *"); + if (substr($line, 0, 1) === '@') { + $this->handleTag($line, $tags); + $skip = true; + } + if ($skip) { + continue; + } + if ($append) { + $i = count($lines) - 1; + $lines[$i] = substr($lines[$i], 0, -1) . $line; + } else { + $lines[] = $line; + } + $append = (substr($line, -1) === '\\'); + } + $description = trim(implode("\n", $lines)); + if ($description === '') { + return Generator::UNDEFINED; + } + + return $description; + } + + /** + * A short piece of text, usually one line, providing the basic function of the associated element. + */ + public function extractSummary(?string $docblock): string + { + if (!$content = $this->extractContent($docblock)) { + return Generator::UNDEFINED; + } + $lines = preg_split('/(\n|\r\n)/', $content); + $summary = ''; + foreach ($lines as $line) { + $summary .= $line . "\n"; + if ($line === '' || substr($line, -1) === '.') { + return trim($summary); + } + } + $summary = trim($summary); + if ($summary === '') { + return Generator::UNDEFINED; + } + + return $summary; + } + + /** + * An optional longer piece of text providing more details on the associated element’s function. + * + * This is very useful when working with a complex element. + */ + public function extractDescription(?string $docblock): string + { + $summary = $this->extractSummary($docblock); + if (!$summary) { + return Generator::UNDEFINED; + } + + $description = ''; + if (false !== ($substr = substr($this->extractContent($docblock), strlen($summary)))) { + $description = trim($substr); + } + + return $description ?: Generator::UNDEFINED; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php new file mode 100644 index 0000000..7e729de --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php @@ -0,0 +1,49 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); + $existing = []; + foreach ($ancestors as $ancestor) { + $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); + if ($ancestorSchema) { + $refPath = !Generator::isDefault($ancestorSchema->schema) ? $ancestorSchema->schema : $ancestor['class']; + $this->inheritFrom($analysis, $schema, $ancestorSchema, $refPath, $ancestor['context']); + + // one ancestor is enough + break; + } else { + $this->mergeAnnotations($schema, $ancestor, $existing); + $this->mergeMethods($schema, $ancestor, $existing); + $this->mergeProperties($schema, $ancestor, $existing); + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php new file mode 100644 index 0000000..e7cf895 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php @@ -0,0 +1,57 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('enum')) { + $source = $schema->_context->enum; + $re = new \ReflectionEnum($schema->_context->fullyQualifiedName($source)); + $schema->schema = !Generator::isDefault($schema->schema) ? $schema->schema : $re->getShortName(); + $type = 'string'; + $schemaType = 'string'; + if ($re->isBacked() && ($backingType = $re->getBackingType()) && method_exists($backingType, 'getName')) { + if (Generator::isDefault($schema->type)) { + $type = $backingType->getName(); + } else { + $type = $schema->type; + $schemaType = $schema->type; + } + } + $schema->enum = array_map(function ($case) use ($re, $schemaType, $type) { + if ($re->isBacked() && $type === $schemaType) { + return $case->getBackingValue(); + } + + return $case->name; + }, $re->getCases()); + Util::mapNativeType($schema, $type); + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php new file mode 100644 index 0000000..0c78f8d --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php @@ -0,0 +1,57 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $className = $schema->_context->fullyQualifiedName($schema->_context->class); + $interfaces = $analysis->getInterfacesOfClass($className, true); + + if (class_exists($className) && ($parent = get_parent_class($className)) && ($inherited = array_keys(class_implements($parent)))) { + // strip interfaces we inherit from ancestor + foreach (array_keys($interfaces) as $interface) { + if (in_array(ltrim($interface, '\\'), $inherited)) { + unset($interfaces[$interface]); + } + } + } + + $existing = []; + foreach ($interfaces as $interface) { + $interfaceName = $interface['context']->fullyQualifiedName($interface['interface']); + $interfaceSchema = $analysis->getSchemaForSource($interfaceName); + if ($interfaceSchema) { + $refPath = !Generator::isDefault($interfaceSchema->schema) ? $interfaceSchema->schema : $interface['interface']; + $this->inheritFrom($analysis, $schema, $interfaceSchema, $refPath, $interface['context']); + } else { + $this->mergeAnnotations($schema, $interface, $existing); + $this->mergeMethods($schema, $interface, $existing); + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php new file mode 100644 index 0000000..952ef0b --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php @@ -0,0 +1,49 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class') || $schema->_context->is('trait')) { + $source = $schema->_context->class ?: $schema->_context->trait; + $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($source), true); + $existing = []; + foreach ($traits as $trait) { + $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); + if ($traitSchema) { + $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; + $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); + } else { + if ($schema->_context->is('class')) { + $this->mergeAnnotations($schema, $trait, $existing); + $this->mergeMethods($schema, $trait, $existing); + $this->mergeProperties($schema, $trait, $existing); + } + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php new file mode 100644 index 0000000..e84e9bf --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php @@ -0,0 +1,34 @@ +openapi->components; + if (Generator::isDefault($components)) { + $components = new Components(['_context' => new Context(['generated' => true], $analysis->context)]); + } + + foreach ($analysis->annotations as $annotation) { + if (Components::matchNested(get_class($annotation)) && $annotation->_context->is('nested') === false) { + // A top level annotation. + $components->merge([$annotation], true); + $analysis->openapi->components = $components; + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php new file mode 100644 index 0000000..a0d2279 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php @@ -0,0 +1,56 @@ +openapi) { + $context = new Context([], $analysis->context); + $analysis->addAnnotation(new OpenApi(['_context' => $context]), $context); + } + $openapi = $analysis->openapi; + $openapi->_analysis = $analysis; + + // Merge annotations into the target openapi + $merge = []; + /** @var AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if ($annotation === $openapi) { + continue; + } + if ($annotation instanceof OpenApi) { + $paths = $annotation->paths; + unset($annotation->paths); + $openapi->mergeProperties($annotation); + if (!Generator::isDefault($paths)) { + foreach ($paths as $path) { + if (Generator::isDefault($openapi->paths)) { + $openapi->paths = []; + } + $openapi->paths[] = $path; + } + } + } elseif (OpenApi::matchNested(get_class($annotation)) && property_exists($annotation, '_context') && $annotation->_context->is('nested') === false) { + // A top level annotation. + $merge[] = $annotation; + } + } + $openapi->merge($merge, true); + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php new file mode 100644 index 0000000..bf87bae --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php @@ -0,0 +1,61 @@ +getAnnotationsOfType(JsonContent::class); + + foreach ($annotations as $jsonContent) { + $parent = $jsonContent->_context->nested; + if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { + if ($parent) { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/json'] = $mediaType = new MediaType([ + 'schema' => $jsonContent, + 'example' => $jsonContent->example, + 'examples' => $jsonContent->examples, + '_context' => new Context(['generated' => true], $jsonContent->_context), + '_aux' => true, + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof Parameter) { + $parent->content['application/json']->mediaType = 'application/json'; + } + $jsonContent->example = Generator::UNDEFINED; + $jsonContent->examples = Generator::UNDEFINED; + + $index = array_search($jsonContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php new file mode 100644 index 0000000..43eca14 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php @@ -0,0 +1,80 @@ + update all $ref that might reference a property merged. + */ +trait MergeTrait +{ + protected function inheritFrom(Analysis $analysis, Schema $schema, Schema $from, string $refPath, Context $context): void + { + if (Generator::isDefault($schema->allOf)) { + $schema->allOf = []; + } + // merging other properties into allOf is done in the AugmentSchemas processor + $schema->allOf[] = $refSchema = new Schema([ + 'ref' => Components::ref($refPath), + '_context' => $context, + '_aux' => true, + ]); + $analysis->addAnnotation($refSchema, $refSchema->_context); + } + + protected function mergeAnnotations(Schema $schema, array $from, array &$existing): void + { + if (is_iterable($from['context']->annotations)) { + foreach ($from['context']->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + + protected function mergeProperties(Schema $schema, array $from, array &$existing): void + { + foreach ($from['properties'] as $method) { + if (is_iterable($method->annotations)) { + foreach ($method->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } + + protected function mergeMethods(Schema $schema, array $from, array &$existing): void + { + foreach ($from['methods'] as $method) { + if (is_iterable($method->annotations)) { + foreach ($method->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php new file mode 100644 index 0000000..127b591 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php @@ -0,0 +1,61 @@ +getAnnotationsOfType(XmlContent::class); + + foreach ($annotations as $xmlContent) { + $parent = $xmlContent->_context->nested; + if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { + if ($parent) { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/xml'] = $mediaType = new MediaType([ + 'schema' => $xmlContent, + 'example' => $xmlContent->example, + 'examples' => $xmlContent->examples, + '_context' => new Context(['generated' => true], $xmlContent->_context), + '_aux' => true, + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof Parameter) { + $parent->content['application/xml']->mediaType = 'application/xml'; + } + $xmlContent->example = Generator::UNDEFINED; + $xmlContent->examples = Generator::UNDEFINED; + + $index = array_search($xmlContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php new file mode 100644 index 0000000..e2e6924 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php @@ -0,0 +1,72 @@ +hash = $hash; + } + + public function isHash(): bool + { + return $this->hash; + } + + public function setHash(bool $hash): OperationId + { + $this->hash = $hash; + + return $this; + } + + public function __invoke(Analysis $analysis) + { + $allOperations = $analysis->getAnnotationsOfType(Operation::class); + + /** @var Operation $operation */ + foreach ($allOperations as $operation) { + if (null === $operation->operationId) { + $operation->operationId = Generator::UNDEFINED; + } + + if (!Generator::isDefault($operation->operationId)) { + continue; + } + + $context = $operation->_context; + if ($context && $context->method) { + $source = $context->class ?? $context->interface ?? $context->trait; + $operationId = null; + if ($source) { + if ($context->namespace) { + $operationId = $context->namespace . '\\' . $source . '::' . $context->method; + } else { + $operationId = $source . '::' . $context->method; + } + } else { + $operationId = $context->method; + } + $operationId = strtoupper($operation->method) . '::' . $operation->path . '::' . $operationId; + $operation->operationId = $this->hash ? md5($operationId) : $operationId; + } + } + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php b/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php new file mode 100644 index 0000000..003ad62 --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php @@ -0,0 +1,205 @@ +isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not defined in OpenApi PHP Annotations'); + } + + return $this->doDeserialize(json_decode($jsonString), $className, new Context(['generated' => true])); + } + + /** + * Deserialize a file. + */ + public function deserializeFile(string $filename, string $format = 'json', string $className = OA\OpenApi::class): OA\AbstractAnnotation + { + if (!$this->isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not a valid OpenApi PHP Annotations'); + } + + $contents = file_get_contents($filename); + + $ext = pathinfo($filename, PATHINFO_EXTENSION); + if ('yaml' == $format || in_array($ext, ['yml', 'yaml'])) { + $contents = json_encode(Yaml::parse($contents)); + } + + return $this->doDeserialize(json_decode($contents), $className, new Context(['generated' => true])); + } + + /** + * Do deserialization. + */ + protected function doDeserialize(\stdClass $c, string $class, Context $context): OA\AbstractAnnotation + { + $annotation = new $class(['_context' => $context]); + foreach ((array) $c as $property => $value) { + if ($property === '$ref') { + $property = 'ref'; + } + + if (substr($property, 0, 2) === 'x-') { + if (Generator::isDefault($annotation->x)) { + $annotation->x = []; + } + $custom = substr($property, 2); + $annotation->x[$custom] = $value; + } else { + $annotation->$property = $this->doDeserializeProperty($annotation, $property, $value, $context); + } + } + + if ($annotation instanceof OA\OpenApi) { + $context->root()->version = $annotation->openapi; + } + + return $annotation; + } + + /** + * Deserialize the annotation's property. + */ + protected function doDeserializeProperty(OA\AbstractAnnotation $annotation, string $property, $value, Context $context) + { + // property is primitive type + if (array_key_exists($property, $annotation::$_types)) { + return $this->doDeserializeBaseProperty($annotation::$_types[$property], $value, $context); + } + + // property is embedded annotation + // note: this does not support custom nested annotation classes + foreach ($annotation::$_nested as $nestedClass => $declaration) { + // property is an annotation + if (is_string($declaration) && $declaration === $property) { + if (is_object($value)) { + return $this->doDeserialize($value, $nestedClass, $context); + } else { + return $value; + } + } + + // property is an annotation array + if (is_array($declaration) && count($declaration) === 1 && $declaration[0] === $property) { + $annotationArr = []; + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $nestedClass, $context); + } + + return $annotationArr; + } + + // property is an annotation hash map + if (is_array($declaration) && count($declaration) === 2 && $declaration[0] === $property) { + $key = $declaration[1]; + $annotationHash = []; + foreach ($value as $k => $v) { + $annotation = $this->doDeserialize($v, $nestedClass, $context); + $annotation->$key = $k; + $annotationHash[$k] = $annotation; + } + + return $annotationHash; + } + } + + return $value; + } + + /** + * Deserialize base annotation property. + * + * @param array|string $type The property type + * @param mixed $value The value to deserialization + * + * @return array|OA\AbstractAnnotation + */ + protected function doDeserializeBaseProperty($type, $value, Context $context) + { + $isAnnotationClass = is_string($type) && is_subclass_of(trim($type, '[]'), OA\AbstractAnnotation::class); + + if ($isAnnotationClass) { + $isArray = strpos($type, '[') === 0 && substr($type, -1) === ']'; + + if ($isArray) { + $annotationArr = []; + $class = trim($type, '[]'); + + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $class, $context); + } + + return $annotationArr; + } + + return $this->doDeserialize($value, $type, $context); + } + + return $value; + } +} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Util.php b/vendor/passkit/vendor/zircote/swagger-php/src/Util.php new file mode 100644 index 0000000..085abac --- /dev/null +++ b/vendor/passkit/vendor/zircote/swagger-php/src/Util.php @@ -0,0 +1,197 @@ + 'array', + 'byte' => ['string', 'byte'], + 'boolean' => 'boolean', + 'bool' => 'boolean', + 'int' => 'integer', + 'integer' => 'integer', + 'long' => ['integer', 'long'], + 'float' => ['number', 'float'], + 'double' => ['number', 'double'], + 'string' => 'string', + 'date' => ['string', 'date'], + 'datetime' => ['string', 'date-time'], + '\\datetime' => ['string', 'date-time'], + 'datetimeimmutable' => ['string', 'date-time'], + '\\datetimeimmutable' => ['string', 'date-time'], + 'datetimeinterface' => ['string', 'date-time'], + '\\datetimeinterface' => ['string', 'date-time'], + 'number' => 'number', + 'object' => 'object', + ]; + + public static function mapNativeType(Schema $schema, string $type): bool + { + if (!array_key_exists($type, self::$NATIVE_TYPE_MAP)) { + return false; + } + + $type = self::$NATIVE_TYPE_MAP[$type]; + if (is_array($type)) { + if (Generator::isDefault($schema->format)) { + $schema->format = $type[1]; + } + $type = $type[0]; + } + + $schema->type = $type; + + return true; + } + + /** + * Turns the given $fullPath into a relative path based on $basePaths, which can either + * be a single string path, or a list of possible paths. If a list is given, the first + * matching basePath in the list will be used to compute the relative path. If no + * relative path could be computed, the original string will be returned because there + * is always a chance it was a valid relative path to begin with. + * + * It should be noted that these are "relative paths" primarily in Finder's sense of them, + * and conform specifically to what is expected by functions like `exclude()` and `notPath()`. + * In particular, leading and trailing slashes are removed. + * + * @param array|string $basePaths + */ + public static function getRelativePath(string $fullPath, $basePaths): string + { + $relativePath = null; + if (is_string($basePaths)) { // just a single path, not an array of possible paths + $relativePath = self::removePrefix($fullPath, $basePaths); + } else { // an array of paths + foreach ($basePaths as $basePath) { + $relativePath = self::removePrefix($fullPath, $basePath); + if (!empty($relativePath)) { + break; + } + } + } + + return !empty($relativePath) ? trim($relativePath, '/') : $fullPath; + } + + /** + * Removes a prefix from the start of a string if it exists, or null otherwise. + */ + private static function removePrefix(string $str, string $prefix): ?string + { + if (substr($str, 0, strlen($prefix)) == $prefix) { + return substr($str, strlen($prefix)); + } + + return null; + } + + /** + * Build a Symfony Finder object that scans the given $directory. + * + * @param array|Finder|string $directory The directory(s) or filename(s) + * @param null|array|string $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) + * @param null|string $pattern The pattern of the files to scan + * + * @throws InvalidArgumentException + */ + public static function finder($directory, $exclude = null, $pattern = null): Finder + { + if ($directory instanceof Finder) { + // Make sure that the provided Finder only finds files and follows symbolic links. + return $directory->files()->followLinks(); + } else { + $finder = new Finder(); + $finder->sortByName(); + } + if ($pattern === null) { + $pattern = '*.php'; + } + + $finder->files()->followLinks()->name($pattern); + if (is_string($directory)) { + if (is_file($directory)) { // Scan a single file? + $finder->append([$directory]); + } else { // Scan a directory + $finder->in($directory); + } + } elseif (is_array($directory)) { + foreach ($directory as $path) { + if (is_file($path)) { // Scan a file? + $finder->append([$path]); + } else { + $finder->in($path); + } + } + } else { + throw new InvalidArgumentException('Unexpected $directory value:' . gettype($directory)); + } + if ($exclude !== null) { + if (is_string($exclude)) { + $finder->notPath(Util::getRelativePath($exclude, $directory)); + } elseif (is_array($exclude)) { + foreach ($exclude as $path) { + $finder->notPath(Util::getRelativePath($path, $directory)); + } + } else { + throw new InvalidArgumentException('Unexpected $exclude value:' . gettype($exclude)); + } + } + + return $finder; + } + + /** + * Escapes the special characters "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refEncode(string $raw): string + { + return str_replace('/', '~1', str_replace('~', '~0', $raw)); + } + + /** + * Converted the escaped characters "~1" and "~" back to "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refDecode(string $encoded): string + { + return str_replace('~1', '/', str_replace('~0', '~', $encoded)); + } + + /** + * Shorten class name(s). + * + * @param array|object|string $classes Class(es) to shorten + * + * @return string|string[] One or more shortened class names + */ + public static function shorten($classes) + { + $short = []; + foreach ((array) $classes as $class) { + $short[] = '@' . str_replace([ + 'OpenApi\\Annotations\\', + 'OpenApi\\Attributes\\', + ], 'OA\\', $class); + } + + return is_array($classes) ? $short : array_pop($short); + } +} diff --git a/vendor/protobuf-php/protobuf/.gitignore b/vendor/protobuf-php/protobuf/.gitignore new file mode 100644 index 0000000..ae08f1e --- /dev/null +++ b/vendor/protobuf-php/protobuf/.gitignore @@ -0,0 +1,34 @@ +# Created by .gitignore support plugin (hsz.mobi) +## JetBrains IDE project directory +.idea/ +nbproject + +## build +build +generated +docs/build +phpunit.xml + +## File-based project format +*.ipr +*.iws + +## Additional for IntelliJ +out/ + +# generated by mpeltonen/sbt-idea plugin +.idea_modules/ + +# generated by JIRA plugin +atlassian-ide-plugin.xml + +# generated by Crashlytics plugin (for Android Studio and Intellij) +com_crashlytics_export_strings.xml + +# ignore composer vendor directory and lock file +vendor +composer.phar +composer.lock + +# ignore mac files +.DS_Store diff --git a/vendor/protobuf-php/protobuf/.travis.yml b/vendor/protobuf-php/protobuf/.travis.yml new file mode 100644 index 0000000..6ee1622 --- /dev/null +++ b/vendor/protobuf-php/protobuf/.travis.yml @@ -0,0 +1,37 @@ +sudo: false + +language: php + +cache: + directories: + - $HOME/.composer/cache + - $HOME/protobuf + +php: + - 5.5 + - 5.6 + - 7.0 + - hhvm + - nightly + +env: + - PROTOBUF_VERSION=2.6.1 + - PROTOBUF_VERSION=3.0.0 + +before_install: + - bash ./tests/travis/install-protobuf.sh + +install: + - composer self-update + - composer --prefer-source install + - export PATH=$PATH:$HOME/protobuf/$PROTOBUF_VERSION/bin/ + +script: + - make phpcs proto-generate phpunit-coverage-clover + +after_script: + - ./vendor/bin/coveralls -v + +matrix: + allow_failures: + - php: nightly diff --git a/vendor/protobuf-php/protobuf/LICENSE b/vendor/protobuf-php/protobuf/LICENSE new file mode 100644 index 0000000..31b027f --- /dev/null +++ b/vendor/protobuf-php/protobuf/LICENSE @@ -0,0 +1,19 @@ +The MIT License + +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/vendor/protobuf-php/protobuf/Makefile b/vendor/protobuf-php/protobuf/Makefile new file mode 100644 index 0000000..0534dac --- /dev/null +++ b/vendor/protobuf-php/protobuf/Makefile @@ -0,0 +1,56 @@ +# vim: ts=4:sw=4:noexpandtab!: + +BASEDIR := $(shell pwd) +COMPOSER := $(shell which composer) + +help: + @echo "---------------------------------------------" + @echo "List of available targets:" + @echo " composer-install - Installs composer dependencies." + @echo " proto-generate - Generate PHP classes from proto files." + @echo " phpcs - Runs PHP Code Sniffer." + @echo " phpunit - Runs tests." + @echo " phpunit-coverage-clover - Runs tests to genereate coverage clover." + @echo " phpunit-coverage-html - Runs tests to genereate coverage html." + @echo " help - Shows this dialog." + @exit 0 + +all: install phpunit + +install: composer-install proto-generate + +test: phpcs phpunit + +composer-install: +ifdef COMPOSER + php $(COMPOSER) install --prefer-source --no-interaction; +else + @echo "Composer not found !!" + @echo + @echo "curl -sS https://getcomposer.org/installer | php" + @echo "mv composer.phar /usr/local/bin/composer" +endif + +proto-clean: + rm -rf $(BASEDIR)/tests/Protos/*; + +proto-generate: proto-clean + php $(BASEDIR)/vendor/bin/protobuf --include-descriptors \ + --psr4 ProtobufTest\\Protos \ + -o $(BASEDIR)/tests/Protos \ + -i $(BASEDIR)/tests/Resources \ + $(BASEDIR)/tests/Resources/*.proto + +phpunit: proto-generate + php $(BASEDIR)/vendor/bin/phpunit -v; + +phpunit-coverage-clover: + php $(BASEDIR)/vendor/bin/phpunit -v --coverage-clover ./build/logs/clover.xml; + +phpunit-coverage-html: + php $(BASEDIR)/vendor/bin/phpunit -v --coverage-html ./build/coverage; + +phpcs: + php $(BASEDIR)/vendor/bin/phpcs -p --extensions=php --standard=ruleset.xml src; + +.PHONY: composer-install phpunit phpcs help \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/README.md b/vendor/protobuf-php/protobuf/README.md new file mode 100644 index 0000000..5f27416 --- /dev/null +++ b/vendor/protobuf-php/protobuf/README.md @@ -0,0 +1,404 @@ +Protobuf for PHP +================ + +[![Build Status](https://travis-ci.org/protobuf-php/protobuf.svg?branch=master)](https://travis-ci.org/protobuf-php/protobuf) +[![Coverage Status](https://coveralls.io/repos/protobuf-php/protobuf/badge.svg?branch=master&service=github)](https://coveralls.io/github/protobuf-php/protobuf?branch=master) +[![Total Downloads](https://poser.pugx.org/protobuf-php/protobuf/downloads)](https://packagist.org/packages/protobuf-php/protobuf) +[![License](https://poser.pugx.org/protobuf-php/protobuf/license)](https://packagist.org/packages/protobuf-php/protobuf) + +Protobuf for PHP is an implementation of Google's Protocol Buffers for the PHP +language, supporting its binary data serialization and including a `protoc` +plugin to generate PHP classes from .proto files. + + +## Installation + +Run the following `composer` commands: + +```console +$ composer require "protobuf-php/protobuf" +``` + + +## Overview + +This tutorial provides a basic introduction to working with protocol buffers. +By walking through creating a simple example application, it shows you how to + +* Define message formats in a ```.proto``` file. +* Use the protocol buffer compiler. +* Use the PHP protocol buffer API to write and read messages. + + +#### Why Use Protocol Buffers? + +The example we're going to use is a very simple "address book" application that can read and write people's contact details to and from a file. Each person in the address book has a name, an ID, an email address, and a contact phone number. + +How do you serialize and retrieve structured data like this? +There are a few ways to solve this problem: + +* Use PHP Serialization. This is the default approach since it's built into the language, but it is not very space efficient, and also doesn't work very well if you need to share data with applications written in other languages (Nodejs,Java,Python, etc..). + +* You can invent an ad-hoc way to encode the data items into a single string – such as encoding 4 ints as "12:3:-23:67". This is a simple and flexible approach, although it does require writing one-off encoding and parsing code, and the parsing imposes a small run-time cost. This works best for encoding very simple data. + +* Serialize the data to XML. This approach can be very attractive since XML is (sort of) human readable and there are binding libraries for lots of languages. This can be a good choice if you want to share data with other applications/projects. However, XML is notoriously space intensive, and encoding/decoding it can impose a huge performance penalty on applications. Also, navigating an XML DOM tree is considerably more complicated than navigating simple fields in a class normally would be. + + +Protocol buffers are the flexible, efficient, automated solution to solve exactly this problem. With protocol buffers, you write a ```.proto``` description of the data structure you wish to store. From that, the protocol buffer compiler creates a class that implements automatic encoding and parsing of the protocol buffer data with an efficient binary format. The generated class provides getters and setters for the fields that make up a protocol buffer and takes care of the details of reading and writing the protocol buffer as a unit. Importantly, the protocol buffer format supports the idea of extending the format over time in such a way that the code can still read data encoded with the old format. + + +#### Defining Your Protocol Format + +To create your address book application, you'll need to start with a ```.proto``` file. The definitions in a ```.proto``` file are simple: you add a message for each data structure you want to serialize, then specify a name and a type for each field in the message. Here is the ```.proto``` file that defines your messages, ```addressbook.proto```. + +```proto +package tutorial; +import "php.proto"; +option (php.package) = "Tutorial.AddressBookProtos"; + +message Person { + required string name = 1; + required int32 id = 2; + optional string email = 3; + + enum PhoneType { + MOBILE = 0; + HOME = 1; + WORK = 2; + } + + message PhoneNumber { + required string number = 1; + optional PhoneType type = 2 [default = HOME]; + } + + repeated PhoneNumber phone = 4; +} + +message AddressBook { + repeated Person person = 1; +} +``` + +As you can see, the syntax is similar to C++ or Java. Let's go through each part of the file and see what it does. +The ```.proto``` file starts with a package declaration, which helps to prevent naming conflicts between different projects. +In PHP, the package name is used as the PHP namespace unless you have explicitly specified a ```(php.package)```, as we have here. +Even if you do provide a ```(php.package)```, you should still define a normal package as well to avoid name collisions in the Protocol Buffers name space as well as in non PHP languages. + + +After the package declaration, you can see two options that are PHP-specific: ```import "php.proto";``` and ```(php.package)```. +* ```import "php.proto"``` add supports a few PHP specific options for proto files. +* ```(php.package)``` specifies in what php namespace name your generated classes should live. +If you don't specify this explicitly, it simply matches the package name given by the package declaration, but these names usually aren't appropriate PHP namespace names. + + +Next, you have your message definitions. A message is just an aggregate containing a set of typed fields. Many standard simple data types are available as field types, including ```bool```, ```int32```, ```float```, ```double```, and ```string```. You can also add further structure to your messages by using other message types as field types – in the above example the ```Person``` message contains ```PhoneNumber``` messages, while the ```AddressBook``` message contains ```Person``` messages. You can even define message types nested inside other messages – as you can see, the ```PhoneNumber``` type is defined inside ```Person```. You can also define ```enum``` types if you want one of your fields to have one of a predefined list of values – here you want to specify that a phone number can be one of ```MOBILE```, ```HOME```, or ```WORK```. + + +The ```" = 1"```, ```" = 2"``` markers on each element identify the unique ```tag``` that field uses in the binary encoding. Tag numbers 1-15 require one less byte to encode than higher numbers, so as an optimization you can decide to use those tags for the commonly used or repeated elements, leaving tags 16 and higher for less-commonly used optional elements. Each element in a repeated field requires re-encoding the tag number, so repeated fields are particularly good candidates for this optimization. + + +Each field must be annotated with one of the following modifiers: + +* **required**: a value for the field must be provided, otherwise the message will be considered "uninitialized". Trying to build an uninitialized message will throw a RuntimeException. Parsing an uninitialized message will throw an IOException. Other than this, a required field behaves exactly like an optional field. +* **optional**: the field may or may not be set. If an optional field value isn't set, a default value is used. For simple types, you can specify your own default value, as we've done for the phone number type in the example. Otherwise, a system default is used: zero for numeric types, the empty string for strings, false for bools. For embedded messages, the default value is always the "default instance" or "prototype" of the message, which has none of its fields set. Calling the accessor to get the value of an optional (or required) field which has not been explicitly set always returns that field's default value. +* **repeated**: the field may be repeated any number of times (including zero). The order of the repeated values will be preserved in the protocol buffer. Think of repeated fields as dynamically sized arrays. + +You'll find a complete guide to writing .proto files – including all the possible field types – in the [Protocol Buffer Language Guide](https://developers.google.com/protocol-buffers/docs/proto). Don't go looking for facilities similar to class inheritance, though – protocol buffers don't do that. + + +#### Compiling Your Protocol Buffers + +Now that you have a ```.proto```, the next thing you need to do is generate the classes you'll need to read and write ```AddressBook``` (and hence ```Person``` and ```PhoneNumber```) messages. To do this, you need to run the protocol buffer plugin on your .proto: + +If you haven't installed the compiler (```protoc```) or you dont have the php plugin, see https://github.com/protobuf-php/protobuf-plugin. + +Now run the compiler plugin, specifying the proto files source directory (the file directory is used if you don't provide a value), the destination directory (where you want the generated code to go), and the path to your ```.proto``` In this case: + +```console +php ./vendor/bin/protobuf --include-descriptors -i . -o ./src/ ./addressbook.proto +``` + +This generates the following PHP classes in your specified destination directory + +```console +src/ +└── Tutorial + └── AddressBookProtos + ├── AddressBook.php + ├── Person + │   ├── PhoneNumber.php + │   └── PhoneType.php + └── Person.php +``` + +#### The Protocol Buffer API + +Let's look at some of the generated code and see what classes and methods the compiler has created for you. If you look in ```src/Tutorial/AddressBookProtos/Person.php``` you can see that it defines a class called ```Person```. + +Messages have auto-generated accessor methods for each field of the message. +Here are some of the accessors for the Person class (implementations omitted for brevity): + +```php + */ +public function getPhoneList(); +/** @param \Protobuf\Collection<\ProtobufTest\Protos\Person\PhoneNumber> $value */ +public function setPhoneList(\Protobuf\Collection $value); +#################################################################################### +?> +``` + +As you can see, there are simple getters and setters for each field. +There are also has getters for each singular field which return true if that field has been set. +Repeated fields have a extra method, an add method which appends a new element to the list. + +Notice how these accessor methods use camel-case naming, even though the ```.proto``` file uses lowercase-with-underscores. +This transformation is done automatically by the protocol buffer compiler so that the generated classes match standard PHP style conventions. +You should always use lowercase-with-underscores for field names in your ```.proto``` files; this ensures good naming practice in all the generated languages. See the style guide for more on good ```.proto``` style. + + +Protocol Buffers types map to the following PHP types: + +| Protocol Buffers | PHP | +| ---------------- | ------------------ | +| double | float | +| float | float | +| int32 | int | +| int64 | int | +| uint32 | int | +| uint64 | int | +| sint32 | int | +| sint64 | int | +| fixed32 | int | +| fixed64 | int | +| sfixed32 | int | +| sfixed64 | int | +| bool | bool | +| string | string | +| bytes | \\Protobuf\\Stream | + + +#### Enums and Nested Classes + +The generated code includes a ```PhoneType``` [enum](https://github.com/protobuf-php/protobuf/blob/master/src/Enum.php): + +```php + +``` + +All nested types are generated using the parent class ```Person``` as part of its namespace. + +```php +setId(1); +$person->setName('Fabio B. Silva'); +$person->setEmail('fabio.bat.silva@gmail.com'); + +$phone->setType($type); +$phone->setNumber('1231231212'); +?> +``` + +#### Known issues + +- Protobuf stores floating point values using the [IEEE 754](http://en.wikipedia.org/wiki/IEEE_754) standard + with 64bit words for the `double` and 32bit for the `float` types. PHP supports IEEE 754 natively although + the precission is platform dependant, however it typically supports 64bit doubles. It means that + if your PHP was compiled with 64bit sized doubles (or greater) you shouldn't have any problem encoding + and decoded float and double typed values. + +- Integer values are also [platform dependant in PHP](http://www.php.net/manual/en/language.types.integer.php). + The library has been developed and tested against PHP binaries compiled with 64bit integers. The encoding and + decoding algorithm should in theory work no matter if PHP uses 32bit or 64bit integers internally, just take + into account that with 32bit integers the numbers cannot exceed in any case the `PHP_INT_MAX` value (2147483647). + + While Protobuf supports unsigned integers PHP does not. In fact, numbers above the compiled PHP maximum + integer (`PHP_INT_MAX`, 0x7FFFFFFFFFFFFFFF for 64bits) will be automatically casted to doubles, which + typically will offer 53bits of decimal precission, allowing to safely work with numbers upto + 0x20000000000000 (2^53), even if they are represented in PHP as floats instead of integers. Higher numbers + will loose precission or might even return an _infinity_ value, note that the library does not include + any checking for these numbers and using them might provoke unexpected behaviour. + + Negative values when encoded as `int32`, `int64` or `fixed64` types require the big integer extensions + [GMP](http://www.php.net/gmp) or [BC Math](http://www.php.net/bc) to be available in your PHP environment. + The reason is that when encoding these negative numbers without using _zigzag_ the binary representation uses the most significant bit for the sign, thus the numbers become + above the maximum supported values in PHP. The library will check for these conditions and will automatically + try to use GMP or BC to process the value. + + +#### Parsing and Serialization + +Each protocol buffer class has methods for writing and reading messages of your chosen type using the protocol buffer binary format. These include : + + +```php + +``` + + +#### Writing A Message + +Now let's try using your protocol buffer classes. The first thing you want your address book application to be able to do is write personal details to your address book file. To do this, you need to create and populate instances of your protocol buffer classes and then write them to an output stream. + +Here is a program which reads an ```AddressBook``` from a file, adds one new ```Person``` to it based on user input, and writes the new ```AddressBook``` back out to the file again. The parts which directly call or reference code generated by the protocol compiler are highlighted. + + +```php +#!/usr/bin/env php +setId($id); +$person->setName($name); + +if ( ! empty($email)) { + $person->setEmail($email); +} + +while (true) { + $number = trim(readline("Enter a phone number (or leave blank to finish):")); + + if (empty($number)) { + break; + } + + $phone = new Person\PhoneNumber(); + $type = trim(readline("Is this a mobile, home, or work phone? ")); + + switch (strtolower($type)) { + case 'mobile': + $phone->setType(Person\PhoneType::MOBILE()); + break; + case 'work': + $phone->setType(Person\PhoneType::WORK()); + break; + case 'home': + $phone->setType(Person\PhoneType::HOME()); + break; + default: + echo "Unknown phone type. Using default." . PHP_EOL; + } + + $phone->setNumber($number); + $person->addPhone($phone); +} + +// Add a person. +$addressBook->addPerson($person); + +// Print current address book +echo $addressBook; + +// Write the new address book back to disk. +file_put_contents($argv[1], $addressBook->toStream()); +?> +``` + +This tutorial documentation its based on the [Protocol Buffer Basics Tutorial](https://developers.google.com/protocol-buffers/docs/javatutorial). diff --git a/vendor/protobuf-php/protobuf/composer.json b/vendor/protobuf-php/protobuf/composer.json new file mode 100644 index 0000000..5e67601 --- /dev/null +++ b/vendor/protobuf-php/protobuf/composer.json @@ -0,0 +1,50 @@ +{ + "name" : "protobuf-php/protobuf", + "description" : "PHP implementation of Google's Protocol Buffers", + "keywords" : ["protobuf", "protocol buffer", "serializing"], + "homepage" : "https://github.com/protobuf-php/protobuf", + "type" : "library", + "license" : "MIT", + "prefer-stable" : true, + "authors" : [ + { + "name" : "Fabio B. Silva", + "email" : "fabio.bat.silva@gmail.com", + "homepage": "https://github.com/FabioBatSilva" + }, + { + "name": "Iván -DrSlump- Montes", + "email": "drslump@pollinimini.net", + "homepage": "https://github.com/drslump" + } + ], + "require" : { + "ext-mbstring" : "*", + "php" : ">=5.5.0" + }, + "require-dev": { + "protobuf-php/protobuf-plugin" : ">=0.1", + "phpunit/phpunit" : "^4", + "instaclick/coding-standard" : "^1.1", + "squizlabs/php_codesniffer" : "^1.5", + "satooshi/php-coveralls" : "^0.6", + "php-mock/php-mock-phpunit" : "^0.2", + "instaclick/object-calisthenics-sniffs" : "dev-master", + "instaclick/symfony2-coding-standard" : "dev-remaster" + }, + "autoload" : { + "psr-4": { + "Protobuf\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "ProtobufTest\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "0.1.x-dev" + } + } +} diff --git a/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php b/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php new file mode 100755 index 0000000..c2a5c5d --- /dev/null +++ b/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php @@ -0,0 +1,78 @@ +#!/usr/bin/env php +add('Tutorial\AddressBookProtos', __DIR__ . '/src'); + +use Tutorial\AddressBookProtos\Person; +use Tutorial\AddressBookProtos\AddressBook; + +if ( ! class_exists('\Tutorial\AddressBookProtos\Person')) { + + fwrite(STDERR, + 'You need to generate the php classes using the following command:' . PHP_EOL . + './vendor/bin/protobuf --include-descriptors -i ./examples/ -o ./examples/src/ ./examples/addressbook.proto' . PHP_EOL + ); + + exit(1); +} + +if ( ! isset($argv[1])) { + echo "Usage: ./examples/addressbook-add-person.php ADDRESS_BOOK_FILE" . PHP_EOL; + exit(1); +} + +// Read the existing address book or create a new one. +$addressBook = is_file($argv[1]) + ? new AddressBook(file_get_contents($argv[1])) + : new AddressBook(); + +$person = new Person(); +$id = intval(readline("Enter person ID: ")); +$name = trim(readline("Enter person name: ")); +$email = trim(readline("Enter email address (blank for none): ")); + +$person->setId($id); +$person->setName($name); + +if ( ! empty($email)) { + $person->setEmail($email); +} + +while (true) { + $number = trim(readline("Enter a phone number (or leave blank to finish):")); + + if (empty($number)) { + break; + } + + $phone = new Person\PhoneNumber(); + $type = trim(readline("Is this a mobile, home, or work phone? ")); + + switch (strtolower($type)) { + case 'mobile': + $phone->setType(Person\PhoneType::MOBILE()); + break; + case 'work': + $phone->setType(Person\PhoneType::WORK()); + break; + case 'home': + $phone->setType(Person\PhoneType::HOME()); + break; + default: + echo "Unknown phone type. Using default." . PHP_EOL; + } + + $phone->setNumber($number); + $person->addPhone($phone); +} + +// Add a person. +$addressBook->addPerson($person); + +// Print current address book +echo $addressBook; + +// Write the new address book back to disk. +file_put_contents($argv[1], $addressBook->toStream()); \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/examples/addressbook.proto b/vendor/protobuf-php/protobuf/examples/addressbook.proto new file mode 100644 index 0000000..8043976 --- /dev/null +++ b/vendor/protobuf-php/protobuf/examples/addressbook.proto @@ -0,0 +1,28 @@ +syntax = "proto2"; + +package tutorial; +import "php.proto"; +option (php.package) = "Tutorial.AddressBookProtos"; + +message Person { + required string name = 1; + required int32 id = 2; + optional string email = 3; + + enum PhoneType { + MOBILE = 0; + HOME = 1; + WORK = 2; + } + + message PhoneNumber { + required string number = 1; + optional PhoneType type = 2 [default = HOME]; + } + + repeated PhoneNumber phone = 4; +} + +message AddressBook { + repeated Person person = 1; +} diff --git a/vendor/protobuf-php/protobuf/examples/src/.gitignore b/vendor/protobuf-php/protobuf/examples/src/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/vendor/protobuf-php/protobuf/examples/src/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/phpunit.xml.dist b/vendor/protobuf-php/protobuf/phpunit.xml.dist new file mode 100644 index 0000000..45dfeab --- /dev/null +++ b/vendor/protobuf-php/protobuf/phpunit.xml.dist @@ -0,0 +1,35 @@ + + + + + + ./tests + ./tests/Resources/* + + + + + + benchmark + deprecated + + + + + + ./vendor/* + + + ./src + + + diff --git a/vendor/protobuf-php/protobuf/ruleset.xml b/vendor/protobuf-php/protobuf/ruleset.xml new file mode 100644 index 0000000..2bbb115 --- /dev/null +++ b/vendor/protobuf-php/protobuf/ruleset.xml @@ -0,0 +1,14 @@ + + + Coding Standard + + */Resources/* + + + + + + + 0 + + diff --git a/vendor/protobuf-php/protobuf/src/AbstractMessage.php b/vendor/protobuf-php/protobuf/src/AbstractMessage.php new file mode 100644 index 0000000..d87bd32 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/AbstractMessage.php @@ -0,0 +1,50 @@ + + */ +abstract class AbstractMessage implements Message +{ + /** + * Message constructor + * + * @param \Protobuf\Stream|resource|string $stream + * @param \Protobuf\Configuration $configuration + */ + public function __construct($stream = null, \Protobuf\Configuration $configuration = null) + { + if ($stream === null) { + return; + } + + $config = $configuration ?: \Protobuf\Configuration::getInstance(); + $context = $config->createReadContext($stream); + + $this->readFrom($context); + } + + /** + * {@inheritdoc} + */ + public function __toString() + { + $format = new TextFormat(); + $stream = $format->encodeMessage($this); + + return $stream->__toString(); + } + + /** + * {@inheritdoc} + */ + public static function __set_state(array $values) + { + return static::fromArray($values); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php new file mode 100644 index 0000000..946e435 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php @@ -0,0 +1,67 @@ + + * @author Fabio B. Silva + */ +class BcNegativeEncoder implements NegativeEncoder +{ + /** + * {@inheritdoc} + */ + public function encodeVarint($varint) + { + $values = []; + $value = sprintf('%u', $varint); + + while (bccomp($value, 0, 0) > 0) { + // Get the last 7bits of the number + $bin = ''; + $dec = $value; + + do { + $rest = bcmod($dec, 2); + $dec = bcdiv($dec, 2, 0); + $bin = $rest . $bin; + } while ($dec > 0 && mb_strlen($bin, '8bit') < 7); + + // Pack as a decimal and apply the flag + $values[] = intval($bin, 2) | 0x80; + $value = bcdiv($value, 0x80, 0); + } + + return $values; + } + + /** + * {@inheritdoc} + */ + public function encodeSFixed64($sFixed64) + { + $value = sprintf('%u', $sFixed64); + $bytes = ''; + + for ($i = 0; $i < 8; ++$i) { + // Get the last 8bits of the number + $bin = ''; + $dec = $value; + + do { + $bin = bcmod($dec, 2).$bin; + $dec = bcdiv($dec, 2, 0); + } while (mb_strlen($bin, '8bit') < 8); + + // Pack the byte + $bytes .= chr(intval($bin, 2)); + $value = bcdiv($value, 0x100, 0); + } + + return $bytes; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php new file mode 100644 index 0000000..2b89709 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php @@ -0,0 +1,53 @@ + + * @author Fabio B. Silva + */ +class BigEndian +{ + /** + * @var bool + */ + protected static $is32Bit; + + /** + * @var integer + */ + protected static $isBigEndian; + + /** + * Check if the current architecture is Big Endian. + * + * @return bool + */ + public static function isBigEndian() + { + if (self::$isBigEndian !== null) { + return self::$isBigEndian; + } + + list(, $result) = unpack('L', pack('V', 1)); + self::$isBigEndian = $result !== 1; + + return self::$isBigEndian; + } + + /** + * @return bool + */ + public static function is32Bit() + { + if (self::$is32Bit !== null) { + self::$is32Bit; + } + + self::$is32Bit = (PHP_INT_SIZE < 8); + + return self::$is32Bit; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php new file mode 100644 index 0000000..6ae15de --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php @@ -0,0 +1,92 @@ + + * @author Fabio B. Silva + */ +class GmpNegativeEncoder implements NegativeEncoder +{ + /** + * @var \GMP + */ + protected $gmp_x00; + + /** + * @var \GMP + */ + protected $gmp_x7f; + + /** + * @var \GMP + */ + protected $gmp_x80; + + /** + * @var \GMP + */ + protected $gmp_xff; + + /** + * @var \GMP + */ + protected $gmp_x100; + + /** + * @var bool + */ + protected $is32Bit; + + /** + * Constructor + */ + public function __construct() + { + $this->gmp_x00 = gmp_init(0x00); + $this->gmp_x7f = gmp_init(0x7f); + $this->gmp_x80 = gmp_init(0x80); + $this->gmp_xff = gmp_init(0xff); + $this->gmp_x100 = gmp_init(0x100); + $this->is32Bit = BigEndian::is32Bit(); + } + + /** + * {@inheritdoc} + */ + public function encodeVarint($varint) + { + $bytes = []; + $value = $this->is32Bit + ? gmp_and($varint, '0x0ffffffffffffffff') + : sprintf('%u', $varint); + + while (gmp_cmp($value, $this->gmp_x00) > 0) { + $bytes[] = gmp_intval(gmp_and($value, $this->gmp_x7f)) | 0x80; + $value = gmp_div_q($value, $this->gmp_x80); + } + + return $bytes; + } + + /** + * {@inheritdoc} + */ + public function encodeSFixed64($sFixed64) + { + $value = $this->is32Bit + ? gmp_and($sFixed64, '0x0ffffffffffffffff') + : gmp_init(sprintf('%u', $sFixed64)); + + $bytes = ''; + + for ($i = 0; $i < 8; ++$i) { + $bytes .= chr(gmp_intval(gmp_and($value, $this->gmp_xff))); + $value = gmp_div_q($value, $this->gmp_x100); + } + + return $bytes; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php new file mode 100644 index 0000000..9263cc5 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php @@ -0,0 +1,29 @@ + + */ +class InvalidNegativeEncoder implements NegativeEncoder +{ + /** + * {@inheritdoc} + */ + public function encodeVarint($varint) + { + throw new RuntimeException("Negative integers are only supported with GMP or BC (64bit) intextensions."); + } + + /** + * {@inheritdoc} + */ + public function encodeSFixed64($sFixed64) + { + throw new RuntimeException("Negative integers are only supported with GMP or BC (64bit) intextensions."); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php new file mode 100644 index 0000000..ecc57d8 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php @@ -0,0 +1,29 @@ + + */ +interface NegativeEncoder +{ + /** + * Encode a negative varint. + * + * @param integer $value + * + * @return array + */ + public function encodeVarint($value); + + /** + * Encode an integer as a fixed of 64bits. + * + * @param integer $value + * + * @return string + */ + public function encodeSFixed64($value); +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php new file mode 100644 index 0000000..23a47e4 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php @@ -0,0 +1,58 @@ + + */ +class PlatformFactory +{ + /** + * @var \Protobuf\Binary\Platform\NegativeEncoder + */ + private $negativeEncoder; + + /** + * Return a NegativeEncoder. + * + * @return \Protobuf\Binary\Platform\NegativeEncoder + */ + public function getNegativeEncoder() + { + if ($this->negativeEncoder !== null) { + return $this->negativeEncoder; + } + + if ($this->isExtensionLoaded('gmp')) { + return $this->negativeEncoder = new GmpNegativeEncoder(); + } + + if ($this->isExtensionLoaded('bcmath') && ! $this->is32Bit()) { + return $this->negativeEncoder = new BcNegativeEncoder(); + } + + return $this->negativeEncoder = new InvalidNegativeEncoder(); + } + + /** + * @param string $name + * + * @return boolean + */ + public function isExtensionLoaded($name) + { + return extension_loaded($name); + } + + /** + * @return boolean + */ + public function is32Bit() + { + return BigEndian::is32Bit(); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php b/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php new file mode 100644 index 0000000..c3a3e12 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php @@ -0,0 +1,212 @@ + + */ +class SizeCalculator +{ + /** + * @var \Protobuf\Configuration + */ + protected $config; + + /** + * Constructor + * + * @param \Protobuf\Configuration $config + */ + public function __construct(Configuration $config) + { + $this->config = $config; + } + + /** + * Compute the number of bytes that would be needed to encode a varint. + * + * @param integer $value + * + * @return integer + */ + public function computeVarintSize($value) + { + if (($value & (0xffffffff << 7)) === 0) { + return 1; + } + + if (($value & (0xffffffff << 14)) === 0) { + return 2; + } + + if (($value & (0xffffffff << 21)) === 0) { + return 3; + } + + if (($value & (0xffffffff << 28)) === 0) { + return 4; + } + + if (($value & (0xffffffff << 35)) === 0) { + return 5; + } + + if (($value & (0xffffffff << 42)) === 0) { + return 6; + } + + if (($value & (0xffffffff << 49)) === 0) { + return 7; + } + + if (($value & (0xffffffff << 56)) === 0) { + return 8; + } + + if (($value & (0xffffffff << 63)) === 0) { + return 9; + } + + return 10; + } + + /** + * Compute the number of bytes that would be needed to encode a zigzag 32. + * + * @param integer $value + * + * @return integer + */ + public function computeZigzag32Size($value) + { + $varint = ($value << 1) ^ ($value >> 32 - 1); + $size = $this->computeVarintSize($varint); + + return $size; + } + + /** + * Compute the number of bytes that would be needed to encode a zigzag 64. + * + * @param integer $value + * + * @return integer + */ + public function computeZigzag64Size($value) + { + $varint = ($value << 1) ^ ($value >> 64 - 1); + $size = $this->computeVarintSize($varint); + + return $size; + } + + /** + * Compute the number of bytes that would be needed to encode a string. + * + * @param integer $value + * + * @return integer + */ + public function computeStringSize($value) + { + $length = mb_strlen($value, '8bit'); + $size = $length + $this->computeVarintSize($length); + + return $size; + } + + /** + * Compute the number of bytes that would be needed to encode a stream of bytes. + * + * @param \Protobuf\Stream $value + * + * @return integer + */ + public function computeByteStreamSize(Stream $value) + { + $length = $value->getSize(); + $size = $length + $this->computeVarintSize($length); + + return $size; + } + + /** + * Compute the number of bytes that would be needed to encode a sFixed32. + * + * @return integer + */ + public function computeSFixed32Size() + { + return 4; + } + + /** + * Compute the number of bytes that would be needed to encode a fixed32. + * + * @return integer + */ + public function computeFixed32Size() + { + return 4; + } + + /** + * Compute the number of bytes that would be needed to encode a sFixed64. + * + * @return integer + */ + public function computeSFixed64Size() + { + return 8; + } + + /** + * Compute the number of bytes that would be needed to encode a fixed64. + * + * + * @return integer + */ + public function computeFixed64Size() + { + return 8; + } + + /** + * Compute the number of bytes that would be needed to encode a float. + * + * @return integer + */ + public function computeFloatSize() + { + return 4; + } + + /** + * Compute the number of bytes that would be needed to encode a double. + * + * @return integer + */ + public function computeDoubleSize() + { + return 8; + } + + /** + * Compute the number of bytes that would be needed to encode a bool. + * + * @return integer + */ + public function computeBoolSize() + { + return 1; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php b/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php new file mode 100644 index 0000000..fb2d998 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php @@ -0,0 +1,329 @@ + + * @author Fabio B. Silva + */ +class StreamReader +{ + /** + * @var \Protobuf\Configuration + */ + protected $config; + + /** + * @var \Protobuf\Stream + */ + protected $stream; + + /** + * @var bool + */ + protected $isBigEndian; + + /** + * Constructor + * + * @param \Protobuf\Configuration $config + */ + public function __construct(Configuration $config) + { + $this->config = $config; + $this->isBigEndian = BigEndian::isBigEndian(); + } + + /** + * Reads a byte. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readByte(Stream $stream) + { + $char = $stream->read(1); + $byte = ord($char); + + return $byte; + } + + /** + * Decode a varint. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readVarint(Stream $stream) + { + // Optimize common case (single byte varints) + $byte = $this->readByte($stream); + + if ($byte < 0x80) { + return $byte; + } + + $length = $stream->getSize(); + $offset = $stream->tell(); + $result = $byte & 0x7f; + $shift = 7; + + // fastpath 32bit varints (5bytes) by unrolling the loop + if ($length - $offset >= 4) { + // 2 + $byte = $this->readByte($stream); + $result |= ($byte & 0x7f) << 7; + + if ($byte < 0x80) { + return $result; + } + + // 3 + $byte = $this->readByte($stream); + $result |= ($byte & 0x7f) << 14; + + if ($byte < 0x80) { + return $result; + } + + // 4 + $byte = $this->readByte($stream); + $result |= ($byte & 0x7f) << 21; + + if ($byte < 0x80) { + return $result; + } + + // 5 + $byte = $this->readByte($stream); + $result |= ($byte & 0x7f) << 28; + + if ($byte < 0x80) { + return $result; + } + + $shift = 35; + } + + // If we're just at the end of the buffer or handling a 64bit varint + do { + $byte = $this->readByte($stream); + $result |= ($byte & 0x7f) << $shift; + $shift += 7; + } while ($byte > 0x7f); + + return $result; + } + + /** + * Decodes a zigzag integer of the given bits. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readZigzag(Stream $stream) + { + $number = $this->readVarint($stream); + $zigzag = ($number >> 1) ^ (-($number & 1)); + + return $zigzag; + } + + /** + * Decode a fixed 32bit integer with sign. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readSFixed32(Stream $stream) + { + $bytes = $stream->read(4); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + list(, $result) = unpack('l', $bytes); + + return $result; + } + + /** + * Decode a fixed 32bit integer without sign. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readFixed32(Stream $stream) + { + $bytes = $stream->read(4); + + if (PHP_INT_SIZE < 8) { + list(, $lo, $hi) = unpack('v*', $bytes); + + return $hi << 16 | $lo; + } + + list(, $result) = unpack('V*', $bytes); + + return $result; + } + + /** + * Decode a fixed 64bit integer with sign. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readSFixed64(Stream $stream) + { + $bytes = $stream->read(8); + + list(, $lo0, $lo1, $hi0, $hi1) = unpack('v*', $bytes); + + return ($hi1 << 16 | $hi0) << 32 | ($lo1 << 16 | $lo0); + } + + /** + * Decode a fixed 64bit integer without sign. + * + * @param \Protobuf\Stream $stream + * + * @return integer + */ + public function readFixed64(Stream $stream) + { + return $this->readSFixed64($stream); + } + + /** + * Decode a 32bit float. + * + * @param \Protobuf\Stream $stream + * + * @return float + */ + public function readFloat(Stream $stream) + { + $bytes = $stream->read(4); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + list(, $result) = unpack('f', $bytes); + + return $result; + } + + /** + * Decode a 64bit double. + * + * @param \Protobuf\Stream $stream + * + * @return float + */ + public function readDouble(Stream $stream) + { + $bytes = $stream->read(8); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + list(, $result) = unpack('d', $bytes); + + return $result; + } + + /** + * Decode a bool. + * + * @param \Protobuf\Stream $stream + * + * @return bool + */ + public function readBool(Stream $stream) + { + return (bool) $this->readVarint($stream); + } + + /** + * Decode a string. + * + * @param \Protobuf\Stream $stream + * + * @return string + */ + public function readString(Stream $stream) + { + $length = $this->readVarint($stream); + $string = $stream->read($length); + + return $string; + } + + /** + * Decode a stream of bytes. + * + * @param \Protobuf\Stream $stream + * + * @return \Protobuf\Stream + */ + public function readByteStream(Stream $stream) + { + $length = $this->readVarint($stream); + $value = $stream->readStream($length); + + return $value; + } + + /** + * Read unknown scalar value. + * + * @param \Protobuf\Stream $stream + * @param integer $wire + * + * @return scalar + */ + public function readUnknown(Stream $stream, $wire) + { + if ($wire === WireFormat::WIRE_VARINT) { + return $this->readVarint($stream); + } + + if ($wire === WireFormat::WIRE_LENGTH) { + return $this->readString($stream); + } + + if ($wire === WireFormat::WIRE_FIXED32) { + return $this->readFixed32($stream); + } + + if ($wire === WireFormat::WIRE_FIXED64) { + return $this->readFixed64($stream); + } + + if ($wire === WireFormat::WIRE_GROUP_START || $wire === WireFormat::WIRE_GROUP_END) { + throw new RuntimeException('Groups are deprecated in Protocol Buffers and unsupported.'); + } + + throw new RuntimeException("Unsupported wire type '$wire' while reading unknown field."); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php b/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php new file mode 100644 index 0000000..235af8d --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php @@ -0,0 +1,301 @@ + + * @author Fabio B. Silva + */ +class StreamWriter +{ + /** + * @var \Protobuf\Configuration + */ + protected $config; + + /** + * @var \Protobuf\Binary\Platform\NegativeEncoder + */ + protected $negativeEncoder; + + /** + * @var bool + */ + protected $isBigEndian; + + /** + * Constructor + * + * @param \Protobuf\Configuration $config + */ + public function __construct(Configuration $config) + { + $this->config = $config; + $this->isBigEndian = BigEndian::isBigEndian(); + $this->negativeEncoder = $config->getPlatformFactory() + ->getNegativeEncoder(); + } + + /** + * Store the given bytes in the stream. + * + * @param \Protobuf\Stream $stream + * @param string $bytes + * @param int $length + */ + public function writeBytes(Stream $stream, $bytes, $length = null) + { + if ($length === null) { + $length = mb_strlen($bytes, '8bit'); + } + + $stream->write($bytes, $length); + } + + /** + * Store a single byte. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeByte(Stream $stream, $value) + { + $stream->write(chr($value), 1); + } + + /** + * Store an integer encoded as varint. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeVarint(Stream $stream, $value) + { + // Small values do not need to be encoded + if ($value >= 0 && $value < 0x80) { + $this->writeByte($stream, $value); + + return; + } + + $values = null; + + // Build an array of bytes with the encoded values + if ($value > 0) { + $values = []; + + while ($value > 0) { + $values[] = 0x80 | ($value & 0x7f); + $value = $value >> 7; + } + } + + if ($values === null) { + $values = $this->negativeEncoder->encodeVarint($value); + } + + // Remove the MSB flag from the last byte + $values[count($values) - 1] &= 0x7f; + + // Convert the byte sized ints to actual bytes in a string + $values = array_merge(['C*'], $values); + $bytes = call_user_func_array('pack', $values); + + $this->writeBytes($stream, $bytes); + } + + /** + * Encodes an integer with zigzag. + * + * @param \Protobuf\Stream $stream + * @param integer $value + * @param integer $base + */ + public function writeZigzag(Stream $stream, $value, $base = 32) + { + if ($base == 32) { + $this->writeZigzag32($stream, $value); + + return; + } + + $this->writeZigzag64($stream, $value); + } + + /** + * Encodes an integer with zigzag. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeZigzag32(Stream $stream, $value) + { + $this->writeVarint($stream, ($value << 1) ^ ($value >> 32 - 1)); + } + + /** + * Encodes an integer with zigzag. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeZigzag64(Stream $stream, $value) + { + $this->writeVarint($stream, ($value << 1) ^ ($value >> 64 - 1)); + } + + /** + * Encode an integer as a fixed of 32bits with sign. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeSFixed32(Stream $stream, $value) + { + $bytes = pack('l*', $value); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + $this->writeBytes($stream, $bytes); + } + + /** + * Encode an integer as a fixed of 32bits without sign. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeFixed32(Stream $stream, $value) + { + $this->writeBytes($stream, pack('V*', $value), 4); + } + + /** + * Encode an integer as a fixed of 64bits with sign. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeSFixed64(Stream $stream, $value) + { + if ($value >= 0) { + $this->writeFixed64($stream, $value); + + return; + } + + $bytes = $this->negativeEncoder->encodeSFixed64($value); + + $this->writeBytes($stream, $bytes); + } + + /** + * Encode an integer as a fixed of 64bits without sign. + * + * @param \Protobuf\Stream $stream + * @param integer $value + */ + public function writeFixed64(Stream $stream, $value) + { + $bytes = pack('V*', $value & 0xffffffff, $value / (0xffffffff + 1)); + + $this->writeBytes($stream, $bytes, 8); + } + + /** + * Encode a number as a 32bit float. + * + * @param \Protobuf\Stream $stream + * @param float $value + */ + public function writeFloat(Stream $stream, $value) + { + $bytes = pack('f*', $value); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + $this->writeBytes($stream, $bytes, 4); + } + + /** + * Encode a number as a 64bit double. + * + * @param \Protobuf\Stream $stream + * @param float $value + */ + public function writeDouble(Stream $stream, $value) + { + $bytes = pack('d*', $value); + + if ($this->isBigEndian) { + $bytes = strrev($bytes); + } + + $this->writeBytes($stream, $bytes, 8); + } + + /** + * Encode a bool. + * + * @param \Protobuf\Stream $stream + * @param bool $value + */ + public function writeBool(Stream $stream, $value) + { + $this->writeVarint($stream, $value ? 1 : 0); + } + + /** + * Encode a string. + * + * @param \Protobuf\Stream $stream + * @param string $value + */ + public function writeString(Stream $stream, $value) + { + $this->writeVarint($stream, mb_strlen($value, '8bit')); + $this->writeBytes($stream, $value); + } + + /** + * Encode a stream of bytes. + * + * @param \Protobuf\Stream $stream + * @param \Protobuf\Stream $value + */ + public function writeByteStream(Stream $stream, Stream $value) + { + $length = $value->getSize(); + + $value->seek(0); + $this->writeVarint($stream, $length); + $stream->writeStream($value, $length); + } + + /** + * Write the given stream. + * + * @param \Protobuf\Stream $stream + * @param \Protobuf\Stream $value + * @param int $length + */ + public function writeStream(Stream $stream, Stream $value, $length = null) + { + if ($length === null) { + $length = $value->getSize(); + } + + $stream->writeStream($value, $length); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Collection.php b/vendor/protobuf-php/protobuf/src/Collection.php new file mode 100644 index 0000000..873a527 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Collection.php @@ -0,0 +1,16 @@ + + */ +interface Collection extends Countable, Traversable +{ + +} diff --git a/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php b/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php new file mode 100644 index 0000000..1595e0d --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php @@ -0,0 +1,34 @@ + + */ +class ComputeSizeContext +{ + /** + * @var \Protobuf\Binary\SizeCalculator + */ + private $calculator; + + /** + * @param \Protobuf\Binary\SizeCalculator $calculator + */ + public function __construct(SizeCalculator $calculator) + { + $this->calculator = $calculator; + } + + /** + * @return \Protobuf\Binary\SizeCalculator + */ + public function getSizeCalculator() + { + return $this->calculator; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Configuration.php b/vendor/protobuf-php/protobuf/src/Configuration.php new file mode 100644 index 0000000..85388f9 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Configuration.php @@ -0,0 +1,195 @@ + + */ +class Configuration +{ + /** + * @var \Protobuf\Extension\ExtensionRegistry + */ + private $extensionRegistry; + + /** + * @var \Protobuf\Binary\Platform\PlatformFactory + */ + private $platformFactory; + + /** + * @var \Protobuf\Binary\StreamWriter + */ + private $streamWriter; + + /** + * @var \Protobuf\Binary\StreamReader + */ + private $streamReader; + + /** + * @var \Protobuf\Binary\SizeCalculator + */ + private $sizeCalculator; + + /** + * @var \Protobuf\DescriptorLoader + */ + protected static $instance; + + /** + * Return a ExtensionRegistry. + * + * @return \Protobuf\Extension\ExtensionRegistry + */ + public function getExtensionRegistry() + { + if ($this->extensionRegistry === null) { + $this->extensionRegistry = new ExtensionRegistry(); + } + + return $this->extensionRegistry; + } + + /** + * Set a ExtensionRegistry. + * + * @param \Protobuf\Extension\ExtensionRegistry $extensionRegistry + */ + public function setExtensionRegistry(ExtensionRegistry $extensionRegistry) + { + $this->extensionRegistry = $extensionRegistry; + } + + /** + * Return a PlatformFactory. + * + * @return \Protobuf\Binary\Platform\PlatformFactory + */ + public function getPlatformFactory() + { + if ($this->platformFactory !== null) { + return $this->platformFactory; + } + + return $this->platformFactory = new PlatformFactory(); + } + + /** + * Return a StreamReader + * + * @return \Protobuf\Binary\StreamReader + */ + public function getStreamReader() + { + if ($this->streamReader !== null) { + return $this->streamReader; + } + + return $this->streamReader = new StreamReader($this); + } + + /** + * Return a StreamWriter + * + * @return \Protobuf\Binary\StreamWriter + */ + public function getStreamWriter() + { + if ($this->streamWriter !== null) { + return $this->streamWriter; + } + + return $this->streamWriter = new StreamWriter($this); + } + + /** + * Return a SizeCalculator + * + * @return \Protobuf\Binary\SizeCalculator + */ + public function getSizeCalculator() + { + if ($this->sizeCalculator !== null) { + return $this->sizeCalculator; + } + + return $this->sizeCalculator = new SizeCalculator($this); + } + + /** + * Sets the PlatformFactory. + * + * @param \Protobuf\Binary\Platform\PlatformFactory $platformFactory + */ + public function setPlatformFactory(PlatformFactory $platformFactory) + { + $this->platformFactory = $platformFactory; + } + + /** + * Create a compute size context. + * + * @return \Protobuf\ComputeSizeContext + */ + public function createComputeSizeContext() + { + $calculator = $this->getSizeCalculator(); + $context = new ComputeSizeContext($calculator); + + return $context; + } + + /** + * Create a write context. + * + * @return \Protobuf\WriteContext + */ + public function createWriteContext() + { + $stream = Stream::create(); + $writer = $this->getStreamWriter(); + $sizeContext = $this->createComputeSizeContext(); + $context = new WriteContext($stream, $writer, $sizeContext); + + return $context; + } + + /** + * Create a read context. + * + * @param \Protobuf\Stream|resource|string $stream + * + * @return \Protobuf\ReadContext + */ + public function createReadContext($stream) + { + $reader = $this->getStreamReader(); + $registry = $this->extensionRegistry; + $context = new ReadContext($stream, $reader, $registry); + + return $context; + } + + /** + * Returns single instance of this class + * + * @return \Protobuf\Configuration + */ + public static function getInstance() + { + if (self::$instance !== null) { + return self::$instance; + } + + return self::$instance = new Configuration(); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Enum.php b/vendor/protobuf-php/protobuf/src/Enum.php new file mode 100644 index 0000000..4b2c316 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Enum.php @@ -0,0 +1,63 @@ + + */ +abstract class Enum +{ + /** + * Enum value + * + * @var integer + */ + protected $value; + + /** + * Enum name + * + * @var string + */ + protected $name; + + /** + * @param string $name + * @param integer $value + */ + public function __construct($name, $value) + { + $this->name = $name; + $this->value = $value; + } + + /** + * @return int + */ + public function value() + { + return $this->value; + } + + /** + * @return string + */ + public function name() + { + return $this->name; + } + + /** + * @return string + */ + public function __toString() + { + return (string) $this->name; + } +} diff --git a/vendor/protobuf-php/protobuf/src/EnumCollection.php b/vendor/protobuf-php/protobuf/src/EnumCollection.php new file mode 100644 index 0000000..ab6de52 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/EnumCollection.php @@ -0,0 +1,48 @@ + + */ +class EnumCollection extends ArrayObject implements Collection +{ + /** + * @param array<\Protobuf\Enum> $values + */ + public function __construct(array $values = []) + { + array_walk($values, [$this, 'add']); + } + + /** + * Adds a \Protobuf\Enum to this collection + * + * @param \Protobuf\Enum $enum + */ + public function add(Enum $enum) + { + parent::offsetSet(null, $enum); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + if ( ! $value instanceof Enum) { + throw new InvalidArgumentException(sprintf( + 'Argument 2 passed to %s must be a \Protobuf\Enum, %s given', + __METHOD__, + is_object($value) ? get_class($value) : gettype($value) + )); + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Exception.php b/vendor/protobuf-php/protobuf/src/Exception.php new file mode 100644 index 0000000..4e561c5 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Exception.php @@ -0,0 +1,13 @@ + + * @author Fabio B. Silva + */ +class Exception extends \Exception +{ +} diff --git a/vendor/protobuf-php/protobuf/src/Extension.php b/vendor/protobuf-php/protobuf/src/Extension.php new file mode 100644 index 0000000..1b305a2 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Extension.php @@ -0,0 +1,17 @@ + + */ +interface Extension +{ + +} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php new file mode 100644 index 0000000..082c9bc --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php @@ -0,0 +1,133 @@ + + */ +class ExtensionField +{ + /** + * @var callback + */ + private $sizeCalculator; + + /** + * @var callback + */ + private $writer; + + /** + * @var callback + */ + private $reader; + + /** + * @var string + */ + private $extendee; + + /** + * @var string + */ + private $method; + + /** + * @var string + */ + private $name; + + /** + * @var integer + */ + private $tag; + + /** + * @param string $extendee + * @param string $name + * @param integer $tag + * @param callback $reader + * @param callback $writer + * @param callback $sizeCalculator + * @param string $method + */ + public function __construct($extendee, $name, $tag, $reader, $writer, $sizeCalculator, $method = null) + { + $this->tag = $tag; + $this->name = $name; + $this->reader = $reader; + $this->writer = $writer; + $this->method = $method; + $this->extendee = $extendee; + $this->sizeCalculator = $sizeCalculator; + } + + /** + * @return string + */ + public function getExtendee() + { + return $this->extendee; + } + + /** + * @return string + */ + public function getMethod() + { + return $this->method; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @return integer + */ + public function getTag() + { + return $this->tag; + } + + /** + * @param \Protobuf\ComputeSizeContext $context + * @param mixed $value + * + * @return integer + */ + public function serializedSize(ComputeSizeContext $context, $value) + { + return call_user_func($this->sizeCalculator, $context, $value); + } + + /** + * @param \Protobuf\WriteContext $context + * @param mixed $value + */ + public function writeTo(WriteContext $context, $value) + { + call_user_func($this->writer, $context, $value); + } + + /** + * @param \Protobuf\ReadContext $context + * @param integer $wire + * + * @return mixed + */ + public function readFrom(ReadContext $context, $wire) + { + return call_user_func($this->reader, $context, $wire); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php new file mode 100644 index 0000000..e5b32c3 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php @@ -0,0 +1,117 @@ + + */ +class ExtensionFieldMap extends SplObjectStorage implements Collection +{ + /** + * @var string + */ + protected $extendee; + + /** + * @param string $extendee + */ + public function __construct($extendee = null) + { + $this->extendee = trim($extendee, '\\'); + } + + /** + * @param \Protobuf\Extension\ExtensionField $extension + * @param mixed $value + */ + public function add(ExtensionField $extension, $value) + { + if ( ! $value instanceof Message) { + $this->put($extension, $value); + + return; + } + + $className = get_class($value); + $existing = isset($this[$extension]) + ? $this[$extension] + : null; + + if ($existing instanceof $className) { + $value->merge($existing); + } + + $this->put($extension, $value); + } + + /** + * @param \Protobuf\Extension\ExtensionField $extension + * @param mixed $value + */ + public function put(ExtensionField $extension, $value) + { + $extendee = trim($extension->getExtendee(), '\\'); + + if ($extendee !== $this->extendee) { + throw new InvalidArgumentException(sprintf( + 'Invalid extendee, %s is expected but %s given', + $this->extendee, + $extendee + )); + } + + $this->attach($extension, $value); + } + + /** + * @param \Protobuf\Extension\ExtensionField $key + * + * @return mixed + */ + public function get(ExtensionField $key) + { + return $this->offsetGet($key); + } + + /** + * @param \Protobuf\ComputeSizeContext $context + * + * @return integer + */ + public function serializedSize(ComputeSizeContext $context) + { + $size = 0; + + for ($this->rewind(); $this->valid(); $this->next()) { + $extension = $this->current(); + $value = $this->getInfo(); + $size += $extension->serializedSize($context, $value); + } + + return $size; + } + + /** + * @param \Protobuf\WriteContext $context + */ + public function writeTo(WriteContext $context) + { + for ($this->rewind(); $this->valid(); $this->next()) { + $extension = $this->current(); + $value = $this->getInfo(); + + $extension->writeTo($context, $value); + } + } +} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php new file mode 100644 index 0000000..aa5dd7b --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php @@ -0,0 +1,60 @@ + + */ +class ExtensionRegistry +{ + /** + * @var array + */ + protected $extensions = []; + + /** + * Remove all registered extensions + */ + public function clear() + { + $this->extensions = []; + } + + /** + * Adds an element to the registry. + * + * @param \Protobuf\Extension\ExtensionField $extension + */ + public function add(ExtensionField $extension) + { + $extendee = trim($extension->getExtendee(), '\\'); + $number = $extension->getTag(); + + if ( ! isset($this->extensions[$extendee])) { + $this->extensions[$extendee] = []; + } + + $this->extensions[$extendee][$number] = $extension; + } + + /** + * Find an extension by containing field number + * + * @param string $className + * @param integer $number + * + * @return \Protobuf\Extension\ExtensionField|null + */ + public function findByNumber($className, $number) + { + $extendee = trim($className, '\\'); + + if ( ! isset($this->extensions[$extendee][$number])) { + return null; + } + + return $this->extensions[$extendee][$number]; + } +} diff --git a/vendor/protobuf-php/protobuf/src/Field.php b/vendor/protobuf-php/protobuf/src/Field.php new file mode 100644 index 0000000..8af3658 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Field.php @@ -0,0 +1,129 @@ + + * @author Fabio B. Silva + */ +class Field +{ + const LABEL_OPTIONAL = 1; + const LABEL_REQUIRED = 2; + const LABEL_REPEATED = 3; + const LABEL_UNKNOWN = -1; + + const TYPE_DOUBLE = 1; + const TYPE_FLOAT = 2; + const TYPE_INT64 = 3; + const TYPE_UINT64 = 4; + const TYPE_INT32 = 5; + const TYPE_FIXED64 = 6; + const TYPE_FIXED32 = 7; + const TYPE_BOOL = 8; + const TYPE_STRING = 9; + const TYPE_GROUP = 10; + const TYPE_MESSAGE = 11; + const TYPE_BYTES = 12; + const TYPE_UINT32 = 13; + const TYPE_ENUM = 14; + const TYPE_SFIXED32 = 15; + const TYPE_SFIXED64 = 16; + const TYPE_SINT32 = 17; + const TYPE_SINT64 = 18; + const TYPE_UNKNOWN = -1; + + /** + * @var array + */ + protected static $names = [ + self::TYPE_DOUBLE => 'double', + self::TYPE_FLOAT => 'float', + self::TYPE_INT64 => 'int64', + self::TYPE_UINT64 => 'uint64', + self::TYPE_INT32 => 'int32', + self::TYPE_FIXED64 => 'fixed64', + self::TYPE_FIXED32 => 'fixed32', + self::TYPE_BOOL => 'bool', + self::TYPE_STRING => 'string', + self::TYPE_MESSAGE => 'message', + self::TYPE_BYTES => 'bytes', + self::TYPE_UINT32 => 'uint32', + self::TYPE_ENUM => 'enum', + self::TYPE_SFIXED32 => 'sfixed32', + self::TYPE_SFIXED64 => 'sfixed64', + self::TYPE_SINT32 => 'sint32', + self::TYPE_SINT64 => 'sint64', + ]; + + /** + * Obtain the label name (repeated, optional, required). + * + * @param string $label + * + * @return string + */ + public static function getLabelName($label) + { + if ($label === self::LABEL_OPTIONAL) { + return 'optional'; + } + + if ($label === self::LABEL_REQUIRED) { + return 'required'; + } + + if ($label === self::LABEL_REPEATED) { + return 'repeated'; + } + + return null; + } + + /** + * @param integer $type + * + * @return string + */ + public static function getTypeName($type) + { + return isset(self::$names[$type]) + ? self::$names[$type] + : null; + } + + /** + * @param integer $type + * + * @return string + */ + public static function getPhpType($type) + { + switch ($type) { + case self::TYPE_DOUBLE: + case self::TYPE_FLOAT: + return 'float'; + case self::TYPE_INT64: + case self::TYPE_UINT64: + case self::TYPE_INT32: + case self::TYPE_FIXED64: + case self::TYPE_FIXED32: + case self::TYPE_UINT32: + case self::TYPE_SFIXED32: + case self::TYPE_SFIXED64: + case self::TYPE_SINT32: + case self::TYPE_SINT64: + return 'int'; + case self::TYPE_BOOL: + return 'bool'; + case self::TYPE_STRING: + return 'string'; + case self::TYPE_BYTES: + return '\Protobuf\Stream'; + default: + return null; + } + } +} diff --git a/vendor/protobuf-php/protobuf/src/Message.php b/vendor/protobuf-php/protobuf/src/Message.php new file mode 100644 index 0000000..a319f7f --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Message.php @@ -0,0 +1,86 @@ + + */ +interface Message +{ + /** + * Creates message from the given stream. + * + * @param \Protobuf\Stream|resource|string $stream + * @param \Protobuf\Configuration $configuration + * + * @return \Protobuf\Message + */ + public static function fromStream($stream, Configuration $configuration = null); + + /** + * Serializes the message and returns a stream containing its bytes. + * + * @param \Protobuf\Configuration $configuration + * + * @return \Protobuf\Stream + */ + public function toStream(Configuration $configuration = null); + + /** + * Compute the number of bytes that would be needed to encode the message + * + * @param \Protobuf\ComputeSizeContext $context + * + * @return integer + */ + public function serializedSize(ComputeSizeContext $context); + + /** + * Serializes the message and returns a stream containing its bytes. + * + * @param \Protobuf\ReadContext $context + */ + public function readFrom(ReadContext $context); + + /** + * Encodes and writes the message + * + * @param \Protobuf\ReadContext $context + * + * @return \Protobuf\Stream + */ + public function writeTo(WriteContext $context); + + /** + * Merge $context into the message being built. + * + * @param \Protobuf\Message $message + */ + public function merge(Message $message); + + /** + * Obtain the list of unknown fields in this message. + * + * @return \Protobuf\UnknownFieldSet + */ + public function unknownFieldSet(); + + /** + * Obtain the map of extensions in this message. + * + * @return \Protobuf\Extension\ExtensionFieldMap + */ + public function extensions(); + + /** + * Reset all fields back to the initial values. + */ + public function clear(); +} diff --git a/vendor/protobuf-php/protobuf/src/MessageCollection.php b/vendor/protobuf-php/protobuf/src/MessageCollection.php new file mode 100644 index 0000000..81a24ee --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/MessageCollection.php @@ -0,0 +1,48 @@ + + */ +class MessageCollection extends ArrayObject implements Collection +{ + /** + * @param array<\Protobuf\Message> $values + */ + public function __construct(array $values = []) + { + array_walk($values, [$this, 'add']); + } + + /** + * Adds a message to this collection + * + * @param \Protobuf\Message $message + */ + public function add(Message $message) + { + parent::offsetSet(null, $message); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + if ( ! $value instanceof Message) { + throw new InvalidArgumentException(sprintf( + 'Argument 2 passed to %s must implement interface \Protobuf\Message, %s given', + __METHOD__, + is_object($value) ? get_class($value) : gettype($value) + )); + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/protobuf-php/protobuf/src/MessageSerializer.php b/vendor/protobuf-php/protobuf/src/MessageSerializer.php new file mode 100644 index 0000000..23df67f --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/MessageSerializer.php @@ -0,0 +1,57 @@ + + */ +class MessageSerializer implements Serializer +{ + /** + * @var \Protobuf\Configuration + */ + private $config; + + /** + * @param \Protobuf\Configuration $config + */ + public function __construct(Configuration $config = null) + { + $this->config = $config ?: Configuration::getInstance(); + } + + /** + * @return \Protobuf\Configuration + */ + public function getConfiguration() + { + return $this->config; + } + + /** + * Serializes the given message. + * + * @param \Protobuf\Message $message + * + * @return \Protobuf\Stream + */ + public function serialize(Message $message) + { + return $message->toStream($this->config); + } + + /** + * Deserializes the given data to the specified message. + * + * @param string $class + * @param \Protobuf\Stream|resource|string $stream + * + * @return \Protobuf\Message + */ + public function unserialize($class, $stream) + { + return new $class($stream, $this->config); + } +} diff --git a/vendor/protobuf-php/protobuf/src/ReadContext.php b/vendor/protobuf-php/protobuf/src/ReadContext.php new file mode 100644 index 0000000..5099f63 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/ReadContext.php @@ -0,0 +1,93 @@ + + */ +class ReadContext +{ + /** + * @var \Protobuf\Extension\ExtensionRegistry + */ + private $extensionRegistry; + + /** + * @var \Protobuf\Binary\StreamReader + */ + private $reader; + + /** + * @var \Protobuf\Stream + */ + private $stream; + + /** + * @var integer + */ + private $length; + + /** + * @param \Protobuf\Stream|resource|string $stream + * @param \Protobuf\Binary\StreamReader $reader + * @param \Protobuf\Extension\ExtensionRegistry $extensionRegistry + */ + public function __construct($stream, StreamReader $reader, ExtensionRegistry $extensionRegistry = null) + { + if ( ! $stream instanceof \Protobuf\Stream) { + $stream = Stream::wrap($stream); + } + + $this->stream = $stream; + $this->reader = $reader; + $this->extensionRegistry = $extensionRegistry; + } + + /** + * Return a ExtensionRegistry. + * + * @return \Protobuf\Extension\ExtensionRegistry + */ + public function getExtensionRegistry() + { + return $this->extensionRegistry; + } + + /** + * @return \Protobuf\Binary\StreamReader + */ + public function getReader() + { + return $this->reader; + } + + /** + * @return \Protobuf\Stream + */ + public function getStream() + { + return $this->stream; + } + + /** + * @return integer + */ + public function getLength() + { + return $this->length; + } + + /** + * @param integer $length + */ + public function setLength($length) + { + $this->length = $length; + } +} diff --git a/vendor/protobuf-php/protobuf/src/ScalarCollection.php b/vendor/protobuf-php/protobuf/src/ScalarCollection.php new file mode 100644 index 0000000..21a3c65 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/ScalarCollection.php @@ -0,0 +1,56 @@ + + */ +class ScalarCollection extends ArrayObject implements Collection +{ + /** + * @param array $values + */ + public function __construct(array $values = []) + { + array_walk($values, [$this, 'add']); + } + + /** + * Adds a value to this collection + * + * @param scalar $value + */ + public function add($value) + { + if ( ! is_scalar($value)) { + throw new InvalidArgumentException(sprintf( + 'Argument 1 passed to %s must be a scalar value, %s given', + __METHOD__, + is_object($value) ? get_class($value) : gettype($value) + )); + } + + parent::offsetSet(null, $value); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + if ( ! is_scalar($value)) { + throw new InvalidArgumentException(sprintf( + 'Argument 2 passed to %s must be a scalar value, %s given', + __METHOD__, + is_object($value) ? get_class($value) : gettype($value) + )); + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Serializer.php b/vendor/protobuf-php/protobuf/src/Serializer.php new file mode 100644 index 0000000..7d77ec1 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Serializer.php @@ -0,0 +1,30 @@ + + */ +interface Serializer +{ + /** + * Serializes the given message. + * + * @param \Protobuf\Message $message + * + * @return \Protobuf\Stream + */ + public function serialize(Message $message); + + /** + * Deserializes the given data to the specified message. + * + * @param string $class + * @param \Protobuf\Stream|resource|string $stream + * + * @return \Protobuf\Message + */ + public function unserialize($class, $stream); +} diff --git a/vendor/protobuf-php/protobuf/src/Stream.php b/vendor/protobuf-php/protobuf/src/Stream.php new file mode 100644 index 0000000..4c7b5b1 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Stream.php @@ -0,0 +1,304 @@ + + */ +class Stream +{ + /** + * @var resource + */ + private $stream; + + /** + * @var integer + */ + private $size; + + /** + * @param resource $stream + * @param integer $size + * + * @throws \InvalidArgumentException if the stream is not a stream resource + */ + public function __construct($stream, $size = null) + { + if ( ! is_resource($stream)) { + throw new InvalidArgumentException('Stream must be a resource'); + } + + $this->size = $size; + $this->stream = $stream; + } + + /** + * Closes the stream when the destructed + */ + public function __destruct() + { + if (is_resource($this->stream)) { + fclose($this->stream); + } + + $this->stream = null; + } + + /** + * {@inheritdoc} + */ + public function __toString() + { + return $this->getContents(); + } + + /** + * Returns the remaining contents of the stream as a string. + * + * @return string + */ + public function getContents() + { + if ( ! $this->stream) { + return ''; + } + + $this->seek(0); + + return stream_get_contents($this->stream); + } + + /** + * Get the size of the stream + * + * @return int|null Returns the size in bytes if known + * + * @throws \InvalidArgumentException If cannot find out the stream size + */ + public function getSize() + { + if ($this->size !== null) { + return $this->size; + } + + if ( ! $this->stream) { + return null; + } + + $stats = fstat($this->stream); + + if (isset($stats['size'])) { + return $this->size = $stats['size']; + } + + throw new RuntimeException('Unknown stream size'); + } + + /** + * Returns true if the stream is at the end of the stream. + * + * @return bool + */ + public function eof() + { + return feof($this->stream); + } + + /** + * Returns the current position of the file read/write pointer + * + * @return int + * + * @throws \RuntimeException If cannot find out the stream position + */ + public function tell() + { + $position = ftell($this->stream); + + if ($position === false) { + throw new RuntimeException('Unable to get stream position'); + } + + return $position; + } + + /** + * Seek to a position in the stream + * + * @param int $offset + * @param int $whence + * + * @throws \RuntimeException If cannot find out the stream position + */ + public function seek($offset, $whence = SEEK_SET) + { + if (fseek($this->stream, $offset, $whence) !== 0) { + throw new RuntimeException('Unable to seek stream position to ' . $offset); + } + } + + /** + * Read data from the stream + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($length < 1) { + return ''; + } + + $buffer = fread($this->stream, $length); + + if ($buffer === false) { + throw new RuntimeException('Failed to read ' . $length . ' bytes'); + } + + return $buffer; + } + + /** + * Read stream + * + * @param int $length + * + * @return \Protobuf\Stream + * + * @throws \RuntimeException + */ + public function readStream($length) + { + $stream = self::fromString(); + $target = $stream->stream; + $source = $this->stream; + + if ($length < 1) { + return $stream; + } + + $written = stream_copy_to_stream($source, $target, $length); + + if ($written !== $length) { + throw new RuntimeException('Failed to read stream with ' . $length . ' bytes'); + } + + $stream->seek(0); + + return $stream; + } + + /** + * Write data to the stream + * + * @param string $bytes + * @param int $length + * + * @return int + * + * @throws \RuntimeException + */ + public function write($bytes, $length) + { + $written = fwrite($this->stream, $bytes, $length); + + if ($written !== $length) { + throw new RuntimeException('Failed to write '.$length.' bytes'); + } + + $this->size = null; + + return $written; + } + + /** + * Write stream + * + * @param \Protobuf\Stream $stream + * @param int $length + * + * @return int + * + * @throws \RuntimeException + */ + public function writeStream(Stream $stream, $length) + { + $target = $this->stream; + $source = $stream->stream; + $written = stream_copy_to_stream($source, $target); + + if ($written !== $length) { + throw new RuntimeException('Failed to write stream with ' . $length . ' bytes'); + } + + $this->size = null; + + return $written; + } + + /** + * Wrap the input resource in a stream object. + * + * @param \Protobuf\Stream|resource|string $resource + * @param integer $size + * + * @return \Protobuf\Stream + * + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ + public static function wrap($resource = '', $size = null) + { + if ($resource instanceof Stream) { + return $resource; + } + + $type = gettype($resource); + + if ($type == 'string') { + return self::fromString($resource, $size); + } + + if ($type == 'resource') { + return new self($resource, $size); + } + + throw new InvalidArgumentException('Invalid resource type: ' . $type); + } + + /** + * Create a new stream. + * + * @return \Protobuf\Stream + */ + public static function create() + { + return new self(fopen('php://temp', 'r+')); + } + + /** + * Create a new stream from a string. + * + * @param string $resource + * @param integer $size + * + * @return \Protobuf\Stream + */ + public static function fromString($resource = '', $size = null) + { + $stream = fopen('php://temp', 'r+'); + + if ($resource !== '') { + fwrite($stream, $resource); + fseek($stream, 0); + } + + return new self($stream, $size); + } +} diff --git a/vendor/protobuf-php/protobuf/src/StreamCollection.php b/vendor/protobuf-php/protobuf/src/StreamCollection.php new file mode 100644 index 0000000..6af1a88 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/StreamCollection.php @@ -0,0 +1,48 @@ + + */ +class StreamCollection extends ArrayObject implements Collection +{ + /** + * @param array<\Protobuf\Stream> $values + */ + public function __construct(array $values = []) + { + array_walk($values, [$this, 'add']); + } + + /** + * Adds a \Protobuf\Stream to this collection + * + * @param \Protobuf\Stream $stream + */ + public function add(Stream $stream) + { + parent::offsetSet(null, $stream); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + if ( ! $value instanceof Stream) { + throw new InvalidArgumentException(sprintf( + 'Argument 2 passed to %s must be a \Protobuf\Stream, %s given', + __METHOD__, + is_object($value) ? get_class($value) : gettype($value) + )); + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/protobuf-php/protobuf/src/TextFormat.php b/vendor/protobuf-php/protobuf/src/TextFormat.php new file mode 100644 index 0000000..408517a --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/TextFormat.php @@ -0,0 +1,117 @@ + + * @author Fabio B. Silva + */ +class TextFormat +{ + /** + * @param \Protobuf\Message $message + * @param integer $level + * + * @return \Protobuf\Stream + */ + public function encodeMessage(Message $message, $level = 0) + { + $reflect = new ReflectionClass($message); + $properties = $reflect->getProperties(ReflectionProperty::IS_PROTECTED); + $indent = str_repeat(' ', $level); + $stream = Stream::create(); + + foreach ($properties as $property) { + + $property->setAccessible(true); + + $name = $property->getName(); + $value = $property->getValue($message); + + if ($value === null) { + continue; + } + + if ( ! is_array($value) && ! ($value instanceof Traversable)) { + + if ( ! $value instanceof Message) { + $item = $this->encodeValue($value); + $buffer = $indent . $name . ': ' . $item . PHP_EOL; + + $stream->write($buffer, strlen($buffer)); + + continue; + } + + $innerStream = $this->encodeMessage($value, $level + 1); + $beginMessage = $indent . $name . ' {' . PHP_EOL; + $endMessage = $indent . '}' . PHP_EOL; + + $stream->write($beginMessage, strlen($beginMessage)); + $stream->writeStream($innerStream, $innerStream->getSize()); + $stream->write($endMessage, strlen($endMessage)); + + continue; + } + + foreach ($value as $val) { + // Skip nullified repeated values + if ($val == null) { + continue; + } + + if ( ! $val instanceof Message) { + $item = $this->encodeValue($val); + $buffer = $indent . $name . ': ' . $item . PHP_EOL; + + $stream->write($buffer, strlen($buffer)); + + continue; + } + + $innerStream = $this->encodeMessage($val, $level + 1); + $beginMessage = $indent . $name . ' {' . PHP_EOL; + $endMessage = $indent . '}' . PHP_EOL; + + $stream->write($beginMessage, strlen($beginMessage)); + $stream->writeStream($innerStream, $innerStream->getSize()); + $stream->write($endMessage, strlen($endMessage)); + } + } + + $stream->seek(0); + + return $stream; + } + + /** + * @param scalar|array $value + * + * @return string + */ + public function encodeValue($value) + { + if (is_bool($value)) { + return (int) $value; + } + + if ($value instanceof Enum) { + return $value->name(); + } + + if ($value instanceof Stream) { + return json_encode($value->__toString()); + } + + return json_encode($value); + } +} diff --git a/vendor/protobuf-php/protobuf/src/Unknown.php b/vendor/protobuf-php/protobuf/src/Unknown.php new file mode 100644 index 0000000..ccfa28e --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/Unknown.php @@ -0,0 +1,39 @@ + + * @author Fabio B. Silva + */ +class Unknown +{ + /** + * @var integer + */ + public $tag; + + /** + * @var integer + */ + public $type; + + /** + * @var mixed + */ + public $value; + + /** + * @param integer $tag + * @param integer $type + * @param mixed $value + */ + public function __construct($tag = 0, $type = null, $value = null) + { + $this->tag = $tag; + $this->type = $type; + $this->value = $value; + } +} diff --git a/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php b/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php new file mode 100644 index 0000000..baa2e55 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php @@ -0,0 +1,23 @@ + + */ +class UnknownFieldSet extends ArrayObject implements Collection +{ + /** + * Adds an element to set. + * + * @param \Protobuf\Unknown $unknown + */ + public function add(Unknown $unknown) + { + $this->offsetSet($unknown->tag, $unknown); + } +} diff --git a/vendor/protobuf-php/protobuf/src/WireFormat.php b/vendor/protobuf-php/protobuf/src/WireFormat.php new file mode 100644 index 0000000..85116b9 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/WireFormat.php @@ -0,0 +1,122 @@ + + * @author Fabio B. Silva + */ +class WireFormat +{ + const WIRE_VARINT = 0; + const WIRE_FIXED64 = 1; + const WIRE_LENGTH = 2; + const WIRE_GROUP_START = 3; + const WIRE_GROUP_END = 4; + const WIRE_FIXED32 = 5; + const WIRE_UNKNOWN = -1; + + const TAG_TYPE_BITS = 3; + const TAG_TYPE_MASK = 0x7; + + /** + * @var array + */ + private static $wireTypeMap = [ + Field::TYPE_INT32 => WireFormat::WIRE_VARINT, + Field::TYPE_INT64 => WireFormat::WIRE_VARINT, + Field::TYPE_UINT32 => WireFormat::WIRE_VARINT, + Field::TYPE_UINT64 => WireFormat::WIRE_VARINT, + Field::TYPE_SINT32 => WireFormat::WIRE_VARINT, + Field::TYPE_SINT64 => WireFormat::WIRE_VARINT, + Field::TYPE_BOOL => WireFormat::WIRE_VARINT, + Field::TYPE_ENUM => WireFormat::WIRE_VARINT, + Field::TYPE_FIXED64 => WireFormat::WIRE_FIXED64, + Field::TYPE_SFIXED64 => WireFormat::WIRE_FIXED64, + Field::TYPE_DOUBLE => WireFormat::WIRE_FIXED64, + Field::TYPE_STRING => WireFormat::WIRE_LENGTH, + Field::TYPE_BYTES => WireFormat::WIRE_LENGTH, + Field::TYPE_MESSAGE => WireFormat::WIRE_LENGTH, + Field::TYPE_FIXED32 => WireFormat::WIRE_FIXED32, + Field::TYPE_SFIXED32 => WireFormat::WIRE_FIXED32, + Field::TYPE_FLOAT => WireFormat::WIRE_FIXED32, + ]; + + /** + * Given a field type, determines the wire type. + * + * @param integer $type + * @param integer $default + * + * @return integer + */ + public static function getWireType($type, $default) + { + // Unknown types just return the reported wire type + return isset(self::$wireTypeMap[$type]) + ? self::$wireTypeMap[$type] + : $default; + } + + /** + * Assert the wire type match + * + * @param integer $wire + * @param integer $type + */ + public static function assertWireType($wire, $type) + { + $expected = WireFormat::getWireType($type, $wire); + + if ($wire !== $expected) { + throw new RuntimeException(sprintf( + "Expected wire type %s but got %s for type %s.", + $expected, + $wire, + $type + )); + } + } + + /** + * Given a tag value, determines the field number (the upper 29 bits). + * + * @param integer $tag + * + * @return integer + */ + public static function getTagFieldNumber($tag) + { + return $tag >> self::TAG_TYPE_BITS; + } + + /** + * Given a tag value, determines the wire type (the lower 3 bits). + * + * @param integer $tag + * + * @return integer + */ + public static function getTagWireType($tag) + { + return $tag & self::TAG_TYPE_MASK; + } + + /** + * Makes a tag value given a field number and wire type + * + * @param integer $tag + * @param integer $wireType + * + * @return integer + */ + public static function getFieldKey($tag, $wireType) + { + return ($tag << self::TAG_TYPE_BITS) | $wireType; + } +} diff --git a/vendor/protobuf-php/protobuf/src/WriteContext.php b/vendor/protobuf-php/protobuf/src/WriteContext.php new file mode 100644 index 0000000..09e2fe6 --- /dev/null +++ b/vendor/protobuf-php/protobuf/src/WriteContext.php @@ -0,0 +1,71 @@ + + */ +class WriteContext +{ + /** + * @var \Protobuf\ComputeSizeContext + */ + private $computeSizeContext; + + /** + * @var \Protobuf\Binary\StreamWriter + */ + private $writer; + + /** + * @var \Protobuf\Stream + */ + private $stream; + + /** + * @var integer + */ + private $length; + + /** + * @param \Protobuf\Stream $stream + * @param \Protobuf\Binary\StreamWriter $writer + * @param \Protobuf\ComputeSizeContext $computeSizeContext + */ + public function __construct(Stream $stream, StreamWriter $writer, ComputeSizeContext $computeSizeContext) + { + $this->stream = $stream; + $this->writer = $writer; + $this->computeSizeContext = $computeSizeContext; + } + + /** + * @return \Protobuf\Binary\StreamWriter + */ + public function getWriter() + { + return $this->writer; + } + + /** + * @return \Protobuf\Stream + */ + public function getStream() + { + return $this->stream; + } + + /** + * @return \Protobuf\ComputeSizeContext + */ + public function getComputeSizeContext() + { + return $this->computeSizeContext; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php new file mode 100644 index 0000000..abc942e --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php @@ -0,0 +1,44 @@ +markTestSkipped('The BC MATH extension is not available.'); + } + } + + public function testEncodeVarint() + { + $encoder = new BcNegativeEncoder(); + $actual = $encoder->encodeVarint(-10); + $expected = [ + 246, 255, 255, 255, 255, + 255, 255, 255, 255, 129, + ]; + + $this->assertEquals($expected, $actual); + } + + public function testEncodeSFixed64() + { + $encoder = new BcNegativeEncoder(); + $bytes = $encoder->encodeSFixed64(-123456789123456789); + $expected = [ + 1 => 41195, + 2 => 21295, + 3 => 25780, + 4 => 65097 + ]; + + $this->assertEquals($expected, unpack('v*', $bytes)); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php new file mode 100644 index 0000000..60f7359 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php @@ -0,0 +1,18 @@ +assertEquals($expected, $actual); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php new file mode 100644 index 0000000..8b141ff --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php @@ -0,0 +1,77 @@ +markTestSkipped('The GMP extension is not available.'); + } + } + + public function testConstructInitializeGmpValues() + { + $encoder = new GmpNegativeEncoder(); + $gmp_x00 = $this->getPropertyValue($encoder, 'gmp_x00'); + $gmp_x7f = $this->getPropertyValue($encoder, 'gmp_x7f'); + $gmp_x80 = $this->getPropertyValue($encoder, 'gmp_x80'); + $gmp_xff = $this->getPropertyValue($encoder, 'gmp_xff'); + $gmp_x100 = $this->getPropertyValue($encoder, 'gmp_x100'); + $is32Bit = $this->getPropertyValue($encoder, 'is32Bit'); + + $this->assertNotNull($gmp_x00); + $this->assertNotNull($gmp_x7f); + $this->assertNotNull($gmp_x80); + $this->assertNotNull($gmp_xff); + $this->assertNotNull($gmp_x100); + + $this->assertEquals(0, gmp_intval($gmp_x00)); + $this->assertEquals(127, gmp_intval($gmp_x7f)); + $this->assertEquals(128, gmp_intval($gmp_x80)); + $this->assertEquals(255, gmp_intval($gmp_xff)); + $this->assertEquals(256, gmp_intval($gmp_x100)); + $this->assertEquals(BigEndian::is32Bit(), $is32Bit); + } + + public function testEncodeVarint() + { + $encoder = new GmpNegativeEncoder(); + + // make sure runs as 64 bit + $this->setPropertyValue($encoder, 'is32Bit', false); + + $actual = $encoder->encodeVarint(-10); + $expected = [ + 246, 255, 255, 255, 255, + 255, 255, 255, 255, 129, + ]; + + $this->assertEquals($expected, $actual); + } + + public function testEncodeSFixed64() + { + $encoder = new GmpNegativeEncoder(); + + // make sure runs as 64 bit + $this->setPropertyValue($encoder, 'is32Bit', false); + + $bytes = $encoder->encodeSFixed64(-123456789123456789); + $expected = [ + 1 => 41195, + 2 => 21295, + 3 => 25780, + 4 => 65097 + ]; + + $this->assertEquals($expected, unpack('v*', $bytes)); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php new file mode 100644 index 0000000..de38810 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php @@ -0,0 +1,31 @@ +encodeVarint(-1); + } + + /** + * @expectedException RuntimeException + * @expectedExceptionMessage Negative integers are only supported with GMP or BC (64bit) intextensions. + */ + public function testEncodeEncodeSFixed64Exception() + { + $encoder = new InvalidNegativeEncoder(); + + $encoder->encodeSFixed64(-1); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php new file mode 100644 index 0000000..d60ec5f --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php @@ -0,0 +1,63 @@ +markTestSkipped('The GMP extension is not available.'); + } + + $factory = $this->getMockBuilder(PlatformFactory::CLASS) + ->setMethods(['isExtensionLoaded']) + ->getMock(); + + $factory->expects($this->once()) + ->method('isExtensionLoaded') + ->with($this->equalTo('gmp')) + ->willReturn(true); + + $this->assertInstanceOf('Protobuf\Binary\Platform\GmpNegativeEncoder', $factory->getNegativeEncoder()); + } + + public function testGetBcNegativeEncoder() + { + if ( ! extension_loaded('bcmath')) { + $this->markTestSkipped('The BC MATH extension is not available.'); + } + + $factory = $this->getMockBuilder(PlatformFactory::CLASS) + ->setMethods(['isExtensionLoaded']) + ->getMock(); + + $factory->expects($this->exactly(2)) + ->method('isExtensionLoaded') + ->will($this->returnValueMap([ + ['gmp', false], + ['bcmath', true] + ])); + + $this->assertInstanceOf('Protobuf\Binary\Platform\BcNegativeEncoder', $factory->getNegativeEncoder()); + } + + public function testGetInvalidNegativeEncoder() + { + $factory = $this->getMockBuilder(PlatformFactory::CLASS) + ->setMethods(['isExtensionLoaded']) + ->getMock(); + + $factory->expects($this->exactly(2)) + ->method('isExtensionLoaded') + ->will($this->returnValueMap([ + ['gmp', false], + ['bcmath', false] + ])); + + $this->assertInstanceOf('Protobuf\Binary\Platform\InvalidNegativeEncoder', $factory->getNegativeEncoder()); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php b/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php new file mode 100644 index 0000000..375372c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php @@ -0,0 +1,333 @@ +writer = new StreamWriter($this->config); + $this->calculator = new SizeCalculator($this->config); + } + + public function varintProvider() + { + return [ + [1], + [-1], + [123456789], + [-123456789], + [123456789123456789], + [-123456789123456789] + ]; + } + + /** + * @dataProvider varintProvider + */ + public function testComputeVarintSize($value) + { + $stream = Stream::create(); + + $this->writer->writeVarint($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeVarintSize($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerZigZag32() + { + return [ + [1], + [-1], + [123456789], + [-123456789] + ]; + } + + /** + * @dataProvider providerZigZag32 + */ + public function testComputeZigZag32Size($value) + { + $stream = Stream::create(); + + $this->writer->writeZigZag32($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeZigzag32Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerZigZag64() + { + return [ + [1], + [-1], + [123456789], + [-123456789] + ]; + } + + /** + * @dataProvider providerZigZag64 + */ + public function testComputeZigZag64Size($value) + { + $stream = Stream::create(); + + $this->writer->writeZigZag64($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeZigzag64Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerSFixed32() + { + return [ + [1], + [-1], + [123456789], + [-123456789] + ]; + } + + /** + * @dataProvider providerSFixed32 + */ + public function testComputeSFixed32Size($value) + { + $stream = Stream::create(); + + $this->writer->writeSFixed32($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeSFixed32Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerFixed32() + { + return [ + [1], + [1000], + [123456789] + ]; + } + + /** + * @dataProvider providerFixed32 + */ + public function testComputeFixed32Size($value) + { + $stream = Stream::create(); + + $this->writer->writeFixed32($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeFixed32Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerSFixed64() + { + return [ + [1], + [-1], + [123456789], + [-123456789], + [123456789123456789], + [-123456789123456789] + ]; + } + + /** + * @dataProvider providerSFixed64 + */ + public function testComputeSFixed64Size($value) + { + $stream = Stream::create(); + + $this->writer->writeSFixed64($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeSFixed64Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerFixed64() + { + return [ + [1], + [123456789], + [123456789123456789] + ]; + } + + /** + * @dataProvider providerFixed64 + */ + public function testComputeFixed64Size($value) + { + $stream = Stream::create(); + + $this->writer->writeFixed64($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeFixed64Size($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerFloat() + { + return [ + [1.1], + [-1.1], + [123456789.2], + [-123456789.2], + [12345.123046875], + [-12345.123046875] + ]; + } + + /** + * @dataProvider providerFloat + */ + public function testComputeFloatSize($value) + { + $stream = Stream::create(); + + $this->writer->writeFloat($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeFloatSize($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerDouble() + { + return [ + [1.1], + [-1.1], + [12345.12345], + [-12345.12345], + [123456789.12345], + [-123456789.12345] + ]; + } + + /** + * @dataProvider providerDouble + */ + public function testComputeDoubleSize($value) + { + $stream = Stream::create(); + + $this->writer->writeDouble($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeDoubleSize($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerBool() + { + return [ + [1], + [0], + [true], + [false] + ]; + } + + /** + * @dataProvider providerBool + */ + public function testComputeBoolSize($value) + { + $stream = Stream::create(); + + $this->writer->writeBool($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeBoolSize($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerString() + { + return [ + ['foo'], + ['http://www.lipsum.com/'], + ['Neque porro quisquam est qui dolorem ipsum quia dolor sit amet'] + ]; + } + + /** + * @dataProvider providerString + */ + public function testComputeStringSize($value) + { + $stream = Stream::create(); + + $this->writer->writeString($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeStringSize($value); + + $this->assertEquals($streamSize, $actualSize); + } + + public function providerByteStream() + { + return [ + [Stream::create('foo')], + [Stream::create('http://www.lipsum.com/')], + [Stream::create('Neque porro quisquam est qui dolorem ipsum quia dolor sit amet')] + ]; + } + + /** + * @dataProvider providerByteStream + */ + public function testComputeByteStreamSize($value) + { + $stream = Stream::create(); + + $this->writer->writeByteStream($stream, $value); + + $streamSize = $stream->getSize(); + $actualSize = $this->calculator->computeByteStreamSize($value); + + $this->assertEquals($streamSize, $actualSize); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php new file mode 100644 index 0000000..9b1904c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php @@ -0,0 +1,97 @@ +readVarint($stream); + $tag = WireFormat::getTagFieldNumber($key); + $wire = WireFormat::getTagWireType($key); + + $this->assertEquals($expectedTag, $tag); + $this->assertEquals($expectedWire, $wire); + } + + public function testReadSimpleMessage() + { + $stream = Stream::wrap($this->getProtoContent('simple.bin')); + $reader = new StreamReader($this->config); + + $this->assertNextTagWire($reader, $stream, 1, WireFormat::WIRE_FIXED64); + $this->assertEquals(123456789.12345, $reader->readDouble($stream)); + + $this->assertNextTagWire($reader, $stream, 2, WireFormat::WIRE_FIXED32); + $this->assertEquals(12345.123046875, $reader->readFloat($stream)); + + $this->assertNextTagWire($reader, $stream, 3, WireFormat::WIRE_VARINT); + $this->assertEquals(-123456789123456789, $reader->readVarint($stream)); + + $this->assertNextTagWire($reader, $stream, 4, WireFormat::WIRE_VARINT); + $this->assertEquals(123456789123456789, $reader->readVarint($stream)); + + $this->assertNextTagWire($reader, $stream, 5, WireFormat::WIRE_VARINT); + $this->assertEquals(-123456789, $reader->readVarint($stream)); + + $this->assertNextTagWire($reader, $stream, 6, WireFormat::WIRE_FIXED64); + $this->assertEquals(123456789123456789, $reader->readFixed64($stream)); + + $this->assertNextTagWire($reader, $stream, 7, WireFormat::WIRE_FIXED32); + $this->assertEquals(123456789, $reader->readFixed32($stream)); + + $this->assertNextTagWire($reader, $stream, 8, WireFormat::WIRE_VARINT); + $this->assertEquals(true, $reader->readBool($stream)); + + $this->assertNextTagWire($reader, $stream, 9, WireFormat::WIRE_LENGTH); + $this->assertEquals('foo', $reader->readString($stream)); + + $this->assertNextTagWire($reader, $stream, 12, WireFormat::WIRE_LENGTH); + $this->assertInstanceOf('Protobuf\Stream', ($byteStream = $reader->readByteStream($stream))); + $this->assertEquals('bar', (string) $byteStream); + + $this->assertNextTagWire($reader, $stream, 13, WireFormat::WIRE_VARINT); + $this->assertEquals(123456789, $reader->readVarint($stream)); + + $this->assertNextTagWire($reader, $stream, 15, WireFormat::WIRE_FIXED32); + $this->assertEquals(-123456789, $reader->readSFixed32($stream)); + + $this->assertNextTagWire($reader, $stream, 16, WireFormat::WIRE_FIXED64); + $this->assertEquals(-123456789123456789, $reader->readSFixed64($stream)); + + $this->assertNextTagWire($reader, $stream, 17, WireFormat::WIRE_VARINT); + $this->assertEquals(-123456789, $reader->readZigzag($stream)); + + $this->assertNextTagWire($reader, $stream, 18, WireFormat::WIRE_VARINT); + $this->assertEquals(-123456789123456789, $reader->readZigzag($stream)); + } + + /** + * @expectedException RuntimeException + * @expectedExceptionMessage Groups are deprecated in Protocol Buffers and unsupported. + */ + public function testReadUnknownWireFormatGroupException() + { + $stream = Stream::create($this->getProtoContent('simple.bin')); + $reader = new StreamReader($this->config); + + $reader->readUnknown($stream, WireFormat::WIRE_GROUP_START); + } + + /** + * @expectedException RuntimeException + * @expectedExceptionMessage Unsupported wire type '-1' while reading unknown field. + */ + public function testReadUnknownWireFormatException() + { + $stream = Stream::create($this->getProtoContent('simple.bin')); + $reader = new StreamReader($this->config); + + $reader->readUnknown($stream, -1); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php b/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php new file mode 100644 index 0000000..63376b8 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php @@ -0,0 +1,80 @@ +config); + $binary = $this->getProtoContent('simple.bin'); + + $writer->writeVarint($stream, WireFormat::getFieldKey(1, WireFormat::WIRE_FIXED64)); + $writer->writeDouble($stream, 123456789.12345); + + $writer->writeVarint($stream, WireFormat::getFieldKey(2, WireFormat::WIRE_FIXED32)); + $writer->writeFloat($stream, 12345.123046875); + + $writer->writeVarint($stream, WireFormat::getFieldKey(3, WireFormat::WIRE_VARINT)); + $writer->writeVarint($stream, -123456789123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(4, WireFormat::WIRE_VARINT)); + $writer->writeVarint($stream, 123456789123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(5, WireFormat::WIRE_VARINT)); + $writer->writeVarint($stream, -123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(6, WireFormat::WIRE_FIXED64)); + $writer->writeFixed64($stream, 123456789123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(7, WireFormat::WIRE_FIXED32)); + $writer->writeFixed32($stream, 123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(8, WireFormat::WIRE_VARINT)); + $writer->writeVarint($stream, 1); + + $writer->writeVarint($stream, WireFormat::getFieldKey(9, WireFormat::WIRE_LENGTH)); + $writer->writeString($stream, 'foo'); + + $writer->writeVarint($stream, WireFormat::getFieldKey(12, WireFormat::WIRE_LENGTH)); + $writer->writeByteStream($stream, Stream::wrap('bar')); + + $writer->writeVarint($stream, WireFormat::getFieldKey(13, WireFormat::WIRE_VARINT)); + $writer->writeVarint($stream, 123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(15, WireFormat::WIRE_FIXED32)); + $writer->writeSFixed32($stream, -123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(16, WireFormat::WIRE_FIXED64)); + $writer->writeSFixed64($stream, -123456789123456789); + + $writer->writeVarint($stream, WireFormat::getFieldKey(17, WireFormat::WIRE_VARINT)); + $writer->writeZigzag($stream, -123456789, 32); + + $writer->writeVarint($stream, WireFormat::getFieldKey(18, WireFormat::WIRE_VARINT)); + $writer->writeZigzag($stream, -123456789123456789, 64); + + $this->assertEquals($binary, (string)$stream); + } + + public function testWriteStream() + { + $source = Stream::create(); + $target = Stream::create(); + $writer = new StreamWriter($this->config); + + $writer->writeVarint($source, WireFormat::getFieldKey(1, WireFormat::WIRE_FIXED64)); + $writer->writeDouble($source, 123456789.12345); + + $source->seek(0); + $writer->writeStream($target, $source); + + $this->assertEquals((string) $source, (string) $target); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php b/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php new file mode 100644 index 0000000..d6be507 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php @@ -0,0 +1,43 @@ +configuration = new Configuration(); + } + + public function testGetAndSetPlatformFactory() + { + $mock = $this->getMock('Protobuf\Binary\Platform\PlatformFactory'); + $factory = $this->configuration->getPlatformFactory(); + + $this->assertInstanceOf('Protobuf\Binary\Platform\PlatformFactory', $factory); + + $this->configuration->setPlatformFactory($mock); + + $this->assertSame($mock, $this->configuration->getPlatformFactory()); + } + + public function testGetAndSetExtensionRegistry() + { + $mock = $this->getMock('Protobuf\Extension\ExtensionRegistry'); + $registry = $this->configuration->getExtensionRegistry(); + + $this->assertInstanceOf('Protobuf\Extension\ExtensionRegistry', $registry); + $this->assertSame($registry, $this->configuration->getExtensionRegistry()); + + $this->configuration->setExtensionRegistry($mock); + + $this->assertSame($mock, $this->configuration->getExtensionRegistry()); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php b/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php new file mode 100644 index 0000000..b63bb47 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php @@ -0,0 +1,63 @@ +collection = new EnumCollection(); + } + + public function testCreateEnumCollection() + { + $enum1 = $this->getMock('Protobuf\Enum', [], ['E1', 1]); + $enum2 = $this->getMock('Protobuf\Enum', [], ['E2', 2]); + + $collection = new EnumCollection([$enum1, $enum2]); + + $this->assertCount(2, $collection); + $this->assertEquals([$enum1, $enum2], $collection->getArrayCopy()); + } + + public function testAddEnum() + { + $this->assertCount(0, $this->collection); + + $enum1 = $this->getMock('Protobuf\Enum', [], ['E1', 1]); + $enum2 = $this->getMock('Protobuf\Enum', [], ['E2', 2]); + + $this->collection[] = $enum1; + + $this->collection->add($enum2); + + $this->assertCount(2, $this->collection); + $this->assertEquals([$enum1, $enum2], $this->collection->getArrayCopy()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\EnumCollection::offsetSet must be a \Protobuf\Enum, stdClass given + */ + public function testInvalidArgumentExceptionOffsetSetObject() + { + $this->collection[] = new \stdClass(); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\EnumCollection::offsetSet must be a \Protobuf\Enum, integer given + */ + public function testInvalidArgumentExceptionOffsetSetInteger() + { + $this->collection[] = 123; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/EnumTest.php b/vendor/protobuf-php/protobuf/tests/EnumTest.php new file mode 100644 index 0000000..11c1d85 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/EnumTest.php @@ -0,0 +1,20 @@ +getMockBuilder(Enum::CLASS) + ->setConstructorArgs(['FOO', 1]) + ->setMethods(['FOO']) + ->getMock(); + + $this->assertEquals(1, $mock->value()); + $this->assertEquals('FOO', $mock->name()); + $this->assertEquals('FOO', $mock->__toString()); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php new file mode 100644 index 0000000..6c6c835 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php @@ -0,0 +1,62 @@ +assertCount(0, $extensions); + + $extensions->put($extension, $animal); + + $this->assertCount(1, $extensions); + $this->assertTrue($extensions->contains($extension)); + $this->assertSame($animal, $extensions->offsetGet($extension)); + } + + public function testAddMergeExtensions() + { + $animal1 = new Cat(); + $animal2 = new Cat(); + $callback = function () {}; + $extensions = new ExtensionFieldMap(Animal::CLASS); + $extension = new ExtensionField(Animal::CLASS, 'animal', 100, $callback, $callback, $callback); + + $animal1->setDeclawed(true); + + $extensions->add($extension, $animal1); + $this->assertSame($animal1, $extensions->offsetGet($extension)); + + $animal2->setDeclawed(false); + + $extensions->add($extension, $animal2); + $this->assertTrue($animal2->getDeclawed()); + $this->assertSame($animal2, $extensions->offsetGet($extension)); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Invalid extendee, ProtobufTest\Protos\Extension\Animal is expected but ProtobufTest\Protos\Extension\Cat given + */ + public function testInvalidArgumentExceptionExtendee() + { + $animal = new Cat(); + $extensions = new ExtensionFieldMap(Animal::CLASS); + $extension = new ExtensionField(Cat::CLASS, 'animal', 200, function () {}, function () {}, function () {}); + + $extensions->put($extension, $animal); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php new file mode 100644 index 0000000..543e149 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php @@ -0,0 +1,28 @@ +assertNull($registry->findByNumber(Animal::CLASS, 100)); + + $registry->add($extension); + + $this->assertSame($extension, $registry->findByNumber(Animal::CLASS, 100)); + + $registry->clear(); + + $this->assertNull($registry->findByNumber(Animal::CLASS, 100)); + } +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/FieldTest.php b/vendor/protobuf-php/protobuf/tests/FieldTest.php new file mode 100644 index 0000000..9d88ab2 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/FieldTest.php @@ -0,0 +1,93 @@ +assertEquals($expected, Field::getPhpType($type)); + } + + public function labelNameProvider() + { + return [ + [-1, null], + [Field::LABEL_OPTIONAL, 'optional'], + [Field::LABEL_REQUIRED, 'required'], + [Field::LABEL_REPEATED, 'repeated'] + ]; + } + + /** + * @dataProvider labelNameProvider + */ + public function testGetLabelName($type, $expected) + { + $this->assertEquals($expected, Field::getLabelName($type)); + } + + public function typeNameProvider() + { + return [ + [-1, null], + [Field::TYPE_DOUBLE, 'double'], + [Field::TYPE_FLOAT, 'float'], + [Field::TYPE_INT64, 'int64'], + [Field::TYPE_UINT64, 'uint64'], + [Field::TYPE_INT32, 'int32'], + [Field::TYPE_FIXED64, 'fixed64'], + [Field::TYPE_FIXED32, 'fixed32'], + [Field::TYPE_BOOL, 'bool'], + [Field::TYPE_STRING, 'string'], + [Field::TYPE_MESSAGE, 'message'], + [Field::TYPE_BYTES, 'bytes'], + [Field::TYPE_UINT32, 'uint32'], + [Field::TYPE_ENUM, 'enum'], + [Field::TYPE_SFIXED32, 'sfixed32'], + [Field::TYPE_SFIXED64, 'sfixed64'], + [Field::TYPE_SINT32, 'sint32'], + [Field::TYPE_SINT64, 'sint64'], + ]; + } + + /** + * @dataProvider typeNameProvider + */ + public function testGetTypeName($type, $expected) + { + $this->assertEquals($expected, Field::getTypeName($type)); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php b/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php new file mode 100644 index 0000000..f414d1d --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php @@ -0,0 +1,63 @@ +collection = new MessageCollection(); + } + + public function testCreateMessageCollection() + { + $messge1 = $this->getMock(Message::CLASS); + $messge2 = $this->getMock(Message::CLASS); + + $collection = new MessageCollection([$messge1, $messge2]); + + $this->assertCount(2, $collection); + $this->assertEquals([$messge1, $messge2], $collection->getArrayCopy()); + } + + public function testAddMessage() + { + $this->assertCount(0, $this->collection); + + $messge1 = $this->getMock(Message::CLASS); + $messge2 = $this->getMock(Message::CLASS); + + $this->collection[] = $messge1; + + $this->collection->add($messge2); + + $this->assertCount(2, $this->collection); + $this->assertEquals([$messge1, $messge2], $this->collection->getArrayCopy()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\MessageCollection::offsetSet must implement interface \Protobuf\Message, stdClass given + */ + public function testInvalidArgumentExceptionOffsetSetObject() + { + $this->collection[] = new \stdClass(); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\MessageCollection::offsetSet must implement interface \Protobuf\Message, integer given + */ + public function testInvalidArgumentExceptionOffsetSetInteger() + { + $this->collection[] = 123; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php b/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php new file mode 100644 index 0000000..111c923 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php @@ -0,0 +1,115 @@ +getMock(Message::CLASS); + $config = new Configuration(); + $serializer = new MessageSerializer($config); + $stream = Stream::create(); + + $message->expects($this->once()) + ->method('toStream') + ->willReturn($stream) + ->with($this->equalTo($config)); + + $this->assertInstanceOf('Protobuf\Serializer', $serializer); + $this->assertSame($stream, $serializer->serialize($message)); + } + + public function testUnserializeMessage() + { + $class = FooStub_MessageSerializerTest::CLASS; + $config = new Configuration(); + $serializer = new MessageSerializer($config); + $stream = Stream::create(); + + FooStub_MessageSerializerTest::$calls = []; + + $this->assertInstanceOf($class, $serializer->unserialize($class, $stream)); + + $this->assertCount(1, FooStub_MessageSerializerTest::$calls); + $this->assertSame($stream, FooStub_MessageSerializerTest::$calls[0][0]); + $this->assertSame($config, FooStub_MessageSerializerTest::$calls[0][1]); + } + + public function testGetConfiguration() + { + $config1 = new Configuration(); + $config2 = Configuration::getInstance(); + + $serializer1 = new MessageSerializer($config1); + $serializer2 = new MessageSerializer(); + + $this->assertSame($config1, $serializer1->getConfiguration()); + $this->assertSame($config2, $serializer2->getConfiguration()); + } +} + +class FooStub_MessageSerializerTest extends \Protobuf\AbstractMessage +{ + public static $calls = []; + + /** + * {@inheritdoc} + */ + public function __construct($stream = null, \Protobuf\Configuration $configuration = null) + { + self::$calls[] = func_get_args(); + } + + public static function fromStream($stream, \Protobuf\Configuration $configuration = null) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function extensions() + { + throw new \BadMethodCallException(__METHOD__); + } + + public function unknownFieldSet() + { + throw new \BadMethodCallException(__METHOD__); + } + + public function toStream(\Protobuf\Configuration $configuration = null) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function writeTo(\Protobuf\WriteContext $context) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function readFrom(\Protobuf\ReadContext $context) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function serializedSize(\Protobuf\ComputeSizeContext $context) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function merge(\Protobuf\Message $message) + { + throw new \BadMethodCallException(__METHOD__); + } + + public function clear() + { + throw new \BadMethodCallException(__METHOD__); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php b/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php new file mode 100644 index 0000000..39388e1 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php @@ -0,0 +1,235 @@ +tell(); + $escaped = '"' . $value . '"'; + + $value->seek($tell); + } + + $message->$setter($value); + + $encoded = $message->toStream(); + $expected = $this->executeProtoc("$field: $escaped", $class, $proto); + + $this->assertEquals(bin2hex($expected), bin2hex($encoded), "Encoding $field with value $value"); + } + + /** + * @dataProvider simpleMessageProvider + */ + public function testDecodeSimpleMessageComparingTypesWithProtoc($field, $value) + { + $escaped = $value; + $proto = 'simple'; + $getter = 'get' . ucfirst($field); + $class = 'ProtobufTest.Protos.Simple'; + + if (is_string($value)) { + $escaped = '"' . $value . '"'; + } + + if ($value instanceof \Protobuf\Stream) { + $tell = $value->tell(); + $escaped = '"' . $value . '"'; + + $value->seek($tell); + } + + $binary = $this->executeProtoc("$field: $escaped", $class, $proto); + $message = Simple::fromStream(Stream::wrap($binary)); + $result = $message->$getter(); + + // Hack the comparison for float precision + if (is_float($value)) { + $precision = strlen($value) - strpos($value, '.'); + $result = round($result, $precision); + } + + if ($result instanceof \Protobuf\Stream) { + $result = (string) $result; + } + + $this->assertEquals($value, $result, "Decoding $field with value $value"); + } + + public function testEncodeAndDecodeEnumComparingWithProtoc() + { + $proto = 'complex'; + $complex = new Complex(); + $value = Complex\Enum::FOO(); + $class = 'ProtobufTest.Protos.Complex'; + + $complex->setEnum($value); + + $encoded = $complex->toStream(); + $expected = $this->executeProtoc("enum: FOO", $class, $proto); + $decoded = Complex::fromStream(Stream::wrap($expected)); + + $this->assertInstanceOf(Complex::CLASS, $decoded); + $this->assertEquals(bin2hex($expected), bin2hex($encoded)); + $this->assertEquals(Complex\Enum::FOO(), $decoded->getEnum()); + } + + public function testEncodeAndDecodeNestedMessageComparingWithProtoc() + { + $proto = 'complex'; + $complex = new Complex(); + $nested = new Complex\Nested(); + $input = 'nested { foo: "FOO" }'; + $class = 'ProtobufTest.Protos.Complex'; + + $nested->setFoo('FOO'); + $complex->setNested($nested); + + $encoded = $complex->toStream(); + $expected = $this->executeProtoc($input, $class, $proto); + $decoded = Complex::fromStream(Stream::wrap($expected)); + + $this->assertInstanceOf(Complex::CLASS, $decoded); + $this->assertInstanceOf(Complex\Nested::CLASS, $complex->getNested()); + $this->assertEquals(bin2hex($encoded), bin2hex($expected)); + $this->assertEquals($complex->getNested()->getFoo(), 'FOO'); + } + + protected function executeProtoc($input, $class, $proto) + { + $path = __DIR__ . '/Resources'; + $command = "echo '$input' | protoc --encode=$class -I$path $path/$proto.proto"; + $output = null; + $exitCode = null; + + exec($command, $output, $exitCode); + + if ($exitCode !== 0) { + $this->fail("Fail to run protoc : [$command]"); + } + + return implode(PHP_EOL, $output); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/Protos/.gitignore b/vendor/protobuf-php/protobuf/tests/Protos/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Protos/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin b/vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin new file mode 100644 index 0000000000000000000000000000000000000000..d193042b4000819d528e48bacde38ab35866e2a4 GIT binary patch literal 127 zcmd;b;^Oei&&X47$xjt%7LXFk0&?_H@>3nsa}zUj^pf*)mH4>042_Jz$k0fDQHh_6 z+tkz)$Tue|tQIwH^fdK##T>+&4 literal 0 HcmV?d00001 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/extension.bin b/vendor/protobuf-php/protobuf/tests/Resources/extension.bin new file mode 100644 index 0000000..f87f7ec --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/extension.bin @@ -0,0 +1,2 @@ + +FIRSTSECOND \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/extension.proto b/vendor/protobuf-php/protobuf/tests/Resources/extension.proto new file mode 100644 index 0000000..d80c71d --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/extension.proto @@ -0,0 +1,93 @@ +syntax = "proto2"; + +package ProtobufTest.Protos.Extension; + +option java_multiple_files = true; + +// Animal + +message Animal +{ + extensions 100 to max; + + enum Type + { + CAT = 1; + DOG = 2; + } + + required Type type = 1; +} + +extend Animal +{ + optional string habitat = 200; +} + +message Cat +{ + extend Animal + { + optional Cat animal = 100; + } + + optional bool declawed = 1; +} + +message Dog +{ + extend Animal + { + optional Dog animal = 102; + } + + optional uint32 bones_buried = 2; +} + +// command + +message Command +{ + extensions 100 to max; + + enum CommandType + { + VERSION = 1; + LOGIN = 2; + } + + required CommandType type = 1; +} + +extend Command +{ + optional bool verbose = 200 [default = false]; +} + +message VersionCommand +{ + extend Command + { + optional VersionCommand cmd = 100; + } + + enum Protocol + { + V1 = 1; + V2 = 2; + } + + required Protocol protocol = 1; + required fixed32 version = 2; +} + +message LoginCommand +{ + extend Command + { + optional LoginCommand cmd = 101; + } + + required string username = 1; + required string password = 2; +} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin b/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin new file mode 100644 index 0000000..f6c1d02 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto b/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto new file mode 100644 index 0000000..9a3cee0 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto @@ -0,0 +1,30 @@ +syntax = "proto2"; + +package ProtobufTest.Protos; + +import "php.proto"; + +option (php.package) = "ProtobufTest.Protos.Options"; + +message ParentMessage +{ + enum InnerEnum + { + VALUE1 = 1; + VALUE2 = 2; + } + + message InnerMessage + { + enum InnerMessageEnum + { + VALUE1 = 1; + VALUE2 = 2; + } + + required InnerMessageEnum enum = 1; + } + + required InnerEnum enum = 1; + repeated InnerMessage inner = 2; +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin new file mode 100644 index 0000000..2d030b4 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin @@ -0,0 +1 @@ +*bin1*bin2*bin3 \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin new file mode 100644 index 0000000000000000000000000000000000000000..b53e8644fb056f218aaad17ac253142294936594 GIT binary patch literal 4 LcmXqDFkl1#0VM!p literal 0 HcmV?d00001 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin new file mode 100644 index 0000000..ee2ac36 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt new file mode 100644 index 0000000..a4500b9 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt @@ -0,0 +1,3 @@ +int: 1 +int: 2 +int: 3 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin new file mode 100644 index 0000000..db41276 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt new file mode 100644 index 0000000..ba35edf --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt @@ -0,0 +1,9 @@ +nested { + id: 1 +} +nested { + id: 2 +} +nested { + id: 3 +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin new file mode 100644 index 0000000000000000000000000000000000000000..5ba7f8509a1596b5ffd4e19d2c75a006fc9752bb GIT binary patch literal 4 LcmcCwVqgRS0P_Go literal 0 HcmV?d00001 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin new file mode 100644 index 0000000..e6314fc --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin @@ -0,0 +1 @@ +" \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin new file mode 100644 index 0000000..c6acd32 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin @@ -0,0 +1,4 @@ + +one +two +three \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt new file mode 100644 index 0000000..4e20498 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt @@ -0,0 +1,3 @@ +string: "one" +string: "two" +string: "three" diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto b/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto new file mode 100644 index 0000000..38eba92 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto @@ -0,0 +1,23 @@ +syntax = "proto2"; + +package ProtobufTest.Protos; + +message Repeated { + + message Nested { + optional int32 id = 1; + } + + enum Enum { + FOO = 0; + BAR = 1; + } + + repeated string string = 1; + repeated int32 int = 2; + repeated Nested nested = 3; + repeated int32 packed = 4 [packed=true]; + repeated bytes bytes = 5; + repeated Enum enum = 6; + repeated Enum packed_enum = 7 [packed=true]; +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/service.proto b/vendor/protobuf-php/protobuf/tests/Resources/service.proto new file mode 100644 index 0000000..30296af --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/service.proto @@ -0,0 +1,24 @@ +package ProtobufTest.Protos.Service; + +// option java_package = "ProtobufTest.Protos.Service"; +// option java_outer_classname = "ServicePB"; + +message SearchRequest { + required string query = 1; + optional int32 page_number = 2; + optional int32 result_per_page = 3 [default = 10]; +} + +message SearchResponse { + repeated Result result = 1; +} + +message Result { + required string url = 1; + optional string title = 2; + repeated string snippets = 3; +} + +service SearchService { + rpc search (SearchRequest) returns (SearchResponse); +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.bin b/vendor/protobuf-php/protobuf/tests/Resources/simple.bin new file mode 100644 index 0000000..eff524c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/simple.bin @@ -0,0 +1 @@ + i~T4oA~@FŖ٤ (1_ЬK=[@Jfoobbarh:}2/SdIuͶ \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.proto b/vendor/protobuf-php/protobuf/tests/Resources/simple.proto new file mode 100644 index 0000000..841081b --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/simple.proto @@ -0,0 +1,21 @@ +syntax = "proto2"; + +package ProtobufTest.Protos; + +message Simple { + optional double double = 1; + optional float float = 2; + optional int64 int64 = 3; + optional uint64 uint64 = 4; + optional int32 int32 = 5; + optional fixed64 fixed64 = 6; + optional fixed32 fixed32 = 7; + optional bool bool = 8; + optional string string = 9; + optional bytes bytes = 12; + optional uint32 uint32 = 13; + optional sfixed32 sfixed32 = 15; + optional sfixed64 sfixed64 = 16; + optional sint32 sint32 = 17; + optional sint64 sint64 = 18; +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.txt b/vendor/protobuf-php/protobuf/tests/Resources/simple.txt new file mode 100644 index 0000000..26799bb --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/simple.txt @@ -0,0 +1,15 @@ +double: 123456789.12345 +float: 12345.123 +int64: -123456789123456789 +uint64: 123456789123456789 +int32: -123456789 +fixed64: 123456789123456789 +fixed32: 123456789 +bool: 1 +string: "foo" +bytes: "bar" +uint32: 123456789 +sfixed32: -123456789 +sfixed64: -123456789123456789 +sint32: -123456789 +sint64: -123456789123456789 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.bin b/vendor/protobuf-php/protobuf/tests/Resources/tree.bin new file mode 100644 index 0000000..f144043 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/tree.bin @@ -0,0 +1,6 @@ + +/Users + /Users/fabio +/Users + /Users/admin +/Users \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.proto b/vendor/protobuf-php/protobuf/tests/Resources/tree.proto new file mode 100644 index 0000000..69f1069 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/tree.proto @@ -0,0 +1,9 @@ +syntax = "proto2"; + +package ProtobufTest.Protos.Tree; + +message Node { + required string path = 1; + repeated Node children = 2; + optional Node parent = 3; +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.txt b/vendor/protobuf-php/protobuf/tests/Resources/tree.txt new file mode 100644 index 0000000..fb3a82c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/tree.txt @@ -0,0 +1,13 @@ +path: "\/Users" +children { + path: "\/Users\/fabio" + parent { + path: "\/Users" + } +} +children { + path: "\/Users\/admin" + parent { + path: "\/Users" + } +} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin b/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin new file mode 100644 index 0000000..eff524c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin @@ -0,0 +1 @@ + i~T4oA~@FŖ٤ (1_ЬK=[@Jfoobbarh:}2/SdIuͶ \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto b/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto new file mode 100644 index 0000000..833ff8c --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto @@ -0,0 +1,7 @@ +syntax = "proto2"; + +package ProtobufTest.Protos; + +message Unrecognized { + +} diff --git a/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php b/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php new file mode 100644 index 0000000..77bbaff --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php @@ -0,0 +1,65 @@ +collection = new ScalarCollection(); + } + + public function testCreateScalarCollection() + { + $collection = new ScalarCollection([1,2]); + + $this->assertCount(2, $collection); + $this->assertEquals([1, 2], $collection->getArrayCopy()); + } + + public function testAddValue() + { + $this->assertCount(0, $this->collection); + + $this->collection[] = 1; + + $this->collection->add(2); + + $this->assertCount(2, $this->collection); + $this->assertEquals([1, 2], $this->collection->getArrayCopy()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 1 passed to Protobuf\ScalarCollection::add must be a scalar value, stdClass given + */ + public function testInvalidArgumentExceptionAddObject() + { + $this->collection->add(new \stdClass()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\ScalarCollection::offsetSet must be a scalar value, stdClass given + */ + public function testInvalidArgumentExceptionOffsetSetObject() + { + $this->collection[] = new \stdClass(); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\ScalarCollection::offsetSet must be a scalar value, array given + */ + public function testInvalidArgumentExceptionOffsetSetInteger() + { + $this->collection[] = []; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php b/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php new file mode 100644 index 0000000..410e527 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php @@ -0,0 +1,612 @@ +config->createComputeSizeContext(); + $expectedSize = mb_strlen($expectedContent, '8bit'); + $actualSize = $message->serializedSize($context); + + $this->assertEquals($expectedSize, $actualSize); + } + + public function testWriteSimpleMessage() + { + $simple = new Simple(); + + $simple->setBool(true); + $simple->setBytes("bar"); + $simple->setString("foo"); + $simple->setFloat(12345.123); + $simple->setUint32(123456789); + $simple->setInt32(-123456789); + $simple->setFixed32(123456789); + $simple->setSint32(-123456789); + $simple->setSfixed32(-123456789); + $simple->setDouble(123456789.12345); + $simple->setInt64(-123456789123456789); + $simple->setUint64(123456789123456789); + $simple->setFixed64(123456789123456789); + $simple->setSint64(-123456789123456789); + $simple->setSfixed64(-123456789123456789); + + $expected = $this->getProtoContent('simple.bin'); + $actual = $simple->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $simple); + } + + public function testWriteSimpleMessageTwice() + { + $simple = new Simple(); + + $simple->setBool(true); + $simple->setBytes("bar"); + $simple->setString("foo"); + $simple->setFloat(12345.123); + $simple->setUint32(123456789); + $simple->setInt32(-123456789); + $simple->setFixed32(123456789); + $simple->setSint32(-123456789); + $simple->setSfixed32(-123456789); + $simple->setDouble(123456789.12345); + $simple->setInt64(-123456789123456789); + $simple->setUint64(123456789123456789); + $simple->setFixed64(123456789123456789); + $simple->setSint64(-123456789123456789); + $simple->setSfixed64(-123456789123456789); + + $expected = $this->getProtoContent('simple.bin'); + $actual1 = $simple->toStream(); + $actual2 = $simple->toStream(); + + $this->assertEquals($expected, (string) $actual1); + $this->assertEquals($expected, (string) $actual2); + } + + public function testWriteRepeatedString() + { + $repeated = new Repeated(); + + $repeated->addString('one'); + $repeated->addString('two'); + $repeated->addString('three'); + + $expected = $this->getProtoContent('repeated-string.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedInt32() + { + $repeated = new Repeated(); + + $repeated->addInt(1); + $repeated->addInt(2); + $repeated->addInt(3); + + $expected = $this->getProtoContent('repeated-int32.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedNested() + { + $repeated = new Repeated(); + $nested1 = new Repeated\Nested(); + $nested2 = new Repeated\Nested(); + $nested3 = new Repeated\Nested(); + + $nested1->setId(1); + $nested2->setId(2); + $nested3->setId(3); + + $repeated->addNested($nested1); + $repeated->addNested($nested2); + $repeated->addNested($nested3); + + $expected = $this->getProtoContent('repeated-nested.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedPacked() + { + $repeated = new Repeated(); + + $repeated->addPacked(1); + $repeated->addPacked(2); + $repeated->addPacked(3); + + $expected = $this->getProtoContent('repeated-packed.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedBytes() + { + $repeated = new Repeated(); + + $repeated->addBytes('bin1'); + $repeated->addBytes('bin2'); + $repeated->addBytes('bin3'); + + $expected = $this->getProtoContent('repeated-bytes.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedEnum() + { + $repeated = new Repeated(); + + $repeated->addEnum(Repeated\Enum::FOO()); + $repeated->addEnum(Repeated\Enum::BAR()); + + $expected = $this->getProtoContent('repeated-enum.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteRepeatedPackedEnum() + { + $repeated = new Repeated(); + + $repeated->addPackedEnum(Repeated\Enum::FOO()); + $repeated->addPackedEnum(Repeated\Enum::BAR()); + + $expected = $this->getProtoContent('repeated-packed-enum.bin'); + $actual = $repeated->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $repeated); + } + + public function testWriteComplexMessage() + { + $phone1 = new PhoneNumber(); + $phone2 = new PhoneNumber(); + $phone3 = new PhoneNumber(); + $book = new AddressBook(); + $person1 = new Person(); + $person2 = new Person(); + + $person1->setId(2051); + $person1->setName('John Doe'); + $person1->setEmail('john.doe@gmail.com'); + + $person2->setId(23); + $person2->setName('Iván Montes'); + $person2->setEmail('drslump@pollinimini.net'); + + $book->addPerson($person1); + $book->addPerson($person2); + + $person1->addPhone($phone1); + $person1->addPhone($phone2); + + $phone1->setNumber('1231231212'); + $phone1->setType(PhoneType::HOME()); + + $phone2->setNumber('55512321312'); + $phone2->setType(PhoneType::MOBILE()); + + $phone3->setNumber('3493123123'); + $phone3->setType(PhoneType::WORK()); + + $person2->addPhone($phone3); + + $expected = $this->getProtoContent('addressbook.bin'); + $actual = $book->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $book); + } + + public function testWritePhpOptionsMessage() + { + $parentMessage = new ParentMessage(); + $innerMessage1 = new ParentMessage\InnerMessage(); + $innerMessage2 = new ParentMessage\InnerMessage(); + + $innerMessage1->setEnum(ParentMessage\InnerMessage\InnerMessageEnum::VALUE1()); + $innerMessage2->setEnum(ParentMessage\InnerMessage\InnerMessageEnum::VALUE2()); + + $parentMessage->addInner($innerMessage1); + $parentMessage->addInner($innerMessage2); + $parentMessage->setEnum(ParentMessage\InnerEnum::VALUE1()); + + $expected = $this->getProtoContent('php_options.bin'); + $actual = $parentMessage->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $parentMessage); + } + + public function testWriteTreeMessage() + { + $root = new Tree\Node(); + $admin = new Tree\Node(); + $fabio = new Tree\Node(); + + $root->setPath('/Users'); + $fabio->setPath('/Users/fabio'); + $admin->setPath('/Users/admin'); + + // avoid recursion + $parent = clone $root; + + $admin->setParent($parent); + $fabio->setParent($parent); + + $root->addChildren($fabio); + $root->addChildren($admin); + + $expected = $this->getProtoContent('tree.bin'); + $actual = $root->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $root); + } + + public function testWriteAnimalExtensionMessage() + { + $cat = new Extension\Cat(); + $animal = new Extension\Animal(); + + $cat->setDeclawed(true); + + $animal->setType(Extension\Animal\Type::CAT()); + $animal->extensions()->put(Extension\Cat::animal(), $cat); + + $expected = $this->getProtoContent('extension-animal-cat.bin'); + $actual = $animal->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $animal); + } + + public function testWriteCommandExtensionMessage() + { + $version = new Extension\VersionCommand(); + $command = new Extension\Command(); + + $version->setVersion(1); + $version->setProtocol(Extension\VersionCommand\Protocol::V1()); + + $command->setType(Extension\Command\CommandType::VERSION()); + $command->extensions()->put(Extension\Extension::verbose(), true); + $command->extensions()->put(Extension\VersionCommand::cmd(), $version); + + $expected = $this->getProtoContent('extension-command-version.bin'); + $actual = $command->toStream(); + + $this->assertEquals($expected, (string) $actual); + $this->assertSerializedMessageSize($expected, $command); + } + + public function testReadSimpleMessage() + { + $binary = $this->getProtoContent('simple.bin'); + $simple = Simple::fromStream($binary); + + $this->assertInstanceOf(Simple::CLASS, $simple); + $this->assertInstanceOf(Stream::CLASS, $simple->getBytes()); + + $this->assertInternalType('bool', $simple->getBool()); + $this->assertInternalType('string', $simple->getString()); + $this->assertInternalType('float', $simple->getFloat(), '', 0.0001); + $this->assertInternalType('integer', $simple->getUint32()); + $this->assertInternalType('integer', $simple->getInt32()); + $this->assertInternalType('integer', $simple->getFixed32()); + $this->assertInternalType('integer', $simple->getSint32()); + $this->assertInternalType('integer', $simple->getSfixed32()); + $this->assertInternalType('float', $simple->getDouble()); + $this->assertInternalType('integer', $simple->getInt64()); + $this->assertInternalType('integer', $simple->getUint64()); + $this->assertInternalType('integer', $simple->getFixed64()); + $this->assertInternalType('integer', $simple->getSint64()); + $this->assertInternalType('integer', $simple->getSfixed64()); + + $this->assertEquals(true, $simple->getBool()); + $this->assertEquals("bar", $simple->getBytes()); + $this->assertEquals("foo", $simple->getString()); + $this->assertEquals(12345.123, $simple->getFloat(), '', 0.0001); + $this->assertEquals(123456789, $simple->getUint32()); + $this->assertEquals(-123456789, $simple->getInt32()); + $this->assertEquals(123456789, $simple->getFixed32()); + $this->assertEquals(-123456789, $simple->getSint32()); + $this->assertEquals(-123456789, $simple->getSfixed32()); + $this->assertEquals(123456789.12345, $simple->getDouble()); + $this->assertEquals(-123456789123456789, $simple->getInt64()); + $this->assertEquals(123456789123456789, $simple->getUint64()); + $this->assertEquals(123456789123456789, $simple->getFixed64()); + $this->assertEquals(-123456789123456789, $simple->getSint64()); + $this->assertEquals(-123456789123456789, $simple->getSfixed64()); + } + + public function testReadRepeatedString() + { + $binary = $this->getProtoContent('repeated-string.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getStringList()); + $this->assertEquals(['one', 'two', 'three'], $repeated->getStringList()->getArrayCopy()); + } + + public function testReadRepeatedInt32() + { + $binary = $this->getProtoContent('repeated-int32.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getIntList()); + $this->assertEquals([1, 2, 3], $repeated->getIntList()->getArrayCopy()); + } + + public function testReadRepeatedNested() + { + $binary = $this->getProtoContent('repeated-nested.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getNestedList()); + $this->assertCount(3, $repeated->getNestedList()); + + $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[0]); + $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[1]); + $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[2]); + + $this->assertEquals(1, $repeated->getNestedList()[0]->getId()); + $this->assertEquals(2, $repeated->getNestedList()[1]->getId()); + $this->assertEquals(3, $repeated->getNestedList()[2]->getId()); + } + + public function testReadRepeatedPacked() + { + $binary = $this->getProtoContent('repeated-packed.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getPackedList()); + $this->assertEquals([1, 2, 3], $repeated->getPackedList()->getArrayCopy()); + } + + public function testReadRepeatedPackedEnum() + { + $enumVal = [Repeated\Enum::FOO(), Repeated\Enum::BAR()]; + $binary = $this->getProtoContent('repeated-packed-enum.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getPackedEnumList()); + $this->assertEquals($enumVal, $repeated->getPackedEnumList()->getArrayCopy()); + } + + public function testReadRepeatedBytes() + { + $binary = $this->getProtoContent('repeated-bytes.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getBytesList()); + $this->assertCount(3, $repeated->getBytesList()); + + $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[0]); + $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[1]); + $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[2]); + + $this->assertEquals('bin1', $repeated->getBytesList()[0]); + $this->assertEquals('bin2', $repeated->getBytesList()[1]); + $this->assertEquals('bin3', $repeated->getBytesList()[2]); + } + + public function testReadRepeatedEnum() + { + $binary = $this->getProtoContent('repeated-enum.bin'); + $repeated = Repeated::fromStream($binary); + + $this->assertInstanceOf(Repeated::CLASS, $repeated); + $this->assertInstanceOf(Collection::CLASS, $repeated->getEnumList()); + $this->assertCount(2, $repeated->getEnumList()); + + $this->assertInstanceOf('Protobuf\Enum', $repeated->getEnumList()[0]); + $this->assertInstanceOf('Protobuf\Enum', $repeated->getEnumList()[1]); + + $this->assertSame(Repeated\Enum::FOO(), $repeated->getEnumList()[0]); + $this->assertSame(Repeated\Enum::BAR(), $repeated->getEnumList()[1]); + } + + public function testReadComplexMessage() + { + $binary = $this->getProtoContent('addressbook.bin'); + $complex = AddressBook::fromStream($binary); + + $this->assertInstanceOf(AddressBook::CLASS, $complex); + $this->assertCount(2, $complex->getPersonList()); + + $person1 = $complex->getPersonList()[0]; + $person2 = $complex->getPersonList()[1]; + + $this->assertInstanceOf(Person::CLASS, $person1); + $this->assertInstanceOf(Person::CLASS, $person2); + + $this->assertEquals($person1->getId(), 2051); + $this->assertEquals($person1->getName(), 'John Doe'); + + $this->assertEquals($person2->getId(), 23); + $this->assertEquals($person2->getName(), 'Iván Montes'); + + $this->assertCount(2, $person1->getPhoneList()); + $this->assertCount(1, $person2->getPhoneList()); + + $this->assertEquals($person1->getPhoneList()[0]->getNumber(), '1231231212'); + $this->assertEquals($person1->getPhoneList()[0]->getType(), PhoneType::HOME()); + + $this->assertEquals($person1->getPhoneList()[1]->getNumber(), '55512321312'); + $this->assertEquals($person1->getPhoneList()[1]->getType(), PhoneType::MOBILE()); + + $this->assertEquals($person2->getPhoneList()[0]->getNumber(), '3493123123'); + $this->assertEquals($person2->getPhoneList()[0]->getType(), PhoneType::WORK()); + } + + public function testReadPhpOptionsMessage() + { + $binary = $this->getProtoContent('php_options.bin'); + $message = ParentMessage::fromStream($binary); + + $this->assertInstanceOf(ParentMessage::CLASS, $message); + $this->assertCount(2, $message->getInnerList()); + $this->assertSame(ParentMessage\InnerEnum::VALUE1(), $message->getEnum()); + + $inner1 = $message->getInnerList()[0]; + $inner2 = $message->getInnerList()[1]; + + $this->assertInstanceOf(ParentMessage\InnerMessage::CLASS, $inner1); + $this->assertInstanceOf(ParentMessage\InnerMessage::CLASS, $inner2); + + $this->assertSame(ParentMessage\InnerMessage\InnerMessageEnum::VALUE1(), $inner1->getEnum()); + $this->assertSame(ParentMessage\InnerMessage\InnerMessageEnum::VALUE2(), $inner2->getEnum()); + } + + public function testReadTreeMessage() + { + $binary = $this->getProtoContent('tree.bin'); + $root = Tree\Node::fromStream($binary); + + $this->assertInstanceOf(Tree\Node::CLASS, $root); + $this->assertCount(2, $root->getChildrenList()); + $this->assertEquals($root->getPath(), '/Users'); + + $node1 = $root->getChildrenList()[0]; + $node2 = $root->getChildrenList()[1]; + + $this->assertInstanceOf(Tree\Node::CLASS, $node1); + $this->assertInstanceOf(Tree\Node::CLASS, $node2); + + $this->assertEquals('/Users/fabio', $node1->getPath()); + $this->assertEquals('/Users/admin', $node2->getPath()); + + $this->assertInstanceOf(Tree\Node::CLASS, $node1->getParent()); + $this->assertInstanceOf(Tree\Node::CLASS, $node2->getParent()); + + $this->assertEquals('/Users', $node1->getParent()->getPath()); + $this->assertEquals('/Users', $node2->getParent()->getPath()); + } + + public function testReadExtensionAnimalMessage() + { + Extension\Extension::registerAllExtensions($this->config->getExtensionRegistry()); + + $binary = $this->getProtoContent('extension-animal-cat.bin'); + $animal = Extension\Animal::fromStream($binary, $this->config); + + $this->assertInstanceOf(Extension\Animal::CLASS, $animal); + $this->assertInstanceOf(Collection::CLASS, $animal->extensions()); + $this->assertEquals(Extension\Animal\Type::CAT(), $animal->getType()); + + $extensions = $animal->extensions(); + $cat = $extensions->get(Extension\Cat::animal()); + + $this->assertInstanceOf(Extension\Cat::CLASS, $cat); + $this->assertTrue($cat->getDeclawed()); + } + + public function testReadExtensionCommandMessage() + { + Extension\Extension::registerAllExtensions($this->config->getExtensionRegistry()); + + $binary = $this->getProtoContent('extension-command-version.bin'); + $command = Extension\Command::fromStream($binary, $this->config); + + $this->assertInstanceOf(Extension\Command::CLASS, $command); + $this->assertInstanceOf(Collection::CLASS, $command->extensions()); + $this->assertEquals(Extension\Command\CommandType::VERSION(), $command->getType()); + + $extensions = $command->extensions(); + $verbose = $extensions->get(Extension\Extension::verbose()); + $version = $extensions->get(Extension\VersionCommand::cmd()); + + $this->assertTrue($verbose); + $this->assertInstanceOf(Extension\VersionCommand::CLASS, $version); + $this->assertEquals(1, $version->getVersion()); + $this->assertSame(Extension\VersionCommand\Protocol::V1(), $version->getProtocol()); + } + + public function testUnknownFieldSet() + { + $binary = $this->getProtoContent('unknown.bin'); + $unrecognized = Unrecognized::fromStream(Stream::wrap($binary)); + + $this->assertInstanceOf(Unrecognized::CLASS, $unrecognized); + $this->assertInstanceOf('Protobuf\UnknownFieldSet', $unrecognized->unknownFieldSet()); + $this->assertCount(15, $unrecognized->unknownFieldSet()); + + $values = $unrecognized->unknownFieldSet(); + + $this->assertInstanceOf('Protobuf\Unknown', $values[1]); + $this->assertInstanceOf('Protobuf\Unknown', $values[2]); + $this->assertInstanceOf('Protobuf\Unknown', $values[3]); + $this->assertInstanceOf('Protobuf\Unknown', $values[4]); + $this->assertInstanceOf('Protobuf\Unknown', $values[5]); + $this->assertInstanceOf('Protobuf\Unknown', $values[6]); + $this->assertInstanceOf('Protobuf\Unknown', $values[7]); + $this->assertInstanceOf('Protobuf\Unknown', $values[8]); + $this->assertInstanceOf('Protobuf\Unknown', $values[9]); + $this->assertInstanceOf('Protobuf\Unknown', $values[12]); + $this->assertInstanceOf('Protobuf\Unknown', $values[13]); + $this->assertInstanceOf('Protobuf\Unknown', $values[15]); + $this->assertInstanceOf('Protobuf\Unknown', $values[16]); + $this->assertInstanceOf('Protobuf\Unknown', $values[17]); + $this->assertInstanceOf('Protobuf\Unknown', $values[18]); + + $this->assertEquals(4728057454355442093, $values[1]->value); + $this->assertEquals(1178657918, $values[2]->value); + $this->assertEquals(-123456789123456789, $values[3]->value); + $this->assertEquals(123456789123456789, $values[4]->value); + $this->assertEquals(-123456789, $values[5]->value); + $this->assertEquals(123456789123456789, $values[6]->value); + $this->assertEquals(123456789, $values[7]->value); + $this->assertEquals(1, $values[8]->value); + $this->assertEquals("foo", $values[9]->value); + $this->assertEquals("bar", $values[12]->value); + $this->assertEquals(123456789, $values[13]->value); + $this->assertEquals(4171510507, $values[15]->value); + $this->assertEquals(-123456789123456789, $values[16]->value); + $this->assertEquals(246913577, $values[17]->value); + $this->assertEquals(246913578246913577, $values[18]->value); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php b/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php new file mode 100644 index 0000000..3155d44 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php @@ -0,0 +1,63 @@ +collection = new StreamCollection(); + } + + public function testCreateStreamCollection() + { + $stream1 = Stream::create(); + $stream2 = Stream::create(); + + $collection = new StreamCollection([$stream1, $stream2]); + + $this->assertCount(2, $collection); + $this->assertEquals([$stream1, $stream2], $collection->getArrayCopy()); + } + + public function testAddStream() + { + $this->assertCount(0, $this->collection); + + $stream1 = Stream::create(); + $stream2 = Stream::create(); + + $this->collection[] = $stream1; + + $this->collection->add($stream2); + + $this->assertCount(2, $this->collection); + $this->assertEquals([$stream1, $stream2], $this->collection->getArrayCopy()); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\StreamCollection::offsetSet must be a \Protobuf\Stream, stdClass given + */ + public function testInvalidArgumentExceptionOffsetSetObject() + { + $this->collection[] = new \stdClass(); + } + + /** + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Argument 2 passed to Protobuf\StreamCollection::offsetSet must be a \Protobuf\Stream, integer given + */ + public function testInvalidArgumentExceptionOffsetSetInteger() + { + $this->collection[] = 123; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/StreamTest.php b/vendor/protobuf-php/protobuf/tests/StreamTest.php new file mode 100644 index 0000000..6a0e802 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/StreamTest.php @@ -0,0 +1,202 @@ +assertFalse(is_resource($handle)); + } + + public function testConvertsToString() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + fwrite($handle, 'data'); + + $this->assertEquals('data', (string) $stream); + $this->assertEquals('data', (string) $stream); + } + + public function testGetsContents() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + fwrite($handle, 'data'); + + $this->assertEquals('data', $stream->getContents()); + } + + public function testChecksEof() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + fwrite($handle, 'data'); + + $this->assertFalse($stream->eof()); + $stream->read(4); + $this->assertTrue($stream->eof()); + } + + public function testGetSize() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + $this->assertEquals(3, fwrite($handle, 'foo')); + $this->assertEquals(3, $stream->getSize()); + $this->assertEquals(4, $stream->write('test', strlen('test'))); + $this->assertEquals(7, $stream->getSize()); + $this->assertEquals(7, $stream->getSize()); + } + + public function testStreamPosition() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + $this->assertEquals(0, $stream->tell()); + $stream->write('foo', strlen('foo')); + $this->assertEquals(3, $stream->tell()); + + $stream->seek(1); + + $this->assertEquals(1, $stream->tell()); + $this->assertSame(ftell($handle), $stream->tell()); + } + + public function testWriteStream() + { + $source = Stream::create(); + $target = Stream::create(); + + $source->write('foo', strlen('foo')); + $source->seek(0); + + $target->writeStream($source, $source->getSize()); + + $this->assertEquals(3, $source->getSize()); + $this->assertEquals(3, $target->getSize()); + + $this->assertEquals('foo', (string) $source); + $this->assertEquals('foo', (string) $target); + } + + public function testReadStream() + { + $source = Stream::wrap('FOObar'); + $read1 = $source->readStream(3); + $read2 = $source->readStream(3); + + $this->assertInstanceOf('Protobuf\Stream', $read1); + $this->assertInstanceOf('Protobuf\Stream', $read2); + + $this->assertEquals(3, $read1->getSize()); + $this->assertEquals(3, $read2->getSize()); + + $this->assertEquals('FOO', (string) $read1); + $this->assertEquals('bar', (string) $read2); + } + + public function testPositionOfResource() + { + $handle = fopen(__FILE__, 'r'); + + fseek($handle, 10); + + $stream = Stream::wrap($handle); + + $this->assertEquals(10, $stream->tell()); + } + + public function testCreateStreamFromString() + { + $stream = Stream::wrap('foo'); + + $this->assertInstanceOf('Protobuf\Stream', $stream); + $this->assertEquals('foo', $stream->getContents()); + } + + public function testCreateStreamFromEmptyString() + { + $this->assertInstanceOf('Protobuf\Stream', Stream::wrap()); + } + + public function testCreateStreamFromResource() + { + $handle = fopen(__FILE__, 'r'); + $stream = Stream::wrap($handle); + $content = file_get_contents(__FILE__); + + $this->assertInstanceOf('Protobuf\Stream', $stream); + $this->assertSame($content, (string) $stream); + } + + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage Failed to write 2 bytes + */ + public function testWriteException() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + $stream->write('', 2); + } + + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage Unable to seek stream position to -1 + */ + public function testSeekException() + { + $handle = fopen('php://temp', 'w+'); + $stream = new Stream($handle); + + $stream->seek(-1); + } + + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage Failed to write stream with 3 bytes + */ + public function testWriteStreamException() + { + $source = Stream::create(); + $target = Stream::create(); + + $target->writeStream($source, 3); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testThrowsExceptionForUnknown() + { + Stream::wrap(new \stdClass()); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testThrowsExceptionOnInvalidArgument() + { + new Stream(null); + } + + public function testCanSetSize() + { + $this->assertEquals(10, Stream::wrap('', 10)->getSize()); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/TestCase.php b/vendor/protobuf-php/protobuf/tests/TestCase.php new file mode 100644 index 0000000..187a738 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/TestCase.php @@ -0,0 +1,76 @@ +config = new Configuration(); + } + + /** + * @param object $object + * @param string $method + * @param array $args + * + * @return mixed + */ + protected function invokeMethod($object, $method, array $args= []) + { + $reflection = new \ReflectionMethod($object, $method); + + $reflection->setAccessible(true); + + return $reflection->invokeArgs($object, $args); + } + + /** + * @param object $object + * @param string $property + * + * @return mixed + */ + protected function getPropertyValue($object, $property) + { + $reflection = new \ReflectionProperty($object, $property); + + $reflection->setAccessible(true); + + return $reflection->getValue($object); + } + + /** + * @param object $object + * @param string $property + * @param mixed $value + */ + protected function setPropertyValue($object, $property, $value) + { + $reflection = new \ReflectionProperty($object, $property); + + $reflection->setAccessible(true); + $reflection->setValue($object, $value); + } + + /** + * @param string $name + * + * @return string + */ + protected function getProtoContent($name) + { + $basepath = __DIR__ . '/Resources'; + $content = file_get_contents($basepath . '/' . $name); + + return $content; + } +} diff --git a/vendor/protobuf-php/protobuf/tests/TextFormatTest.php b/vendor/protobuf-php/protobuf/tests/TextFormatTest.php new file mode 100644 index 0000000..b654662 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/TextFormatTest.php @@ -0,0 +1,185 @@ +textFormat = new TextFormat($this->config); + } + + public function testFormatSimple() + { + $simple = new Simple(); + + $simple->setBool(true); + $simple->setBytes("bar"); + $simple->setString("foo"); + $simple->setFloat(12345.123); + $simple->setUint32(123456789); + $simple->setInt32(-123456789); + $simple->setFixed32(123456789); + $simple->setSint32(-123456789); + $simple->setSfixed32(-123456789); + $simple->setDouble(123456789.12345); + $simple->setInt64(-123456789123456789); + $simple->setUint64(123456789123456789); + $simple->setFixed64(123456789123456789); + $simple->setSint64(-123456789123456789); + $simple->setSfixed64(-123456789123456789); + + $expected = $this->getProtoContent('simple.txt'); + $actual = $this->textFormat->encodeMessage($simple); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatRepeatedString() + { + $repeated = new Repeated(); + + $repeated->addString('one'); + $repeated->addString('two'); + $repeated->addString('three'); + + $expected = $this->getProtoContent('repeated-string.txt'); + $actual = $this->textFormat->encodeMessage($repeated); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatRepeatedInt() + { + $repeated = new Repeated(); + + $repeated->addInt(1); + $repeated->addInt(2); + $repeated->addInt(3); + + $expected = $this->getProtoContent('repeated-int32.txt'); + $actual = $this->textFormat->encodeMessage($repeated); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatRepeatedNested() + { + $repeated = new Repeated(); + $nested1 = new Repeated\Nested(); + $nested2 = new Repeated\Nested(); + $nested3 = new Repeated\Nested(); + + $nested1->setId(1); + $nested2->setId(2); + $nested3->setId(3); + + $repeated->addNested($nested1); + $repeated->addNested($nested2); + $repeated->addNested($nested3); + + $expected = $this->getProtoContent('repeated-nested.txt'); + $actual = $this->textFormat->encodeMessage($repeated); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatComplexMessage() + { + $book = new AddressBook(); + $person = new Person(); + + $person->setId(2051); + $person->setName('John Doe'); + $person->setEmail('john.doe@gmail.com'); + + $phone = new Person\PhoneNumber(); + + $phone->setNumber('1231231212'); + $phone->setType(Person\PhoneType::HOME()); + + $person->addPhone($phone); + + $phone = new Person\PhoneNumber(); + + $phone->setNumber('55512321312'); + $phone->setType(Person\PhoneType::MOBILE()); + + $person->addPhone($phone); + $book->addPerson($person); + + $person = new Person(); + + $person->setId(23); + $person->setName('Iván Montes'); + $person->setEmail('drslump@pollinimini.net'); + + $phone = new Person\PhoneNumber(); + + $phone->setNumber('3493123123'); + $phone->setType(Person\PhoneType::WORK()); + + $person->addPhone($phone); + $book->addPerson($person); + + $expected = $this->getProtoContent('addressbook.txt'); + $actual = $this->textFormat->encodeMessage($book); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatTreeMessage() + { + $root = new Tree\Node(); + $admin = new Tree\Node(); + $fabio = new Tree\Node(); + + $root->setPath('/Users'); + $fabio->setPath('/Users/fabio'); + $admin->setPath('/Users/admin'); + + // avoid recursion + $parent = clone $root; + + $admin->setParent($parent); + $fabio->setParent($parent); + + $root->addChildren($fabio); + $root->addChildren($admin); + + $expected = $this->getProtoContent('tree.txt'); + $actual = $root->__toString(); + + $this->assertEquals($expected, (string) $actual); + } + + public function testFormatTotring() + { + $repeated = new Repeated(); + + $repeated->addString('one'); + $repeated->addString('two'); + $repeated->addString('three'); + + $expected = $this->getProtoContent('repeated-string.txt'); + $actual = $repeated->__toString(); + + $this->assertEquals($expected, (string) $actual); + } +} diff --git a/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh b/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh new file mode 100755 index 0000000..fb64118 --- /dev/null +++ b/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +if [ -z "$PROTOBUF_VERSION" ]; then + echo 'PROTOBUF_VERSION env var is not defined.'; + exit 1; +fi + +if [ -d "$HOME/protobuf/$PROTOBUF_VERSION/lib" ]; then + echo 'Using cached instalation.'; + exit 0; +fi + +case "$PROTOBUF_VERSION" in +2*) + PROTOBUF_RELEASE_FILE=protobuf-$PROTOBUF_VERSION + ;; +3*) + PROTOBUF_RELEASE_FILE=protobuf-cpp-$PROTOBUF_VERSION + ;; +*) + echo "Unknown protobuf version: $PROTOBUF_VERSION" + exit 1; + ;; +esac + +wget https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/$PROTOBUF_RELEASE_FILE.tar.gz + +tar xf $PROTOBUF_RELEASE_FILE.tar.gz + +cd protobuf-$PROTOBUF_VERSION && ./configure --prefix=$HOME/protobuf/$PROTOBUF_VERSION && make && make install + diff --git a/vendor/psr/cache/CHANGELOG.md b/vendor/psr/cache/CHANGELOG.md new file mode 100644 index 0000000..58ddab0 --- /dev/null +++ b/vendor/psr/cache/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.1 - 2016-08-06 + +### Fixed + +- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr +- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr +- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell +- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell + +## 1.0.0 - 2015-12-11 + +Initial stable release; reflects accepted PSR-6 specification diff --git a/vendor/psr/cache/LICENSE.txt b/vendor/psr/cache/LICENSE.txt new file mode 100644 index 0000000..b1c2c97 --- /dev/null +++ b/vendor/psr/cache/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2015 PHP Framework Interoperability Group + +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/vendor/psr/cache/README.md b/vendor/psr/cache/README.md new file mode 100644 index 0000000..9855a31 --- /dev/null +++ b/vendor/psr/cache/README.md @@ -0,0 +1,12 @@ +Caching Interface +============== + +This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url]. + +Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism. + +The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. + +[psr-url]: https://www.php-fig.org/psr/psr-6/ +[package-url]: https://packagist.org/packages/psr/cache +[implementation-url]: https://packagist.org/providers/psr/cache-implementation diff --git a/vendor/psr/cache/composer.json b/vendor/psr/cache/composer.json new file mode 100644 index 0000000..4b68797 --- /dev/null +++ b/vendor/psr/cache/composer.json @@ -0,0 +1,25 @@ +{ + "name": "psr/cache", + "description": "Common interface for caching libraries", + "keywords": ["psr", "psr-6", "cache"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/vendor/psr/cache/src/CacheException.php b/vendor/psr/cache/src/CacheException.php new file mode 100644 index 0000000..bb785f4 --- /dev/null +++ b/vendor/psr/cache/src/CacheException.php @@ -0,0 +1,10 @@ +logger = $logger; + } + + public function doSomething() + { + if ($this->logger) { + $this->logger->info('Doing work'); + } + + try { + $this->doSomethingElse(); + } catch (Exception $exception) { + $this->logger->error('Oh no!', array('exception' => $exception)); + } + + // do something useful + } +} +``` + +You can then pick one of the implementations of the interface to get a logger. + +If you want to implement the interface, you can require this package and +implement `Psr\Log\LoggerInterface` in your code. Please read the +[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +for details. diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json new file mode 100644 index 0000000..879fc6f --- /dev/null +++ b/vendor/psr/log/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/log", + "description": "Common interface for logging libraries", + "keywords": ["psr", "psr-3", "log"], + "homepage": "https://github.com/php-fig/log", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + } +} diff --git a/vendor/psr/log/src/AbstractLogger.php b/vendor/psr/log/src/AbstractLogger.php new file mode 100644 index 0000000..d60a091 --- /dev/null +++ b/vendor/psr/log/src/AbstractLogger.php @@ -0,0 +1,15 @@ +logger = $logger; + } +} diff --git a/vendor/psr/log/src/LoggerInterface.php b/vendor/psr/log/src/LoggerInterface.php new file mode 100644 index 0000000..b3a24b5 --- /dev/null +++ b/vendor/psr/log/src/LoggerInterface.php @@ -0,0 +1,125 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function alert(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function critical(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function error(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function warning(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function notice(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function info(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function debug(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::DEBUG, $message, $context); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + abstract public function log($level, string|\Stringable $message, array $context = []): void; +} diff --git a/vendor/psr/log/src/NullLogger.php b/vendor/psr/log/src/NullLogger.php new file mode 100644 index 0000000..c1cc3c0 --- /dev/null +++ b/vendor/psr/log/src/NullLogger.php @@ -0,0 +1,30 @@ +logger) { }` + * blocks. + */ +class NullLogger extends AbstractLogger +{ + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public function log($level, string|\Stringable $message, array $context = []): void + { + // noop + } +} diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md new file mode 100644 index 0000000..9e2fc5a --- /dev/null +++ b/vendor/symfony/finder/CHANGELOG.md @@ -0,0 +1,92 @@ +CHANGELOG +========= + +6.0 +--- + + * Remove `Comparator::setTarget()` and `Comparator::setOperator()` + +5.4.0 +----- + + * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` + * Add a constructor to `Comparator` that allows setting target and operator + * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified + * Add recursive .gitignore files support + +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + +3.4.0 +----- + + * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` + * added Finder::hasResults() method to check if any results were found + +3.3.0 +----- + + * added double-star matching to Glob::toRegex() + +3.0.0 +----- + + * removed deprecated classes + +2.8.0 +----- + + * deprecated adapters and related classes + +2.5.0 +----- + * added support for GLOB_BRACE in the paths passed to Finder::in() + +2.3.0 +----- + + * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) + * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception + +2.2.0 +----- + + * added Finder::path() and Finder::notPath() methods + * added finder adapters to improve performance on specific platforms + * added support for wildcard characters (glob patterns) in the paths passed + to Finder::in() + +2.1.0 +----- + + * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and + Finder::sortByModifiedTime() + * added Countable to Finder + * added support for an array of directories as an argument to + Finder::exclude() + * added searching based on the file content via Finder::contains() and + Finder::notContains() + * added support for the != operator in the Comparator + * [BC BREAK] filter expressions (used for file name and content) are no more + considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/vendor/symfony/finder/Comparator/Comparator.php b/vendor/symfony/finder/Comparator/Comparator.php new file mode 100644 index 0000000..bd68583 --- /dev/null +++ b/vendor/symfony/finder/Comparator/Comparator.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * @author Fabien Potencier + */ +class Comparator +{ + private string $target; + private string $operator; + + public function __construct(string $target, string $operator = '==') + { + if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { + throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); + } + + $this->target = $target; + $this->operator = $operator; + } + + /** + * Gets the target value. + */ + public function getTarget(): string + { + return $this->target; + } + + /** + * Gets the comparison operator. + */ + public function getOperator(): string + { + return $this->operator; + } + + /** + * Tests against the target. + */ + public function test(mixed $test): bool + { + return match ($this->operator) { + '>' => $test > $this->target, + '>=' => $test >= $this->target, + '<' => $test < $this->target, + '<=' => $test <= $this->target, + '!=' => $test != $this->target, + default => $test == $this->target, + }; + } +} diff --git a/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/symfony/finder/Comparator/DateComparator.php new file mode 100644 index 0000000..159964d --- /dev/null +++ b/vendor/symfony/finder/Comparator/DateComparator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * DateCompare compiles date comparisons. + * + * @author Fabien Potencier + */ +class DateComparator extends Comparator +{ + /** + * @param string $test A comparison string + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); + } + + try { + $date = new \DateTime($matches[2]); + $target = $date->format('U'); + } catch (\Exception) { + throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); + } + + $operator = $matches[1] ?? '=='; + if ('since' === $operator || 'after' === $operator) { + $operator = '>'; + } + + if ('until' === $operator || 'before' === $operator) { + $operator = '<'; + } + + parent::__construct($target, $operator); + } +} diff --git a/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Comparator/NumberComparator.php new file mode 100644 index 0000000..ff85d96 --- /dev/null +++ b/vendor/symfony/finder/Comparator/NumberComparator.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * NumberComparator compiles a simple comparison to an anonymous + * subroutine, which you can call with a value to be tested again. + * + * Now this would be very pointless, if NumberCompare didn't understand + * magnitudes. + * + * The target value may use magnitudes of kilobytes (k, ki), + * megabytes (m, mi), or gigabytes (g, gi). Those suffixed + * with an i use the appropriate 2**n version in accordance with the + * IEC standard: http://physics.nist.gov/cuu/Units/binary.html + * + * Based on the Perl Number::Compare module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + * + * @see http://physics.nist.gov/cuu/Units/binary.html + */ +class NumberComparator extends Comparator +{ + /** + * @param string|int $test A comparison string or an integer + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(?string $test) + { + if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); + } + + $target = $matches[2]; + if (!is_numeric($target)) { + throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); + } + if (isset($matches[3])) { + // magnitude + switch (strtolower($matches[3])) { + case 'k': + $target *= 1000; + break; + case 'ki': + $target *= 1024; + break; + case 'm': + $target *= 1000000; + break; + case 'mi': + $target *= 1024 * 1024; + break; + case 'g': + $target *= 1000000000; + break; + case 'gi': + $target *= 1024 * 1024 * 1024; + break; + } + } + + parent::__construct($target, $matches[1] ?: '=='); + } +} diff --git a/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/symfony/finder/Exception/AccessDeniedException.php new file mode 100644 index 0000000..ee195ea --- /dev/null +++ b/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Jean-François Simon + */ +class AccessDeniedException extends \UnexpectedValueException +{ +} diff --git a/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php new file mode 100644 index 0000000..c6cc0f2 --- /dev/null +++ b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Andreas Erhard + */ +class DirectoryNotFoundException extends \InvalidArgumentException +{ +} diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php new file mode 100644 index 0000000..4636f05 --- /dev/null +++ b/vendor/symfony/finder/Finder.php @@ -0,0 +1,798 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +use Symfony\Component\Finder\Comparator\DateComparator; +use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use Symfony\Component\Finder\Iterator\CustomFilterIterator; +use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; +use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use Symfony\Component\Finder\Iterator\SortableIterator; + +/** + * Finder allows to build rules to find files and directories. + * + * It is a thin wrapper around several specialized iterator classes. + * + * All rules may be invoked several times. + * + * All methods return the current Finder object to allow chaining: + * + * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class Finder implements \IteratorAggregate, \Countable +{ + public const IGNORE_VCS_FILES = 1; + public const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_IGNORED_FILES = 4; + + private int $mode = 0; + private array $names = []; + private array $notNames = []; + private array $exclude = []; + private array $filters = []; + private array $depths = []; + private array $sizes = []; + private bool $followLinks = false; + private bool $reverseSorting = false; + private \Closure|int|false $sort = false; + private int $ignore = 0; + private array $dirs = []; + private array $dates = []; + private array $iterators = []; + private array $contains = []; + private array $notContains = []; + private array $paths = []; + private array $notPaths = []; + private bool $ignoreUnreadableDirs = false; + + private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + + public function __construct() + { + $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; + } + + /** + * Creates a new Finder. + */ + public static function create(): static + { + return new static(); + } + + /** + * Restricts the matching to directories only. + * + * @return $this + */ + public function directories(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; + + return $this; + } + + /** + * Restricts the matching to files only. + * + * @return $this + */ + public function files(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; + + return $this; + } + + /** + * Adds tests for the directory depth. + * + * Usage: + * + * $finder->depth('> 1') // the Finder will start matching at level 1. + * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) + * + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels + * + * @return $this + * + * @see DepthRangeFilterIterator + * @see NumberComparator + */ + public function depth(string|int|array $levels): static + { + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } + + return $this; + } + + /** + * Adds tests for file dates (last modified). + * + * The date must be something that strtotime() is able to parse: + * + * $finder->date('since yesterday'); + * $finder->date('until 2 days ago'); + * $finder->date('> now - 2 hours'); + * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); + * + * @param string|string[] $dates A date range string or an array of date ranges + * + * @return $this + * + * @see strtotime + * @see DateRangeFilterIterator + * @see DateComparator + */ + public function date(string|array $dates): static + { + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } + + return $this; + } + + /** + * Adds rules that files must match. + * + * You can use patterns (delimited with / sign), globs or simple strings. + * + * $finder->name('*.php') + * $finder->name('/\.php$/') // same as above + * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function name(string|array $patterns): static + { + $this->names = array_merge($this->names, (array) $patterns); + + return $this; + } + + /** + * Adds rules that files must not match. + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notName(string|array $patterns): static + { + $this->notNames = array_merge($this->notNames, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must match. + * + * Strings or PCRE patterns can be used: + * + * $finder->contains('Lorem ipsum') + * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function contains(string|array $patterns): static + { + $this->contains = array_merge($this->contains, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must not match. + * + * Strings or PCRE patterns can be used: + * + * $finder->notContains('Lorem ipsum') + * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function notContains(string|array $patterns): static + { + $this->notContains = array_merge($this->notContains, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->path('some/special/dir') + * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function path(string|array $patterns): static + { + $this->paths = array_merge($this->paths, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must not match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->notPath('some/special/dir') + * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notPath(string|array $patterns): static + { + $this->notPaths = array_merge($this->notPaths, (array) $patterns); + + return $this; + } + + /** + * Adds tests for file sizes. + * + * $finder->size('> 10K'); + * $finder->size('<= 1Ki'); + * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) + * + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges + * + * @return $this + * + * @see SizeRangeFilterIterator + * @see NumberComparator + */ + public function size(string|int|array $sizes): static + { + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } + + return $this; + } + + /** + * Excludes directories. + * + * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: + * + * $finder->in(__DIR__)->exclude('ruby'); + * + * @param string|array $dirs A directory path or an array of directories + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function exclude(string|array $dirs): static + { + $this->exclude = array_merge($this->exclude, (array) $dirs); + + return $this; + } + + /** + * Excludes "hidden" directories and files (starting with a dot). + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreDotFiles(bool $ignoreDotFiles): static + { + if ($ignoreDotFiles) { + $this->ignore |= static::IGNORE_DOT_FILES; + } else { + $this->ignore &= ~static::IGNORE_DOT_FILES; + } + + return $this; + } + + /** + * Forces the finder to ignore version control directories. + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreVCS(bool $ignoreVCS): static + { + if ($ignoreVCS) { + $this->ignore |= static::IGNORE_VCS_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_FILES; + } + + return $this; + } + + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + + /** + * Adds VCS patterns. + * + * @see ignoreVCS() + * + * @param string|string[] $pattern VCS patterns to ignore + */ + public static function addVCSPattern(string|array $pattern) + { + foreach ((array) $pattern as $p) { + self::$vcsPatterns[] = $p; + } + + self::$vcsPatterns = array_unique(self::$vcsPatterns); + } + + /** + * Sorts files and directories by an anonymous function. + * + * The anonymous function receives two \SplFileInfo instances to compare. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sort(\Closure $closure): static + { + $this->sort = $closure; + + return $this; + } + + /** + * Sorts files and directories by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByName(bool $useNaturalSort = false): static + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; + + return $this; + } + + /** + * Sorts files and directories by type (directories before files), then by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByType(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; + + return $this; + } + + /** + * Sorts files and directories by the last accessed time. + * + * This is the time that the file was last accessed, read or written to. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByAccessedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; + + return $this; + } + + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting(): static + { + $this->reverseSorting = true; + + return $this; + } + + /** + * Sorts files and directories by the last inode changed time. + * + * This is the time that the inode information was last modified (permissions, owner, group or other metadata). + * + * On Windows, since inode is not available, changed time is actually the file creation time. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByChangedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; + + return $this; + } + + /** + * Sorts files and directories by the last modified time. + * + * This is the last time the actual contents of the file were last modified. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByModifiedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; + + return $this; + } + + /** + * Filters the iterator with an anonymous function. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @return $this + * + * @see CustomFilterIterator + */ + public function filter(\Closure $closure): static + { + $this->filters[] = $closure; + + return $this; + } + + /** + * Forces the following of symlinks. + * + * @return $this + */ + public function followLinks(): static + { + $this->followLinks = true; + + return $this; + } + + /** + * Tells finder to ignore unreadable directories. + * + * By default, scanning unreadable directories content throws an AccessDeniedException. + * + * @return $this + */ + public function ignoreUnreadableDirs(bool $ignore = true): static + { + $this->ignoreUnreadableDirs = $ignore; + + return $this; + } + + /** + * Searches files and directories which match defined rules. + * + * @param string|string[] $dirs A directory path or an array of directories + * + * @return $this + * + * @throws DirectoryNotFoundException if one of the directories does not exist + */ + public function in(string|array $dirs): static + { + $resolvedDirs = []; + + foreach ((array) $dirs as $dir) { + if (is_dir($dir)) { + $resolvedDirs[] = [$this->normalizeDir($dir)]; + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { + sort($glob); + $resolvedDirs[] = array_map($this->normalizeDir(...), $glob); + } else { + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); + } + } + + $this->dirs = array_merge($this->dirs, ...$resolvedDirs); + + return $this; + } + + /** + * Returns an Iterator for the current Finder configuration. + * + * This method implements the IteratorAggregate interface. + * + * @return \Iterator + * + * @throws \LogicException if the in() method has not been called + */ + public function getIterator(): \Iterator + { + if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { + throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); + } + + if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { + $iterator = $this->searchInDirectory($this->dirs[0]); + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + $iterator = new \AppendIterator(); + foreach ($this->dirs as $dir) { + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); + } + + foreach ($this->iterators as $it) { + $iterator->append($it); + } + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + /** + * Appends an existing set of files/directories to the finder. + * + * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. + * + * @return $this + * + * @throws \InvalidArgumentException when the given argument is not iterable + */ + public function append(iterable $iterator): static + { + if ($iterator instanceof \IteratorAggregate) { + $this->iterators[] = $iterator->getIterator(); + } elseif ($iterator instanceof \Iterator) { + $this->iterators[] = $iterator; + } elseif (is_iterable($iterator)) { + $it = new \ArrayIterator(); + foreach ($iterator as $file) { + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; + } + $this->iterators[] = $it; + } else { + throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); + } + + return $this; + } + + /** + * Check if any results were found. + */ + public function hasResults(): bool + { + foreach ($this->getIterator() as $_) { + return true; + } + + return false; + } + + /** + * Counts all the results collected by the iterators. + */ + public function count(): int + { + return iterator_count($this->getIterator()); + } + + private function searchInDirectory(string $dir): \Iterator + { + $exclude = $this->exclude; + $notPaths = $this->notPaths; + + if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { + $exclude = array_merge($exclude, self::$vcsPatterns); + } + + if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { + $notPaths[] = '#(^|/)\..+(/|$)#'; + } + + $minDepth = 0; + $maxDepth = \PHP_INT_MAX; + + foreach ($this->depths as $comparator) { + switch ($comparator->getOperator()) { + case '>': + $minDepth = $comparator->getTarget() + 1; + break; + case '>=': + $minDepth = $comparator->getTarget(); + break; + case '<': + $maxDepth = $comparator->getTarget() - 1; + break; + case '<=': + $maxDepth = $comparator->getTarget(); + break; + default: + $minDepth = $maxDepth = $comparator->getTarget(); + } + } + + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; + + if ($this->followLinks) { + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; + } + + $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); + + if ($exclude) { + $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); + } + + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + + if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { + $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); + } + + if ($this->mode) { + $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); + } + + if ($this->names || $this->notNames) { + $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); + } + + if ($this->contains || $this->notContains) { + $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); + } + + if ($this->sizes) { + $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); + } + + if ($this->dates) { + $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); + } + + if ($this->filters) { + $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); + } + + if ($this->paths || $notPaths) { + $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); + } + + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); + } + + return $iterator; + } + + /** + * Normalizes given directory names by removing trailing slashes. + * + * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper + */ + private function normalizeDir(string $dir): string + { + if ('/' === $dir) { + return $dir; + } + + $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); + + if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { + $dir .= '/'; + } + + return $dir; + } +} diff --git a/vendor/symfony/finder/Gitignore.php b/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000..070074b --- /dev/null +++ b/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,93 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Michael Voříšek + * @author Ahmed Abdou + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * Format specification: https://git-scm.com/docs/gitignore#_pattern_format + */ + public static function toRegex(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, false); + } + + public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, true); + } + + private static function buildRegex(string $gitignoreFileContent, bool $inverted): string + { + $gitignoreFileContent = preg_replace('~(? + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Glob matches globbing patterns against text. + * + * if match_glob("foo.*", "foo.bar") echo "matched\n"; + * + * // prints foo.bar and foo.baz + * $regex = glob_to_regex("foo.*"); + * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) + * { + * if (/$regex/) echo "matched: $car\n"; + * } + * + * Glob implements glob(3) style matching that can be used to match + * against text, rather than fetching names from a filesystem. + * + * Based on the Perl Text::Glob module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + */ +class Glob +{ + /** + * Returns a regexp which is the equivalent of the glob pattern. + */ + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#'): string + { + $firstByte = true; + $escaping = false; + $inCurlies = 0; + $regex = ''; + $sizeGlob = \strlen($glob); + for ($i = 0; $i < $sizeGlob; ++$i) { + $car = $glob[$i]; + if ($firstByte && $strictLeadingDot && '.' !== $car) { + $regex .= '(?=[^\.])'; + } + + $firstByte = '/' === $car; + + if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { + $car = '[^/]++/'; + if (!isset($glob[$i + 3])) { + $car .= '?'; + } + + if ($strictLeadingDot) { + $car = '(?=[^\.])'.$car; + } + + $car = '/(?:'.$car.')*'; + $i += 2 + isset($glob[$i + 3]); + + if ('/' === $delimiter) { + $car = str_replace('/', '\\/', $car); + } + } + + if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { + $regex .= "\\$car"; + } elseif ('*' === $car) { + $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); + } elseif ('?' === $car) { + $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); + } elseif ('{' === $car) { + $regex .= $escaping ? '\\{' : '('; + if (!$escaping) { + ++$inCurlies; + } + } elseif ('}' === $car && $inCurlies) { + $regex .= $escaping ? '}' : ')'; + if (!$escaping) { + --$inCurlies; + } + } elseif (',' === $car && $inCurlies) { + $regex .= $escaping ? ',' : '|'; + } elseif ('\\' === $car) { + if ($escaping) { + $regex .= '\\\\'; + $escaping = false; + } else { + $escaping = true; + } + + continue; + } else { + $regex .= $car; + } + $escaping = false; + } + + return $delimiter.'^'.$regex.'$'.$delimiter; + } +} diff --git a/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Iterator/CustomFilterIterator.php new file mode 100644 index 0000000..82ee81d --- /dev/null +++ b/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * CustomFilterIterator filters files by applying anonymous functions. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class CustomFilterIterator extends \FilterIterator +{ + private array $filters = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param callable[] $filters An array of PHP callbacks + * + * @throws \InvalidArgumentException + */ + public function __construct(\Iterator $iterator, array $filters) + { + foreach ($filters as $filter) { + if (!\is_callable($filter)) { + throw new \InvalidArgumentException('Invalid PHP callback.'); + } + } + $this->filters = $filters; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + foreach ($this->filters as $filter) { + if (false === $filter($fileinfo)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php new file mode 100644 index 0000000..718d42b --- /dev/null +++ b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\DateComparator; + +/** + * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class DateRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param DateComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + if (!file_exists($fileinfo->getPathname())) { + return false; + } + + $filedate = $fileinfo->getMTime(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filedate)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php new file mode 100644 index 0000000..1cddb5f --- /dev/null +++ b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * DepthRangeFilterIterator limits the directory depth. + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +class DepthRangeFilterIterator extends \FilterIterator +{ + private int $minDepth = 0; + + /** + * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter + * @param int $minDepth The min depth + * @param int $maxDepth The max depth + */ + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) + { + $this->minDepth = $minDepth; + $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->getInnerIterator()->getDepth() >= $this->minDepth; + } +} diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php new file mode 100644 index 0000000..efe9364 --- /dev/null +++ b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * ExcludeDirectoryFilterIterator filters out directories. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + * @implements \RecursiveIterator + */ +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator +{ + /** @var \Iterator */ + private \Iterator $iterator; + private bool $isRecursive; + private array $excludedDirs = []; + private ?string $excludedPattern = null; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $directories An array of directories to exclude + */ + public function __construct(\Iterator $iterator, array $directories) + { + $this->iterator = $iterator; + $this->isRecursive = $iterator instanceof \RecursiveIterator; + $patterns = []; + foreach ($directories as $directory) { + $directory = rtrim($directory, '/'); + if (!$this->isRecursive || str_contains($directory, '/')) { + $patterns[] = preg_quote($directory, '#'); + } else { + $this->excludedDirs[$directory] = true; + } + } + if ($patterns) { + $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; + } + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { + return false; + } + + if ($this->excludedPattern) { + $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); + $path = str_replace('\\', '/', $path); + + return !preg_match($this->excludedPattern, $path); + } + + return true; + } + + public function hasChildren(): bool + { + return $this->isRecursive && $this->iterator->hasChildren(); + } + + public function getChildren(): self + { + $children = new self($this->iterator->getChildren(), []); + $children->excludedDirs = $this->excludedDirs; + $children->excludedPattern = $this->excludedPattern; + + return $children; + } +} diff --git a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php new file mode 100644 index 0000000..2130378 --- /dev/null +++ b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FileTypeFilterIterator only keeps files, directories, or both. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class FileTypeFilterIterator extends \FilterIterator +{ + public const ONLY_FILES = 1; + public const ONLY_DIRECTORIES = 2; + + private int $mode; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) + */ + public function __construct(\Iterator $iterator, int $mode) + { + $this->mode = $mode; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + return false; + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + return false; + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php new file mode 100644 index 0000000..bdc71ff --- /dev/null +++ b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class FilecontentFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if (!$this->matchRegexps && !$this->noMatchRegexps) { + return true; + } + + $fileinfo = $this->current(); + + if ($fileinfo->isDir() || !$fileinfo->isReadable()) { + return false; + } + + $content = $fileinfo->getContents(); + if (!$content) { + return false; + } + + return $this->isAccepted($content); + } + + /** + * Converts string to regexp if necessary. + * + * @param string $str Pattern: string or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php new file mode 100644 index 0000000..05d9535 --- /dev/null +++ b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Glob; + +/** + * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). + * + * @author Fabien Potencier + * + * @extends MultiplePcreFilterIterator + */ +class FilenameFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->isAccepted($this->current()->getFilename()); + } + + /** + * Converts glob to regexp. + * + * PCRE patterns are left unchanged. + * Glob strings are transformed with Glob::toRegex(). + * + * @param string $str Pattern: glob or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : Glob::toRegex($str); + } +} diff --git a/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000..5b5806b --- /dev/null +++ b/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private \Closure $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory(...); + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php new file mode 100644 index 0000000..82a9df3 --- /dev/null +++ b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +abstract class MultiplePcreFilterIterator extends \FilterIterator +{ + protected $matchRegexps = []; + protected $noMatchRegexps = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match + */ + public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) + { + foreach ($matchPatterns as $pattern) { + $this->matchRegexps[] = $this->toRegex($pattern); + } + + foreach ($noMatchPatterns as $pattern) { + $this->noMatchRegexps[] = $this->toRegex($pattern); + } + + parent::__construct($iterator); + } + + /** + * Checks whether the string is accepted by the regex filters. + * + * If there is no regexps defined in the class, this method will accept the string. + * Such case can be handled by child classes before calling the method if they want to + * apply a different behavior. + */ + protected function isAccepted(string $string): bool + { + // should at least not match one rule to exclude + foreach ($this->noMatchRegexps as $regex) { + if (preg_match($regex, $string)) { + return false; + } + } + + // should at least match one rule + if ($this->matchRegexps) { + foreach ($this->matchRegexps as $regex) { + if (preg_match($regex, $string)) { + return true; + } + } + + return false; + } + + // If there is no match rules, the file is accepted + return true; + } + + /** + * Checks whether the string is a regex. + */ + protected function isRegex(string $str): bool + { + $availableModifiers = 'imsxuADU'; + + if (\PHP_VERSION_ID >= 80200) { + $availableModifiers .= 'n'; + } + + if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { + $start = substr($m[1], 0, 1); + $end = substr($m[1], -1); + + if ($start === $end) { + return !preg_match('/[*?[:alnum:] \\\\]/', $start); + } + + foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { + if ($start === $delimiters[0] && $end === $delimiters[1]) { + return true; + } + } + } + + return false; + } + + /** + * Converts string into regexp. + */ + abstract protected function toRegex(string $str): string; +} diff --git a/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/symfony/finder/Iterator/PathFilterIterator.php new file mode 100644 index 0000000..c6d5813 --- /dev/null +++ b/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * PathFilterIterator filters files by path patterns (e.g. some/special/dir). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class PathFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $filename = $this->current()->getRelativePathname(); + + if ('\\' === \DIRECTORY_SEPARATOR) { + $filename = str_replace('\\', '/', $filename); + } + + return $this->isAccepted($filename); + } + + /** + * Converts strings to regexp. + * + * PCRE patterns are left unchanged. + * + * Default conversion: + * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' + * + * Use only / as directory separator (on Windows also). + * + * @param string $str Pattern: regexp or dirname + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php new file mode 100644 index 0000000..c321aee --- /dev/null +++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -0,0 +1,146 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Exception\AccessDeniedException; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Extends the \RecursiveDirectoryIterator to support relative paths. + * + * @author Victor Berchet + * @extends \RecursiveDirectoryIterator + */ +class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator +{ + private bool $ignoreUnreadableDirs; + private ?bool $rewindable = null; + + // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations + private string $rootPath; + private string $subPath; + private string $directorySeparator = '/'; + + /** + * @throws \RuntimeException + */ + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) + { + if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { + throw new \RuntimeException('This iterator only support returning current as fileinfo.'); + } + + parent::__construct($path, $flags); + $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; + $this->rootPath = $path; + if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { + $this->directorySeparator = \DIRECTORY_SEPARATOR; + } + } + + /** + * Return an instance of SplFileInfo with support for relative paths. + */ + public function current(): SplFileInfo + { + // the logic here avoids redoing the same work in all iterations + + if (!isset($this->subPath)) { + $this->subPath = $this->getSubPath(); + } + $subPathname = $this->subPath; + if ('' !== $subPathname) { + $subPathname .= $this->directorySeparator; + } + $subPathname .= $this->getFilename(); + + if ('/' !== $basePath = $this->rootPath) { + $basePath .= $this->directorySeparator; + } + + return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); + } + + public function hasChildren(bool $allowLinks = false): bool + { + $hasChildren = parent::hasChildren($allowLinks); + + if (!$hasChildren || !$this->ignoreUnreadableDirs) { + return $hasChildren; + } + + try { + parent::getChildren(); + + return true; + } catch (\UnexpectedValueException) { + // If directory is unreadable and finder is set to ignore it, skip children + return false; + } + } + + /** + * @throws AccessDeniedException + */ + public function getChildren(): \RecursiveDirectoryIterator + { + try { + $children = parent::getChildren(); + + if ($children instanceof self) { + // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore + $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; + + // performance optimization to avoid redoing the same work in all children + $children->rewindable = &$this->rewindable; + $children->rootPath = $this->rootPath; + } + + return $children; + } catch (\UnexpectedValueException $e) { + throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * Do nothing for non rewindable stream. + */ + public function rewind(): void + { + if (false === $this->isRewindable()) { + return; + } + + parent::rewind(); + } + + /** + * Checks if the stream is rewindable. + */ + public function isRewindable(): bool + { + if (null !== $this->rewindable) { + return $this->rewindable; + } + + if (false !== $stream = @opendir($this->getPath())) { + $infos = stream_get_meta_data($stream); + closedir($stream); + + if ($infos['seekable']) { + return $this->rewindable = true; + } + } + + return $this->rewindable = false; + } +} diff --git a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php new file mode 100644 index 0000000..925830a --- /dev/null +++ b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\NumberComparator; + +/** + * SizeRangeFilterIterator filters out files that are not in the given size range. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class SizeRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param NumberComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (!$fileinfo->isFile()) { + return true; + } + + $filesize = $fileinfo->getSize(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filesize)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php new file mode 100644 index 0000000..1c663e2 --- /dev/null +++ b/vendor/symfony/finder/Iterator/SortableIterator.php @@ -0,0 +1,101 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * SortableIterator applies a sort on a given Iterator. + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class SortableIterator implements \IteratorAggregate +{ + public const SORT_BY_NONE = 0; + public const SORT_BY_NAME = 1; + public const SORT_BY_TYPE = 2; + public const SORT_BY_ACCESSED_TIME = 3; + public const SORT_BY_CHANGED_TIME = 4; + public const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NAME_NATURAL = 6; + + /** @var \Traversable $iterator */ + private \Traversable $iterator; + private \Closure|int $sort; + + /** + * @param \Traversable $iterator + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * + * @throws \InvalidArgumentException + */ + public function __construct(\Traversable $iterator, int|callable $sort, bool $reverseOrder = false) + { + $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; + + if (self::SORT_BY_NAME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_TYPE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + if ($a->isDir() && $b->isFile()) { + return -$order; + } elseif ($a->isFile() && $b->isDir()) { + return $order; + } + + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); + }; + } elseif (self::SORT_BY_CHANGED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); + }; + } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); + }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; + } elseif (\is_callable($sort)) { + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); + } else { + throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); + } + } + + public function getIterator(): \Traversable + { + if (1 === $this->sort) { + return $this->iterator; + } + + $array = iterator_to_array($this->iterator, true); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } + + return new \ArrayIterator($array); + } +} diff --git a/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php new file mode 100644 index 0000000..29fc2d9 --- /dev/null +++ b/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -0,0 +1,178 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Gitignore; + +/** + * @extends \FilterIterator + */ +final class VcsIgnoredFilterIterator extends \FilterIterator +{ + /** + * @var string + */ + private $baseDir; + + /** + * @var array + */ + private $gitignoreFilesCache = []; + + /** + * @var array + */ + private $ignoredPathsCache = []; + + /** + * @param \Iterator $iterator + */ + public function __construct(\Iterator $iterator, string $baseDir) + { + $this->baseDir = $this->normalizePath($baseDir); + + foreach ($this->parentDirectoriesUpwards($this->baseDir) as $parentDirectory) { + if (@is_dir("{$parentDirectory}/.git")) { + $this->baseDir = $parentDirectory; + break; + } + } + + parent::__construct($iterator); + } + + public function accept(): bool + { + $file = $this->current(); + + $fileRealPath = $this->normalizePath($file->getRealPath()); + + return !$this->isIgnored($fileRealPath); + } + + private function isIgnored(string $fileRealPath): bool + { + if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { + $fileRealPath .= '/'; + } + + if (isset($this->ignoredPathsCache[$fileRealPath])) { + return $this->ignoredPathsCache[$fileRealPath]; + } + + $ignored = false; + + foreach ($this->parentDirectoriesDownwards($fileRealPath) as $parentDirectory) { + if ($this->isIgnored($parentDirectory)) { + // rules in ignored directories are ignored, no need to check further. + break; + } + + $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); + + if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { + continue; + } + + [$exclusionRegex, $inclusionRegex] = $regexps; + + if (preg_match($exclusionRegex, $fileRelativePath)) { + $ignored = true; + + continue; + } + + if (preg_match($inclusionRegex, $fileRelativePath)) { + $ignored = false; + } + } + + return $this->ignoredPathsCache[$fileRealPath] = $ignored; + } + + /** + * @return list + */ + private function parentDirectoriesUpwards(string $from): array + { + $parentDirectories = []; + + $parentDirectory = $from; + + while (true) { + $newParentDirectory = \dirname($parentDirectory); + + // dirname('/') = '/' + if ($newParentDirectory === $parentDirectory) { + break; + } + + $parentDirectories[] = $parentDirectory = $newParentDirectory; + } + + return $parentDirectories; + } + + private function parentDirectoriesUpTo(string $from, string $upTo): array + { + return array_filter( + $this->parentDirectoriesUpwards($from), + static function (string $directory) use ($upTo): bool { + return str_starts_with($directory, $upTo); + } + ); + } + + /** + * @return list + */ + private function parentDirectoriesDownwards(string $fileRealPath): array + { + return array_reverse( + $this->parentDirectoriesUpTo($fileRealPath, $this->baseDir) + ); + } + + /** + * @return array{0: string, 1: string}|null + */ + private function readGitignoreFile(string $path): ?array + { + if (\array_key_exists($path, $this->gitignoreFilesCache)) { + return $this->gitignoreFilesCache[$path]; + } + + if (!file_exists($path)) { + return $this->gitignoreFilesCache[$path] = null; + } + + if (!is_file($path) || !is_readable($path)) { + throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); + } + + $gitignoreFileContent = file_get_contents($path); + + return $this->gitignoreFilesCache[$path] = [ + Gitignore::toRegex($gitignoreFileContent), + Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), + ]; + } + + private function normalizePath(string $path): string + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return str_replace('\\', '/', $path); + } + + return $path; + } +} diff --git a/vendor/symfony/finder/LICENSE b/vendor/symfony/finder/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/vendor/symfony/finder/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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/vendor/symfony/finder/README.md b/vendor/symfony/finder/README.md new file mode 100644 index 0000000..22bdeb9 --- /dev/null +++ b/vendor/symfony/finder/README.md @@ -0,0 +1,14 @@ +Finder Component +================ + +The Finder component finds files and directories via an intuitive fluent +interface. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/finder/SplFileInfo.php b/vendor/symfony/finder/SplFileInfo.php new file mode 100644 index 0000000..867e8e8 --- /dev/null +++ b/vendor/symfony/finder/SplFileInfo.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Extends \SplFileInfo to support relative paths. + * + * @author Fabien Potencier + */ +class SplFileInfo extends \SplFileInfo +{ + private string $relativePath; + private string $relativePathname; + + /** + * @param string $file The file name + * @param string $relativePath The relative path + * @param string $relativePathname The relative path name + */ + public function __construct(string $file, string $relativePath, string $relativePathname) + { + parent::__construct($file); + $this->relativePath = $relativePath; + $this->relativePathname = $relativePathname; + } + + /** + * Returns the relative path. + * + * This path does not contain the file name. + */ + public function getRelativePath(): string + { + return $this->relativePath; + } + + /** + * Returns the relative path name. + * + * This path contains the file name. + */ + public function getRelativePathname(): string + { + return $this->relativePathname; + } + + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, \PATHINFO_FILENAME); + } + + /** + * Returns the contents of the file. + * + * @throws \RuntimeException + */ + public function getContents(): string + { + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); + try { + $content = file_get_contents($this->getPathname()); + } finally { + restore_error_handler(); + } + if (false === $content) { + throw new \RuntimeException($error); + } + + return $content; + } +} diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json new file mode 100644 index 0000000..06d129c --- /dev/null +++ b/vendor/symfony/finder/composer.json @@ -0,0 +1,31 @@ +{ + "name": "symfony/finder", + "type": "library", + "description": "Finds files and directories via an intuitive fluent interface", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 0000000..ba75a2c --- /dev/null +++ b/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,232 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param mixed $int + * @param string $function + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int, $function) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/vendor/symfony/polyfill-ctype/LICENSE b/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 0000000..3f853aa --- /dev/null +++ b/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 Fabien Potencier + +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/vendor/symfony/polyfill-ctype/README.md b/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 0000000..b144d03 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 0000000..d54524b --- /dev/null +++ b/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print($text) { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space($text) { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 0000000..ab2f861 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 0000000..ee5c931 --- /dev/null +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/vendor/symfony/yaml/CHANGELOG.md b/vendor/symfony/yaml/CHANGELOG.md new file mode 100644 index 0000000..3fb33a8 --- /dev/null +++ b/vendor/symfony/yaml/CHANGELOG.md @@ -0,0 +1,242 @@ +CHANGELOG +========= + +6.1 +--- + + * In cases where it will likely improve readability, strings containing single quotes will be double-quoted + +5.4 +--- + + * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` + option to exclude one or more specific files from multiple file list + * Allow negatable for the parse tags option with `--no-parse-tags` + +5.3 +--- + + * Added `github` format support & autodetection to render errors as annotations + when running the YAML linter command in a Github Action environment. + +5.1.0 +----- + + * Added support for parsing numbers prefixed with `0o` as octal numbers. + * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` + so that they are parsed as octal numbers. + + Before: + + ```yaml + Yaml::parse('072'); + ``` + + After: + + ```yaml + Yaml::parse('0o72'); + ``` + + * Added `yaml-lint` binary. + * Deprecated using the `!php/object` and `!php/const` tags without a value. + +5.0.0 +----- + + * Removed support for mappings inside multi-line strings. + * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.4.0 +----- + + * Added support for parsing the inline notation spanning multiple lines. + * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. + * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.3.0 +----- + + * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. + +4.2.0 +----- + + * added support for multiple files or directories in `LintCommand` + +4.0.0 +----- + + * The behavior of the non-specific tag `!` is changed and now forces + non-evaluating your values. + * complex mappings will throw a `ParseException` + * support for the comma as a group separator for floats has been dropped, use + the underscore instead + * support for the `!!php/object` tag has been dropped, use the `!php/object` + tag instead + * duplicate mapping keys throw a `ParseException` + * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` + flag to cast them to strings + * `%` at the beginning of an unquoted string throw a `ParseException` + * mappings with a colon (`:`) that is not followed by a whitespace throw a + `ParseException` + * the `Dumper::setIndentation()` method has been removed + * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, + `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of + the parser and dumper is no longer supported, pass bitmask flags instead + * the constructor arguments of the `Parser` class have been removed + * the `Inline` class is internal and no longer part of the BC promise + * removed support for the `!str` tag, use the `!!str` tag instead + * added support for tagged scalars. + + ```yml + Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); + // returns TaggedValue('foo', 'bar'); + ``` + +3.4.0 +----- + + * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method + + * the `Dumper`, `Parser`, and `Yaml` classes are marked as final + + * Deprecated the `!php/object:` tag which will be replaced by the + `!php/object` tag (without the colon) in 4.0. + + * Deprecated the `!php/const:` tag which will be replaced by the + `!php/const` tag (without the colon) in 4.0. + + * Support for the `!str` tag is deprecated, use the `!!str` tag instead. + + * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. + It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. + +3.3.0 +----- + + * Starting an unquoted string with a question mark followed by a space is + deprecated and will throw a `ParseException` in Symfony 4.0. + + * Deprecated support for implicitly parsing non-string mapping keys as strings. + Mapping keys that are no strings will lead to a `ParseException` in Symfony + 4.0. Use quotes to opt-in for keys to be parsed as strings. + + Before: + + ```php + $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); + ``` + +3.0.0 +----- + + * Yaml::parse() now throws an exception when a blackslash is not escaped + in double-quoted strings + +2.8.0 +----- + + * Deprecated usage of a colon in an unquoted mapping value + * Deprecated usage of @, \`, | and > at the beginning of an unquoted string + * When surrounding strings with double-quotes, you must now escape `\` characters. Not + escaping those characters (when surrounded by double-quotes) is deprecated. + + Before: + + ```yml + class: "Foo\Var" + ``` + + After: + + ```yml + class: "Foo\\Var" + ``` + +2.1.0 +----- + + * Yaml::parse() does not evaluate loaded files as PHP files by default + anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/vendor/symfony/yaml/Command/LintCommand.php b/vendor/symfony/yaml/Command/LintCommand.php new file mode 100644 index 0000000..66eb250 --- /dev/null +++ b/vendor/symfony/yaml/Command/LintCommand.php @@ -0,0 +1,279 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Command; + +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\CI\GithubActionReporter; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser; +use Symfony\Component\Yaml\Yaml; + +/** + * Validates YAML files syntax and outputs encountered errors. + * + * @author Grégoire Pineau + * @author Robin Chalas + */ +#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')] +class LintCommand extends Command +{ + private Parser $parser; + private ?string $format = null; + private bool $displayCorrectFiles; + private ?\Closure $directoryIteratorProvider; + private ?\Closure $isReadableProvider; + + public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) + { + parent::__construct($name); + + $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); + $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format') + ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude') + ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null) + ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT +the first encountered syntax error. + +You can validates YAML contents passed from STDIN: + + cat filename | php %command.full_name% - + +You can also validate the syntax of a file: + + php %command.full_name% filename + +Or of a whole directory: + + php %command.full_name% dirname + php %command.full_name% dirname --format=json + +You can also exclude one or more specific files: + + php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml" + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $filenames = (array) $input->getArgument('filename'); + $excludes = $input->getOption('exclude'); + $this->format = $input->getOption('format'); + $flags = $input->getOption('parse-tags'); + + if ('github' === $this->format && !class_exists(GithubActionReporter::class)) { + throw new \InvalidArgumentException('The "github" format is only available since "symfony/console" >= 5.3.'); + } + + if (null === $this->format) { + // Autodetect format according to CI environment + $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt'; + } + + $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0; + + $this->displayCorrectFiles = $output->isVerbose(); + + if (['-'] === $filenames) { + return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); + } + + if (!$filenames) { + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); + } + + $filesInfo = []; + foreach ($filenames as $filename) { + if (!$this->isReadable($filename)) { + throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + } + + foreach ($this->getFiles($filename) as $file) { + if (!\in_array($file->getPathname(), $excludes, true)) { + $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); + } + } + } + + return $this->display($io, $filesInfo); + } + + private function validate(string $content, int $flags, string $file = null) + { + $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { + if (\E_USER_DEPRECATED === $level) { + throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); + } + + return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; + }); + + try { + $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); + } catch (ParseException $e) { + return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; + } finally { + restore_error_handler(); + } + + return ['file' => $file, 'valid' => true]; + } + + private function display(SymfonyStyle $io, array $files): int + { + return match ($this->format) { + 'txt' => $this->displayTxt($io, $files), + 'json' => $this->displayJson($io, $files), + 'github' => $this->displayTxt($io, $files, true), + default => throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)), + }; + } + + private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int + { + $countFiles = \count($filesInfo); + $erroredFiles = 0; + $suggestTagOption = false; + + if ($errorAsGithubAnnotations) { + $githubReporter = new GithubActionReporter($io); + } + + foreach ($filesInfo as $info) { + if ($info['valid'] && $this->displayCorrectFiles) { + $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (!$info['valid']) { + ++$erroredFiles; + $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->text(sprintf(' >> %s', $info['message'])); + + if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) { + $suggestTagOption = true; + } + + if ($errorAsGithubAnnotations) { + $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']); + } + } + } + + if (0 === $erroredFiles) { + $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); + } else { + $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); + } + + return min($erroredFiles, 1); + } + + private function displayJson(SymfonyStyle $io, array $filesInfo): int + { + $errors = 0; + + array_walk($filesInfo, function (&$v) use (&$errors) { + $v['file'] = (string) $v['file']; + if (!$v['valid']) { + ++$errors; + } + + if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) { + $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; + } + }); + + $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); + + return min($errors, 1); + } + + private function getFiles(string $fileOrDirectory): iterable + { + if (is_file($fileOrDirectory)) { + yield new \SplFileInfo($fileOrDirectory); + + return; + } + + foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { + if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { + continue; + } + + yield $file; + } + } + + private function getParser(): Parser + { + return $this->parser ??= new Parser(); + } + + private function getDirectoryIterator(string $directory): iterable + { + $default = function ($directory) { + return new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + }; + + if (null !== $this->directoryIteratorProvider) { + return ($this->directoryIteratorProvider)($directory, $default); + } + + return $default($directory); + } + + private function isReadable(string $fileOrDirectory): bool + { + $default = function ($fileOrDirectory) { + return is_readable($fileOrDirectory); + }; + + if (null !== $this->isReadableProvider) { + return ($this->isReadableProvider)($fileOrDirectory, $default); + } + + return $default($fileOrDirectory); + } + + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ($input->mustSuggestOptionValuesFor('format')) { + $suggestions->suggestValues(['txt', 'json', 'github']); + } + } +} diff --git a/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php new file mode 100644 index 0000000..56979c7 --- /dev/null +++ b/vendor/symfony/yaml/Dumper.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Dumper dumps PHP variables to YAML strings. + * + * @author Fabien Potencier + * + * @final + */ +class Dumper +{ + /** + * The amount of spaces to use for indentation of nested nodes. + */ + private int $indentation; + + public function __construct(int $indentation = 4) + { + if ($indentation < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + + $this->indentation = $indentation; + } + + /** + * Dumps a PHP value to YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The level of indentation (used internally) + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string + { + $output = ''; + $prefix = $indent ? str_repeat(' ', $indent) : ''; + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $input); + } + + if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { + $output .= $prefix.Inline::dump($input, $flags); + } else { + $dumpAsMap = Inline::isHash($input); + + foreach ($input as $key => $value) { + if ('' !== $output && "\n" !== $output[-1]) { + $output .= "\n"; + } + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value, ' ') ? (string) $this->indentation : ''; + + if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) { + $blockChompingIndicator = '+'; + } elseif ("\n" === $value[-1]) { + $blockChompingIndicator = ''; + } else { + $blockChompingIndicator = '-'; + } + + $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator); + + foreach (explode("\n", $value) as $row) { + if ('' === $row) { + $output .= "\n"; + } else { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + } + + continue; + } + + if ($value instanceof TaggedValue) { + $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value->getValue(), ' ') ? (string) $this->indentation : ''; + $output .= sprintf(' |%s', $blockIndentationIndicator); + + foreach (explode("\n", $value->getValue()) as $row) { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + + continue; + } + + if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { + $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; + } else { + $output .= "\n"; + $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); + } + + continue; + } + + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $value); + } + + $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); + + $output .= sprintf('%s%s%s%s', + $prefix, + $dumpAsMap ? Inline::dump($key, $flags).':' : '-', + $willBeInlined ? ' ' : "\n", + $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) + ).($willBeInlined ? "\n" : ''); + } + } + + return $output; + } +} diff --git a/vendor/symfony/yaml/Escaper.php b/vendor/symfony/yaml/Escaper.php new file mode 100644 index 0000000..e8090d8 --- /dev/null +++ b/vendor/symfony/yaml/Escaper.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Escaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Escaper +{ + // Characters that would cause a dumped string to require double quoting. + public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + + // Mapping arrays for escaping a double quoted string. The backslash is + // first to ensure proper escaping because str_replace operates iteratively + // on the input arrays. This ordering of the characters avoids the use of strtr, + // which performs more slowly. + private const ESCAPEES = ['\\', '\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\x7f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", + ]; + private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"', + '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', + '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', + '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', + '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', + '\\x7f', + '\\N', '\\_', '\\L', '\\P', + ]; + + /** + * Determines if a PHP value would require double quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresDoubleQuoting(string $value): bool + { + return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); + } + + /** + * Escapes and surrounds a PHP value with double quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithDoubleQuotes(string $value): string + { + return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value)); + } + + /** + * Determines if a PHP value would require single quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresSingleQuoting(string $value): bool + { + // Determines if a PHP value is entirely composed of a value that would + // require single quoting in YAML. + if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { + return true; + } + + // Determines if the PHP value contains any single characters that would + // cause it to require single quoting in YAML. + return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value); + } + + /** + * Escapes and surrounds a PHP value with single quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithSingleQuotes(string $value): string + { + return sprintf("'%s'", str_replace('\'', '\'\'', $value)); + } +} diff --git a/vendor/symfony/yaml/Exception/DumpException.php b/vendor/symfony/yaml/Exception/DumpException.php new file mode 100644 index 0000000..cce972f --- /dev/null +++ b/vendor/symfony/yaml/Exception/DumpException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during dumping. + * + * @author Fabien Potencier + */ +class DumpException extends RuntimeException +{ +} diff --git a/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/symfony/yaml/Exception/ExceptionInterface.php new file mode 100644 index 0000000..9091316 --- /dev/null +++ b/vendor/symfony/yaml/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/vendor/symfony/yaml/Exception/ParseException.php b/vendor/symfony/yaml/Exception/ParseException.php new file mode 100644 index 0000000..07c59b9 --- /dev/null +++ b/vendor/symfony/yaml/Exception/ParseException.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + */ +class ParseException extends RuntimeException +{ + private ?string $parsedFile; + private int $parsedLine; + private ?string $snippet; + private string $rawMessage; + + /** + * @param string $message The error message + * @param int $parsedLine The line where the error occurred + * @param string|null $snippet The snippet of code near the problem + * @param string|null $parsedFile The file name where the error occurred + */ + public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) + { + $this->parsedFile = $parsedFile; + $this->parsedLine = $parsedLine; + $this->snippet = $snippet; + $this->rawMessage = $message; + + $this->updateRepr(); + + parent::__construct($this->message, 0, $previous); + } + + /** + * Gets the snippet of code near the error. + */ + public function getSnippet(): string + { + return $this->snippet; + } + + /** + * Sets the snippet of code near the error. + */ + public function setSnippet(string $snippet) + { + $this->snippet = $snippet; + + $this->updateRepr(); + } + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + */ + public function getParsedFile(): string + { + return $this->parsedFile; + } + + /** + * Sets the filename where the error occurred. + */ + public function setParsedFile(string $parsedFile) + { + $this->parsedFile = $parsedFile; + + $this->updateRepr(); + } + + /** + * Gets the line where the error occurred. + */ + public function getParsedLine(): int + { + return $this->parsedLine; + } + + /** + * Sets the line where the error occurred. + */ + public function setParsedLine(int $parsedLine) + { + $this->parsedLine = $parsedLine; + + $this->updateRepr(); + } + + private function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if (str_ends_with($this->message, '.')) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if (null !== $this->parsedFile) { + $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); + } + + if ($this->parsedLine >= 0) { + $this->message .= sprintf(' at line %d', $this->parsedLine); + } + + if ($this->snippet) { + $this->message .= sprintf(' (near "%s")', $this->snippet); + } + + if ($dot) { + $this->message .= '.'; + } + } +} diff --git a/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/symfony/yaml/Exception/RuntimeException.php new file mode 100644 index 0000000..3f36b73 --- /dev/null +++ b/vendor/symfony/yaml/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Romain Neutron + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php new file mode 100644 index 0000000..1a862b7 --- /dev/null +++ b/vendor/symfony/yaml/Inline.php @@ -0,0 +1,779 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\DumpException; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Inline implements a YAML parser/dumper for the YAML inline syntax. + * + * @author Fabien Potencier + * + * @internal + */ +class Inline +{ + public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; + + public static int $parsedLineNumber = -1; + public static ?string $parsedFilename = null; + + private static bool $exceptionOnInvalidType = false; + private static bool $objectSupport = false; + private static bool $objectForMap = false; + private static bool $constantSupport = false; + + public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) + { + self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); + self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); + self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); + self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); + self::$parsedFilename = $parsedFilename; + + if (null !== $parsedLineNumber) { + self::$parsedLineNumber = $parsedLineNumber; + } + } + + /** + * Converts a YAML string to a PHP value. + * + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param array $references Mapping of variable names to values + * + * @throws ParseException + */ + public static function parse(string $value = null, int $flags = 0, array &$references = []): mixed + { + self::initialize($flags); + + $value = trim($value); + + if ('' === $value) { + return ''; + } + + $i = 0; + $tag = self::parseTag($value, $i, $flags); + switch ($value[$i]) { + case '[': + $result = self::parseSequence($value, $flags, $i, $references); + ++$i; + break; + case '{': + $result = self::parseMapping($value, $flags, $i, $references); + ++$i; + break; + default: + $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references); + } + + // some comments are allowed at the end + if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (null !== $tag && '' !== $tag) { + return new TaggedValue($tag, $result); + } + + return $result; + } + + /** + * Dumps a given PHP variable to a YAML string. + * + * @param mixed $value The PHP variable to convert + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @throws DumpException When trying to dump PHP resource + */ + public static function dump(mixed $value, int $flags = 0): string + { + switch (true) { + case \is_resource($value): + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); + } + + return self::dumpNull($flags); + case $value instanceof \DateTimeInterface: + return $value->format('c'); + case $value instanceof \UnitEnum: + return sprintf('!php/const %s::%s', \get_class($value), $value->name); + case \is_object($value): + if ($value instanceof TaggedValue) { + return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); + } + + if (Yaml::DUMP_OBJECT & $flags) { + return '!php/object '.self::dump(serialize($value)); + } + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { + $output = []; + + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException('Object support when dumping a YAML file has been disabled.'); + } + + return self::dumpNull($flags); + case \is_array($value): + return self::dumpArray($value, $flags); + case null === $value: + return self::dumpNull($flags); + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case \is_int($value): + return $value; + case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"): + $locale = setlocale(\LC_NUMERIC, 0); + if (false !== $locale) { + setlocale(\LC_NUMERIC, 'C'); + } + if (\is_float($value)) { + $repr = (string) $value; + if (is_infinite($value)) { + $repr = str_ireplace('INF', '.Inf', $repr); + } elseif (floor($value) == $value && $repr == $value) { + // Preserve float data type since storing a whole number will result in integer value. + if (!str_contains($repr, 'E')) { + $repr = $repr.'.0'; + } + } + } else { + $repr = \is_string($value) ? "'$value'" : (string) $value; + } + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + + return $repr; + case '' == $value: + return "''"; + case self::isBinaryString($value): + return '!!binary '.base64_encode($value); + case Escaper::requiresDoubleQuoting($value): + return Escaper::escapeWithDoubleQuotes($value); + case Escaper::requiresSingleQuoting($value): + $singleQuoted = Escaper::escapeWithSingleQuotes($value); + if (!str_contains($value, "'")) { + return $singleQuoted; + } + // Attempt double-quoting the string instead to see if it's more efficient. + $doubleQuoted = Escaper::escapeWithDoubleQuotes($value); + + return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted; + case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): + case Parser::preg_match(self::getHexRegex(), $value): + case Parser::preg_match(self::getTimestampRegex(), $value): + return Escaper::escapeWithSingleQuotes($value); + default: + return $value; + } + } + + /** + * Check if given array is hash or just normal indexed array. + */ + public static function isHash(array|\ArrayObject|\stdClass $value): bool + { + if ($value instanceof \stdClass || $value instanceof \ArrayObject) { + return true; + } + + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + + /** + * Dumps a PHP array to a YAML string. + * + * @param array $value The PHP array to dump + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + private static function dumpArray(array $value, int $flags): string + { + // array + if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { + $output = []; + foreach ($value as $val) { + $output[] = self::dump($val, $flags); + } + + return sprintf('[%s]', implode(', ', $output)); + } + + // hash + $output = []; + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + private static function dumpNull(int $flags): string + { + if (Yaml::DUMP_NULL_AS_TILDE & $flags) { + return '~'; + } + + return 'null'; + } + + /** + * Parses a YAML scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null): mixed + { + if (\in_array($scalar[$i], ['"', "'"], true)) { + // quoted scalar + $isQuoted = true; + $output = self::parseQuotedScalar($scalar, $i); + + if (null !== $delimiters) { + $tmp = ltrim(substr($scalar, $i), " \n"); + if ('' === $tmp) { + throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (!\in_array($tmp[0], $delimiters)) { + throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + } + } else { + // "normal" string + $isQuoted = false; + + if (!$delimiters) { + $output = substr($scalar, $i); + $i += \strlen($output); + + // remove comments + if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) { + $output = substr($output, 0, $match[0][1]); + } + } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { + $output = $match[1]; + $i += \strlen($output); + $output = trim($output); + } else { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) + if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { + throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); + } + + if ($evaluate) { + $output = self::evaluateScalar($output, $flags, $references, $isQuoted); + } + } + + return $output; + } + + /** + * Parses a YAML quoted scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseQuotedScalar(string $scalar, int &$i = 0): string + { + if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $output = substr($match[0], 1, -1); + + $unescaper = new Unescaper(); + if ('"' == $scalar[$i]) { + $output = $unescaper->unescapeDoubleQuotedString($output); + } else { + $output = $unescaper->unescapeSingleQuotedString($output); + } + + $i += \strlen($match[0]); + + return $output; + } + + /** + * Parses a YAML sequence. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array + { + $output = []; + $len = \strlen($sequence); + ++$i; + + // [foo, bar, ...] + while ($i < $len) { + if (']' === $sequence[$i]) { + return $output; + } + if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($sequence, $i, $flags); + switch ($sequence[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($sequence, $flags, $i, $references); + break; + case '{': + // nested mapping + $value = self::parseMapping($sequence, $flags, $i, $references); + break; + default: + $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); + + // the value can be an array if a reference has been resolved to an array var + if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { + // embedded mapping? + try { + $pos = 0; + $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); + } catch (\InvalidArgumentException) { + // no, it's not + } + } + + if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + --$i; + } + + if (null !== $tag && '' !== $tag) { + $value = new TaggedValue($tag, $value); + } + + $output[] = $value; + + ++$i; + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Parses a YAML mapping. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass + { + $output = []; + $len = \strlen($mapping); + ++$i; + $allowOverwrite = false; + + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + case "\n": + ++$i; + continue 2; + case '}': + if (self::$objectForMap) { + return (object) $output; + } + + return $output; + } + + // key + $offsetBeforeKeyParsing = $i; + $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); + $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); + + if ($offsetBeforeKeyParsing === $i) { + throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); + } + + if ('!php/const' === $key) { + $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false); + $key = self::evaluateScalar($key, $flags); + } + + if (false === $i = strpos($mapping, ':', $i)) { + break; + } + + if (!$isKeyQuoted) { + $evaluatedKey = self::evaluateScalar($key, $flags, $references); + + if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { + throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); + } + } + + if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { + throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); + } + + if ('<<' === $key) { + $allowOverwrite = true; + } + + while ($i < $len) { + if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($mapping, $i, $flags); + switch ($mapping[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + foreach ($value as $parsedValue) { + $output += $parsedValue; + } + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + case '{': + // nested mapping + $value = self::parseMapping($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + default: + $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + --$i; + } + ++$i; + + continue 2; + } + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Evaluates scalars and replaces magic values. + * + * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved + */ + private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null): mixed + { + $isQuotedString = false; + $scalar = trim($scalar); + + if (str_starts_with($scalar, '*')) { + if (false !== $pos = strpos($scalar, '#')) { + $value = substr($scalar, 1, $pos - 2); + } else { + $value = substr($scalar, 1); + } + + // an unquoted * + if (false === $value || '' === $value) { + throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (!\array_key_exists($value, $references)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + return $references[$value]; + } + + $scalarLower = strtolower($scalar); + + switch (true) { + case 'null' === $scalarLower: + case '' === $scalar: + case '~' === $scalar: + return null; + case 'true' === $scalarLower: + return true; + case 'false' === $scalarLower: + return false; + case '!' === $scalar[0]: + switch (true) { + case str_starts_with($scalar, '!!str '): + $s = (string) substr($scalar, 6); + + if (\in_array($s[0] ?? '', ['"', "'"], true)) { + $isQuotedString = true; + $s = self::parseQuotedScalar($s); + } + + return $s; + case str_starts_with($scalar, '! '): + return substr($scalar, 2); + case str_starts_with($scalar, '!php/object'): + if (self::$objectSupport) { + if (!isset($scalar[12])) { + throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return unserialize(self::parseScalar(substr($scalar, 12))); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!php/const'): + if (self::$constantSupport) { + if (!isset($scalar[11])) { + throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $i = 0; + if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { + return \constant($const); + } + + throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (self::$exceptionOnInvalidType) { + throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!!float '): + return (float) substr($scalar, 8); + case str_starts_with($scalar, '!!binary '): + return self::evaluateBinaryScalar(substr($scalar, 9)); + } + + throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); + case preg_match('/^(?:\+|-)?0o(?P[0-7_]++)$/', $scalar, $matches): + $value = str_replace('_', '', $matches['value']); + + if ('-' === $scalar[0]) { + return -octdec($value); + } + + return octdec($value); + // Optimize for returning strings. + case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]): + if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { + $scalar = str_replace('_', '', $scalar); + } + + switch (true) { + case ctype_digit($scalar): + case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): + $cast = (int) $scalar; + + return ($scalar === (string) $cast) ? $cast : $scalar; + case is_numeric($scalar): + case Parser::preg_match(self::getHexRegex(), $scalar): + $scalar = str_replace('_', '', $scalar); + + return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; + case '.inf' === $scalarLower: + case '.nan' === $scalarLower: + return -log(0); + case '-.inf' === $scalarLower: + return log(0); + case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): + return (float) str_replace('_', '', $scalar); + case Parser::preg_match(self::getTimestampRegex(), $scalar): + // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. + $time = new \DateTime($scalar, new \DateTimeZone('UTC')); + + if (Yaml::PARSE_DATETIME & $flags) { + return $time; + } + + try { + if (false !== $scalar = $time->getTimestamp()) { + return $scalar; + } + } catch (\ValueError) { + // no-op + } + + return $time->format('U'); + } + } + + return (string) $scalar; + } + + private static function parseTag(string $value, int &$i, int $flags): ?string + { + if ('!' !== $value[$i]) { + return null; + } + + $tagLength = strcspn($value, " \t\n[]{},", $i + 1); + $tag = substr($value, $i + 1, $tagLength); + + $nextOffset = $i + $tagLength + 1; + $nextOffset += strspn($value, ' ', $nextOffset); + + if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { + throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + // Is followed by a scalar and is a built-in tag + if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) { + // Manage in {@link self::evaluateScalar()} + return null; + } + + $i = $nextOffset; + + // Built-in tags + if ('' !== $tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' !== $tag && !isset($value[$i])) { + throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + public static function evaluateBinaryScalar(string $scalar): string + { + $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); + + if (0 !== (\strlen($parsedBinaryData) % 4)) { + throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { + throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return base64_decode($parsedBinaryData, true); + } + + private static function isBinaryString(string $value): bool + { + return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); + } + + /** + * Gets a regex that matches a YAML date. + * + * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 + */ + private static function getTimestampRegex(): string + { + return <<[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)? + $~x +EOF; + } + + /** + * Gets a regex that matches a YAML number in hexadecimal notation. + */ + private static function getHexRegex(): string + { + return '~^0x[0-9a-f_]++$~i'; + } +} diff --git a/vendor/symfony/yaml/LICENSE b/vendor/symfony/yaml/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/vendor/symfony/yaml/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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/vendor/symfony/yaml/Parser.php b/vendor/symfony/yaml/Parser.php new file mode 100644 index 0000000..9a3741b --- /dev/null +++ b/vendor/symfony/yaml/Parser.php @@ -0,0 +1,1255 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Parser parses YAML strings to convert them to PHP arrays. + * + * @author Fabien Potencier + * + * @final + */ +class Parser +{ + public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; + public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; + public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; + + private ?string $filename = null; + private int $offset = 0; + private int $numberOfParsedLines = 0; + private ?int $totalNumberOfLines = null; + private array $lines = []; + private int $currentLineNb = -1; + private string $currentLine = ''; + private array $refs = []; + private array $skippedLineNumbers = []; + private array $locallySkippedLineNumbers = []; + private array $refsBeingParsed = []; + + /** + * Parses a YAML file into a PHP value. + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public function parseFile(string $filename, int $flags = 0): mixed + { + if (!is_file($filename)) { + throw new ParseException(sprintf('File "%s" does not exist.', $filename)); + } + + if (!is_readable($filename)) { + throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); + } + + $this->filename = $filename; + + try { + return $this->parse(file_get_contents($filename), $flags); + } finally { + $this->filename = null; + } + } + + /** + * Parses a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public function parse(string $value, int $flags = 0): mixed + { + if (false === preg_match('//u', $value)) { + throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); + } + + $this->refs = []; + + try { + $data = $this->doParse($value, $flags); + } finally { + $this->refsBeingParsed = []; + $this->offset = 0; + $this->lines = []; + $this->currentLine = ''; + $this->numberOfParsedLines = 0; + $this->refs = []; + $this->skippedLineNumbers = []; + $this->locallySkippedLineNumbers = []; + $this->totalNumberOfLines = null; + } + + return $data; + } + + private function doParse(string $value, int $flags) + { + $this->currentLineNb = -1; + $this->currentLine = ''; + $value = $this->cleanup($value); + $this->lines = explode("\n", $value); + $this->numberOfParsedLines = \count($this->lines); + $this->locallySkippedLineNumbers = []; + + if (null === $this->totalNumberOfLines) { + $this->totalNumberOfLines = $this->numberOfParsedLines; + } + + if (!$this->moveToNextLine()) { + return null; + } + + $data = []; + $context = null; + $allowOverwrite = false; + + while ($this->isCurrentLineEmpty()) { + if (!$this->moveToNextLine()) { + return null; + } + } + + // Resolves the tag and returns if end of the document + if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { + return new TaggedValue($tag, ''); + } + + do { + if ($this->isCurrentLineEmpty()) { + continue; + } + + // tab? + if ("\t" === $this->currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); + + $isRef = $mergeNode = false; + if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { + if ($context && 'mapping' == $context) { + throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + $context = 'sequence'; + + if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // array + if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) { + // Inline first child + $currentLineNumber = $this->getRealCurrentLineNb(); + + $sequenceIndentation = \strlen($values['leadspaces']) + 1; + $sequenceYaml = substr($this->currentLine, $sequenceIndentation); + $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true); + + $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags); + } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) { + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); + } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { + $data[] = new TaggedValue( + $subTag, + $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) + ); + } else { + if ( + isset($values['leadspaces']) + && ( + '!' === $values['value'][0] + || self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) + ) + ) { + // this is a compact notation element, add to next block and parse + $block = $values['value']; + if ($this->isNextLineIndented()) { + $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); + } + + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); + } else { + $data[] = $this->parseValue($values['value'], $flags, $context); + } + } + if ($isRef) { + $this->refs[$isRef] = end($data); + array_pop($this->refsBeingParsed); + } + } elseif ( + self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values) + && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) + ) { + if ($context && 'sequence' == $context) { + throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + $context = 'mapping'; + + try { + $key = Inline::parseScalar($values['key']); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if (!\is_string($key) && !\is_int($key)) { + throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // Convert float keys to strings, to avoid being converted to integers by PHP + if (\is_float($key)) { + $key = (string) $key; + } + + if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { + $mergeNode = true; + $allowOverwrite = true; + if (isset($values['value'][0]) && '*' === $values['value'][0]) { + $refName = substr(rtrim($values['value']), 1); + if (!\array_key_exists($refName, $this->refs)) { + if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $refValue = $this->refs[$refName]; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { + $refValue = (array) $refValue; + } + + if (!\is_array($refValue)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $data += $refValue; // array union + } else { + if (isset($values['value']) && '' !== $values['value']) { + $value = $values['value']; + } else { + $value = $this->getNextEmbedBlock(); + } + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { + $parsed = (array) $parsed; + } + + if (!\is_array($parsed)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (isset($parsed[0])) { + // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes + // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier + // in the sequence override keys specified in later mapping nodes. + foreach ($parsed as $parsedItem) { + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { + $parsedItem = (array) $parsedItem; + } + + if (!\is_array($parsedItem)) { + throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); + } + + $data += $parsedItem; // array union + } + } else { + // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the + // current mapping, unless the key already exists in it. + $data += $parsed; // array union + } + } + } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + $subTag = null; + if ($mergeNode) { + // Merge keys + } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { + // hash + // if next line is less indented or equal, then it means that the current value is null + if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, ''); + } else { + $data[$key] = null; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + // remember the parsed line number here in case we need it to provide some contexts in error messages below + $realCurrentLineNbKey = $this->getRealCurrentLineNb(); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); + if ('<<' === $key) { + $this->refs[$refMatches['ref']] = $value; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { + $value = (array) $value; + } + + $data += $value; + } elseif ($allowOverwrite || !isset($data[$key])) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, $value); + } else { + $data[$key] = $value; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); + } + } + } else { + $value = $this->parseValue(rtrim($values['value']), $flags, $context); + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + $data[$key] = $value; + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } + if ($isRef) { + $this->refs[$isRef] = $data[$key]; + array_pop($this->refsBeingParsed); + } + } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('{' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedMapping; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('[' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedSequence; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } else { + // multiple documents are not supported + if ('---' === $this->currentLine) { + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // 1-liner optionally followed by newline(s) + if (\is_string($value) && $this->lines[0] === trim($value)) { + try { + $value = Inline::parse($this->lines[0], $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + return $value; + } + + // try to parse the value as a multi-line string as a last resort + if (0 === $this->currentLineNb) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + $value = ''; + + foreach ($this->lines as $line) { + $trimmedLine = trim($line); + if ('#' === ($trimmedLine[0] ?? '')) { + continue; + } + // If the indentation is not consistent at offset 0, it is to be considered as a ParseError + if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (str_contains($line, ': ')) { + throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if ('' === $trimmedLine) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + if ('' !== $trimmedLine && str_ends_with($line, '\\')) { + $value .= ltrim(substr($line, 0, -1)); + } elseif ('' !== $trimmedLine) { + $value .= $trimmedLine; + } + + if ('' === $trimmedLine) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif (str_ends_with($line, '\\')) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + } + + try { + return Inline::parse(trim($value)); + } catch (ParseException) { + // fall-through to the ParseException thrown below + } + } + + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } while ($this->moveToNextLine()); + + if (null !== $tag) { + $data = new TaggedValue($tag, $data); + } + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) { + $object = new \stdClass(); + + foreach ($data as $key => $value) { + $object->$key = $value; + } + + $data = $object; + } + + return empty($data) ? null : $data; + } + + private function parseBlock(int $offset, string $yaml, int $flags) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self(); + $parser->offset = $offset; + $parser->totalNumberOfLines = $this->totalNumberOfLines; + $parser->skippedLineNumbers = $skippedLineNumbers; + $parser->refs = &$this->refs; + $parser->refsBeingParsed = $this->refsBeingParsed; + + return $parser->doParse($yaml, $flags); + } + + /** + * Returns the current line number (takes the offset into account). + * + * @internal + */ + public function getRealCurrentLineNb(): int + { + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; + } + + private function getCurrentLineIndentation(): int + { + if (' ' !== ($this->currentLine[0] ?? '')) { + return 0; + } + + return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); + } + + /** + * Returns the next embed block of YAML. + * + * @param int|null $indentation The indent level at which the block is to be read, or null for default + * @param bool $inSequence True if the enclosing data structure is a sequence + * + * @throws ParseException When indentation problem are detected + */ + private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string + { + $oldLineIndentation = $this->getCurrentLineIndentation(); + + if (!$this->moveToNextLine()) { + return ''; + } + + if (null === $indentation) { + $newIndent = null; + $movements = 0; + + do { + $EOF = false; + + // empty and comment-like lines do not influence the indentation depth + if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } else { + $newIndent = $this->getCurrentLineIndentation(); + } + } while (!$EOF && null === $newIndent); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); + + if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } else { + $newIndent = $indentation; + } + + $data = []; + + if ($this->getCurrentLineIndentation() >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent ?? 0); + } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } else { + $this->moveToPreviousLine(); + + return ''; + } + + if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { + // the previous line contained a dash but no item content, this line is a sequence item with the same indentation + // and therefore no nested list or mapping + $this->moveToPreviousLine(); + + return ''; + } + + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + + while ($this->moveToNextLine()) { + if ($isItComment && !$isItUnindentedCollection) { + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + } + + $indent = $this->getCurrentLineIndentation(); + + if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { + $this->moveToPreviousLine(); + break; + } + + if ($this->isCurrentLineBlank()) { + $data[] = substr($this->currentLine, $newIndent); + continue; + } + + if ($indent >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif ($this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } elseif (0 == $indent) { + $this->moveToPreviousLine(); + + break; + } else { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return implode("\n", $data); + } + + private function hasMoreLines(): bool + { + return (\count($this->lines) - 1) > $this->currentLineNb; + } + + /** + * Moves the parser to the next line. + */ + private function moveToNextLine(): bool + { + if ($this->currentLineNb >= $this->numberOfParsedLines - 1) { + return false; + } + + $this->currentLine = $this->lines[++$this->currentLineNb]; + + return true; + } + + /** + * Moves the parser to the previous line. + */ + private function moveToPreviousLine(): bool + { + if ($this->currentLineNb < 1) { + return false; + } + + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; + } + + /** + * Parses a YAML value. + * + * @param string $value A YAML value + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $context The parser context (either sequence or mapping) + * + * @throws ParseException When reference does not exist + */ + private function parseValue(string $value, int $flags, string $context): mixed + { + if (str_starts_with($value, '*')) { + if (false !== $pos = strpos($value, '#')) { + $value = substr($value, 1, $pos - 2); + } else { + $value = substr($value, 1); + } + + if (!\array_key_exists($value, $this->refs)) { + if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + return $this->refs[$value]; + } + + if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { + $modifiers = $matches['modifiers'] ?? ''; + + $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers)); + + if ('' !== $matches['tag'] && '!' !== $matches['tag']) { + if ('!!binary' === $matches['tag']) { + return Inline::evaluateBinaryScalar($data); + } + + return new TaggedValue(substr($matches['tag'], 1), $data); + } + + return $data; + } + + try { + if ('' !== $value && '{' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); + } elseif ('' !== $value && '[' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); + } + + switch ($value[0] ?? '') { + case '"': + case "'": + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); + + if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); + } + + return $parsedValue; + default: + $lines = []; + + while ($this->moveToNextLine()) { + // unquoted strings end before the first unindented line + if (0 === $this->getCurrentLineIndentation()) { + $this->moveToPreviousLine(); + + break; + } + + $lines[] = trim($this->currentLine); + } + + for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { + if ('' === $lines[$i]) { + $value .= "\n"; + $previousLineBlank = true; + } elseif ($previousLineBlank) { + $value .= $lines[$i]; + $previousLineBlank = false; + } else { + $value .= ' '.$lines[$i]; + $previousLineBlank = false; + } + } + + Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); + + $parsedValue = Inline::parse($value, $flags, $this->refs); + + if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { + throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + return $parsedValue; + } + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } + + /** + * Parses a block scalar. + * + * @param string $style The style indicator that was used to begin this block scalar (| or >) + * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) + * @param int $indentation The indentation indicator that was used to begin this block scalar + */ + private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string + { + $notEOF = $this->moveToNextLine(); + if (!$notEOF) { + return ''; + } + + $isCurrentLineBlank = $this->isCurrentLineBlank(); + $blockLines = []; + + // leading blank lines are consumed before determining indentation + while ($notEOF && $isCurrentLineBlank) { + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $blockLines[] = ''; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + + // determine indentation if not specified + if (0 === $indentation) { + $currentLineLength = \strlen($this->currentLine); + + for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { + ++$indentation; + } + } + + if ($indentation > 0) { + $pattern = sprintf('/^ {%d}(.*)$/', $indentation); + + while ( + $notEOF && ( + $isCurrentLineBlank || + self::preg_match($pattern, $this->currentLine, $matches) + ) + ) { + if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { + $blockLines[] = substr($this->currentLine, $indentation); + } elseif ($isCurrentLineBlank) { + $blockLines[] = ''; + } else { + $blockLines[] = $matches[1]; + } + + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + } elseif ($notEOF) { + $blockLines[] = ''; + } + + if ($notEOF) { + $blockLines[] = ''; + $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; + } + + // folded style + if ('>' === $style) { + $text = ''; + $previousLineIndented = false; + $previousLineBlank = false; + + for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { + if ('' === $blockLines[$i]) { + $text .= "\n"; + $previousLineIndented = false; + $previousLineBlank = true; + } elseif (' ' === $blockLines[$i][0]) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = true; + $previousLineBlank = false; + } elseif ($previousLineIndented) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } elseif ($previousLineBlank || 0 === $i) { + $text .= $blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } else { + $text .= ' '.$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } + } + } else { + $text = implode("\n", $blockLines); + } + + // deal with trailing newlines + if ('' === $chomping) { + $text = preg_replace('/\n+$/', "\n", $text); + } elseif ('-' === $chomping) { + $text = preg_replace('/\n+$/', '', $text); + } + + return $text; + } + + /** + * Returns true if the next line is indented. + */ + private function isNextLineIndented(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() > $currentIndentation; + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isCurrentLineEmpty(): bool + { + return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); + } + + private function isCurrentLineBlank(): bool + { + return '' === $this->currentLine || '' === trim($this->currentLine, ' '); + } + + private function isCurrentLineComment(): bool + { + //checking explicitly the first char of the trim is faster than loops or strpos + $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine; + + return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; + } + + private function isCurrentLineLastLineInDocument(): bool + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); + } + + private function cleanup(string $value): string + { + $value = str_replace(["\r\n", "\r"], "\n", $value); + + // strip YAML header + $count = 0; + $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); + $this->offset += $count; + + // remove leading comments + $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + } + + // remove start of the document marker (---) + $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + + // remove end of the document marker (...) + $value = preg_replace('#\.\.\.\s*$#', '', $value); + } + + return $value; + } + + private function isNextLineUnIndentedCollection(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isStringUnIndentedCollectionItem(): bool + { + return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- '); + } + + /** + * A local wrapper for "preg_match" which will throw a ParseException if there + * is an internal error in the PCRE engine. + * + * This avoids us needing to check for "false" every time PCRE is used + * in the YAML engine + * + * @throws ParseException on a PCRE internal error + * + * @see preg_last_error() + * + * @internal + */ + public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int + { + if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { + $error = match (preg_last_error()) { + \PREG_INTERNAL_ERROR => 'Internal PCRE error.', + \PREG_BACKTRACK_LIMIT_ERROR => 'pcre.backtrack_limit reached.', + \PREG_RECURSION_LIMIT_ERROR => 'pcre.recursion_limit reached.', + \PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data.', + \PREG_BAD_UTF8_OFFSET_ERROR => 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.', + default => 'Error.', + }; + + throw new ParseException($error); + } + + return $ret; + } + + /** + * Trim the tag on top of the value. + * + * Prevent values such as "!foo {quz: bar}" to be considered as + * a mapping block. + */ + private function trimTag(string $value): string + { + if ('!' === $value[0]) { + return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); + } + + return $value; + } + + private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string + { + if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { + return null; + } + + if ($nextLineCheck && !$this->isNextLineIndented()) { + return null; + } + + $tag = substr($matches['tag'], 1); + + // Built-in tags + if ($tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + if (Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + private function lexInlineQuotedString(int &$cursor = 0): string + { + $quotation = $this->currentLine[$cursor]; + $value = $quotation; + ++$cursor; + + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + $lineNumber = 0; + + do { + if (++$lineNumber > 1) { + $cursor += strspn($this->currentLine, ' ', $cursor); + } + + if ($this->isCurrentLineBlank()) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + for (; \strlen($this->currentLine) > $cursor; ++$cursor) { + switch ($this->currentLine[$cursor]) { + case '\\': + if ("'" === $quotation) { + $value .= '\\'; + } elseif (isset($this->currentLine[++$cursor])) { + $value .= '\\'.$this->currentLine[$cursor]; + } + + break; + case $quotation: + ++$cursor; + + if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) { + $value .= "''"; + break; + } + + return $value.$quotation; + default: + $value .= $this->currentLine[$cursor]; + } + } + + if ($this->isCurrentLineBlank()) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif ('\\' === $this->currentLine[-1]) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function lexUnquotedString(int &$cursor): string + { + $offset = $cursor; + $cursor += strcspn($this->currentLine, '[]{},: ', $cursor); + + if ($cursor === $offset) { + throw new ParseException('Malformed unquoted YAML string.'); + } + + return substr($this->currentLine, $offset, $cursor - $offset); + } + + private function lexInlineMapping(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, '}'); + } + + private function lexInlineSequence(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, ']'); + } + + private function lexInlineStructure(int &$cursor, string $closingTag): string + { + $value = $this->currentLine[$cursor]; + ++$cursor; + + do { + $this->consumeWhitespaces($cursor); + + while (isset($this->currentLine[$cursor])) { + switch ($this->currentLine[$cursor]) { + case '"': + case "'": + $value .= $this->lexInlineQuotedString($cursor); + break; + case ':': + case ',': + $value .= $this->currentLine[$cursor]; + ++$cursor; + break; + case '{': + $value .= $this->lexInlineMapping($cursor); + break; + case '[': + $value .= $this->lexInlineSequence($cursor); + break; + case $closingTag: + $value .= $this->currentLine[$cursor]; + ++$cursor; + + return $value; + case '#': + break 2; + default: + $value .= $this->lexUnquotedString($cursor); + } + + if ($this->consumeWhitespaces($cursor)) { + $value .= ' '; + } + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function consumeWhitespaces(int &$cursor): bool + { + $whitespacesConsumed = 0; + + do { + $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor); + $whitespacesConsumed += $whitespaceOnlyTokenLength; + $cursor += $whitespaceOnlyTokenLength; + + if (isset($this->currentLine[$cursor])) { + return 0 < $whitespacesConsumed; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + return 0 < $whitespacesConsumed; + } +} diff --git a/vendor/symfony/yaml/README.md b/vendor/symfony/yaml/README.md new file mode 100644 index 0000000..ac25024 --- /dev/null +++ b/vendor/symfony/yaml/README.md @@ -0,0 +1,13 @@ +Yaml Component +============== + +The Yaml component loads and dumps YAML files. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/yaml.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/yaml/Resources/bin/yaml-lint b/vendor/symfony/yaml/Resources/bin/yaml-lint new file mode 100755 index 0000000..0ad73d7 --- /dev/null +++ b/vendor/symfony/yaml/Resources/bin/yaml-lint @@ -0,0 +1,45 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Runs the Yaml lint command. + * + * @author Jan Schädlich + */ + +use Symfony\Component\Console\Application; +use Symfony\Component\Yaml\Command\LintCommand; + +function includeIfExists(string $file): bool +{ + return file_exists($file) && include $file; +} + +if ( + !includeIfExists(__DIR__ . '/../../../../autoload.php') && + !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && + !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') +) { + fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); + exit(1); +} + +if (!class_exists(Application::class)) { + fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL); + exit(1); +} + +(new Application())->add($command = new LintCommand()) + ->getApplication() + ->setDefaultCommand($command->getName(), true) + ->run() +; diff --git a/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/symfony/yaml/Tag/TaggedValue.php new file mode 100644 index 0000000..c7946c2 --- /dev/null +++ b/vendor/symfony/yaml/Tag/TaggedValue.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Tag; + +/** + * @author Nicolas Grekas + * @author Guilhem N. + */ +final class TaggedValue +{ + private string $tag; + private mixed $value; + + public function __construct(string $tag, mixed $value) + { + $this->tag = $tag; + $this->value = $value; + } + + public function getTag(): string + { + return $this->tag; + } + + public function getValue() + { + return $this->value; + } +} diff --git a/vendor/symfony/yaml/Unescaper.php b/vendor/symfony/yaml/Unescaper.php new file mode 100644 index 0000000..2238210 --- /dev/null +++ b/vendor/symfony/yaml/Unescaper.php @@ -0,0 +1,110 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Unescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Unescaper +{ + /** + * Regex fragment that matches an escaped character in a double quoted string. + */ + public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; + + /** + * Unescapes a single quoted string. + * + * @param string $value A single quoted string + */ + public function unescapeSingleQuotedString(string $value): string + { + return str_replace('\'\'', '\'', $value); + } + + /** + * Unescapes a double quoted string. + * + * @param string $value A double quoted string + */ + public function unescapeDoubleQuotedString(string $value): string + { + $callback = function ($match) { + return $this->unescapeCharacter($match[0]); + }; + + // evaluate the string + return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); + } + + /** + * Unescapes a character that was found in a double-quoted string. + * + * @param string $value An escaped character + */ + private function unescapeCharacter(string $value): string + { + return match ($value[1]) { + '0' => "\x0", + 'a' => "\x7", + 'b' => "\x8", + 't' => "\t", + "\t" => "\t", + 'n' => "\n", + 'v' => "\xB", + 'f' => "\xC", + 'r' => "\r", + 'e' => "\x1B", + ' ' => ' ', + '"' => '"', + '/' => '/', + '\\' => '\\', + // U+0085 NEXT LINE + 'N' => "\xC2\x85", + // U+00A0 NO-BREAK SPACE + '_' => "\xC2\xA0", + // U+2028 LINE SEPARATOR + 'L' => "\xE2\x80\xA8", + // U+2029 PARAGRAPH SEPARATOR + 'P' => "\xE2\x80\xA9", + 'x' => self::utf8chr(hexdec(substr($value, 2, 2))), + 'u' => self::utf8chr(hexdec(substr($value, 2, 4))), + 'U' => self::utf8chr(hexdec(substr($value, 2, 8))), + default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)), + }; + } + + /** + * Get the UTF-8 character for the given code point. + */ + private static function utf8chr(int $c): string + { + if (0x80 > $c %= 0x200000) { + return \chr($c); + } + if (0x800 > $c) { + return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); + } + if (0x10000 > $c) { + return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } + + return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } +} diff --git a/vendor/symfony/yaml/Yaml.php b/vendor/symfony/yaml/Yaml.php new file mode 100644 index 0000000..4978421 --- /dev/null +++ b/vendor/symfony/yaml/Yaml.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Yaml offers convenience methods to load and dump YAML. + * + * @author Fabien Potencier + * + * @final + */ +class Yaml +{ + public const DUMP_OBJECT = 1; + public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; + public const PARSE_OBJECT = 4; + public const PARSE_OBJECT_FOR_MAP = 8; + public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; + public const PARSE_DATETIME = 32; + public const DUMP_OBJECT_AS_MAP = 64; + public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; + public const PARSE_CONSTANT = 256; + public const PARSE_CUSTOM_TAGS = 512; + public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; + public const DUMP_NULL_AS_TILDE = 2048; + + /** + * Parses a YAML file into a PHP value. + * + * Usage: + * + * $array = Yaml::parseFile('config.yml'); + * print_r($array); + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public static function parseFile(string $filename, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parseFile($filename, $flags); + } + + /** + * Parses YAML into a PHP value. + * + * Usage: + * + * $array = Yaml::parse(file_get_contents('config.yml')); + * print_r($array); + * + * + * @param string $input A string containing YAML + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public static function parse(string $input, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parse($input, $flags); + } + + /** + * Dumps a PHP value to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The amount of spaces to use for indentation of nested nodes + * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string + */ + public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string + { + $yaml = new Dumper($indent); + + return $yaml->dump($input, $inline, 0, $flags); + } +} diff --git a/vendor/symfony/yaml/composer.json b/vendor/symfony/yaml/composer.json new file mode 100644 index 0000000..839314b --- /dev/null +++ b/vendor/symfony/yaml/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/yaml", + "type": "library", + "description": "Loads and dumps YAML files", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "minimum-stability": "dev" +} diff --git a/vendor/zircote/swagger-php/Changelog.md b/vendor/zircote/swagger-php/Changelog.md new file mode 100644 index 0000000..08943b3 --- /dev/null +++ b/vendor/zircote/swagger-php/Changelog.md @@ -0,0 +1,3 @@ +# Changelog + +The changelog is moved to the [releases page](https://github.com/zircote/swagger-php/releases) diff --git a/vendor/zircote/swagger-php/Examples/Readme.md b/vendor/zircote/swagger-php/Examples/Readme.md new file mode 100644 index 0000000..d0c2790 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/Readme.md @@ -0,0 +1,71 @@ +## Code/Annotation examples + +Collection of code/annotation examples and their corresponding OpenAPI specs generated using swagger-php. + +* **petstore.swagger.io** + + The [swagger-ui](http://petstore.swagger.io/) petstore example using swagger-php annotations. + + * petstore.swagger.io: [source](petstore.swagger.io) / [spec](petstore.swagger.io/petstore.swagger.io.yaml) + + +* **swagger-spec** + + Some more examples based on the (now defunct) [swagger-api](https://github.com/swagger-api/) specs. + + * petstore: [source](swagger-spec/petstore) / [spec](swagger-spec/petstore/petstore.yaml) + * petstore-simple: [source](swagger-spec/petstore-simple) + / [spec](swagger-spec/petstore-simple/petstore-simple.yaml) + * petstore-with-external-docs: [source](swagger-spec/petstore-with-external-docs) + / [spec](swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml) + * petstore-3.0 (includes oauth2 auth flow): [source](petstore-3.0) / [spec](openapi-spec/petstore-3.0.yaml) + + +* **Other** + + * using-links: [source](using-links) / [spec](using-links/using-links.yaml) + * using-links-php81: [source](using-links-php81) / [spec](using-links-php81/using-links-php81.yaml) - **requires PHP 8.1** + * simple response object: [source](example-object) / [spec](example-object/example-object.yaml) + * misc: [source](misc) / [spec](misc/misc.yaml) + * using interfaces: [source](using-interfaces) / [spec](using-interfaces/using-interfaces.yaml) + * using traits: [source](using-traits) / [spec](using-traits/using-traits.yaml) + * using refs: [source](using-refs) / [spec](using-refs/using-refs.yaml) + * nested schemas and class hierachies: [source](nesting) / [spec](nesting/nesting.yaml) + * polymorphism using `@OA\Discriminator`: [source](polymorphism) / [spec](polymorphism/polymorphism.yaml) + + +## Custom processors + +[Processors](../src/Processors) implement the various steps involved in converting annotations into an OpenAPI spec. + +Writing a custom processor is the recommended way to extend swagger-php in a clean way. + +Processors are expected to implement the `__invoke()` method expecting the current `Analysis` object as single parameter: + +```php + + */ +class Pet +{ + /** + * Add a new pet to the store. + * + * @OA\Post( + * path="/pet", + * tags={"pet"}, + * operationId="addPet", + * @OA\Response( + * response=405, + * description="Invalid input" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody(ref="#/components/requestBodies/Pet") + * ) + */ + public function addPet() + { + } + + /** + * Update an existing pet. + * + * @OA\Put( + * path="/pet", + * tags={"pet"}, + * operationId="updatePet", + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Pet not found" + * ), + * @OA\Response( + * response=405, + * description="Validation exception" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody(ref="#/components/requestBodies/Pet") + * ) + */ + public function updatePet() + { + } + + /** + * @OA\Get( + * path="/pet/findByStatus", + * tags={"pet"}, + * summary="Finds Pets by status", + * description="Multiple status values can be provided with comma separated string", + * operationId="findPetsByStatus", + * deprecated=true, + * @OA\Parameter( + * name="status", + * in="query", + * description="Status values that needed to be considered for filter", + * required=true, + * explode=true, + * @OA\Schema( + * default="available", + * type="string", + * enum={"available", "pending", "sold"}, + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ), + * @OA\XmlContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid status value" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * } + * ) + */ + public function findPetsByStatus() + { + } + + /** + * @OA\Get( + * path="/pet/findByTags", + * tags={"pet"}, + * summary="Finds Pets by tags", + * description="Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + * operationId="findByTags", + * @OA\Parameter( + * name="tags", + * in="query", + * description="Tags to filter by", + * required=true, + * explode=true, + * @OA\Schema( + * type="array", + * @OA\Items( + * type="string", + * ) + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ), + * @OA\XmlContent( + * type="array", + * @OA\Items(ref="#/components/schemas/Pet") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid status value" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * } + * ) + */ + public function findByTags() + { + } + + /** + * @OA\Get( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Find pet by ID", + * description="Returns a single pet", + * operationId="getPetById", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet to return", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Pet"), + * @OA\XmlContent(ref="#/components/schemas/Pet"), + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplier" + * ), + * @OA\Response( + * response=404, + * description="Pet not found" + * ), + * security={ + * {"api_key": {}} + * } + * ) + * + * @param int $id + */ + public function getPetById($id) + { + } + + /** + * @OA\Post( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Updates a pet in the store with form data", + * operationId="updatePetWithForm", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet that needs to be updated", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ) + * ), + * @OA\Response( + * response=405, + * description="Invalid input" + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody( + * description="Input data format", + * @OA\MediaType( + * mediaType="application/x-www-form-urlencoded", + * @OA\Schema( + * type="object", + * @OA\Property( + * property="name", + * description="Updated name of the pet", + * type="string", + * ), + * @OA\Property( + * property="status", + * description="Updated status of the pet", + * type="string" + * ) + * ) + * ) + * ) + * ) + */ + public function updatePetWithForm() + { + } + + /** + * @OA\Delete( + * path="/pet/{petId}", + * tags={"pet"}, + * summary="Deletes a pet", + * operationId="deletePet", + * @OA\Parameter( + * name="api_key", + * in="header", + * required=false, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Parameter( + * name="petId", + * in="path", + * description="Pet id to delete", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64" + * ), + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied", + * ), + * @OA\Response( + * response=404, + * description="Pet not found", + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * ) + */ + public function deletePet() + { + } + + /** + * @OA\Post( + * path="/pet/{petId}/uploadImage", + * tags={"pet"}, + * summary="uploads an image", + * operationId="uploadFile", + * @OA\Parameter( + * name="petId", + * in="path", + * description="ID of pet to update", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * example=1 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/ApiResponse") + * ), + * security={ + * {"petstore_auth": {"write:pets", "read:pets"}} + * }, + * @OA\RequestBody( + * description="Upload images request body", + * @OA\MediaType( + * mediaType="application/octet-stream", + * @OA\Schema( + * type="string", + * format="binary" + * ) + * ) + * ) + * ) + */ + public function uploadFile() + { + } +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php new file mode 100644 index 0000000..937ab74 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php @@ -0,0 +1,137 @@ + + */ +class Store +{ + /** + * @OA\Get( + * path="/store", + * tags={"store"}, + * summary="Returns pet inventories by status", + * description="Returns a map of status codes to quantities", + * operationId="getInventory", + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent( + * @OA\AdditionalProperties( + * type="integer", + * format="int32" + * ) + * ) + * ), + * security={ + * {"api_key": {}} + * } + * ) + */ + public function getInventory() + { + } + + /** + * @OA\Post( + * path="/store/order", + * tags={"store"}, + * summary="Place an order for a pet", + * operationId="placeOrder", + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Order"), + * @OA\XmlContent(ref="#/components/schemas/Order") + * ), + * @OA\RequestBody( + * description="order placed for purchasing th pet", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/Order") + * ) + * ) + */ + public function placeOrder() + { + } + + /** + * @OA\Get( + * path="/store/order/{orderId}", + * tags={"store"}, + * description="For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", + * operationId="getOrderById", + * @OA\Parameter( + * name="orderId", + * in="path", + * description="ID of pet that needs to be fetched", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * maximum=10, + * minimum=1 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/Order"), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema(ref="#/components/schemas/Order") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Order not found" + * ) + * ) + */ + public function getOrderById() + { + } + + /** + * @OA\Delete( + * path="/store/order/{orderId}", + * tags={"store"}, + * summary="Delete purchase order by ID", + * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + * operationId="deleteOrder", + * @OA\Parameter( + * name="orderId", + * in="path", + * required=true, + * description="ID of the order that needs to be deleted", + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1 + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid ID supplied" + * ), + * @OA\Response( + * response=404, + * description="Order not found" + * ) + * ), + */ + public function deleteOrder() + { + } +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php new file mode 100644 index 0000000..52596be --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php @@ -0,0 +1,231 @@ + + */ +class User +{ + /** + * @OA\Post( + * path="/user", + * tags={"user"}, + * summary="Create user", + * description="This can only be done by the logged in user.", + * operationId="createUser", + * @OA\Response( + * response="default", + * description="successful operation" + * ), + * @OA\RequestBody( + * description="Create user object", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/User") + * ) + * ) + */ + public function createUser() + { + } + + /** + * @OA\Post( + * path="/user/createWithArray", + * tags={"user"}, + * summary="Create list of users with given input array", + * operationId="createUsersWithListInput", + * @OA\Response( + * response="default", + * description="successful operation" + * ), + * @OA\RequestBody(ref="#/components/requestBodies/UserArray") + * ) + */ + public function createUsersWithListInput() + { + } + + /** + * @OA\Get( + * path="/user/login", + * tags={"user"}, + * summary="Logs user into system", + * operationId="loginUser", + * @OA\Parameter( + * name="username", + * in="query", + * description="The user name for login", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Parameter( + * name="password", + * in="query", + * required=true, + * @OA\Schema( + * type="string", + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\Header( + * header="X-Rate-Limit", + * description="calls per hour allowed by the user", + * @OA\Schema( + * type="integer", + * format="int32" + * ) + * ), + * @OA\Header( + * header="X-Expires-After", + * description="date in UTC when token expires", + * @OA\Schema( + * type="string", + * format="datetime" + * ) + * ), + * @OA\JsonContent( + * type="string" + * ), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema( + * type="string" + * ) + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username/password supplied" + * ) + * ) + */ + public function loginUser() + { + } + + /** + * @OA\Get( + * path="/user/logout", + * tags={"user"}, + * summary="Logs out current logged in user session", + * operationId="logoutUser", + * @OA\Response( + * response="default", + * description="successful operation" + * ) + * ) + */ + public function logoutUser() + { + } + + /** + * @OA\Get( + * path="/user/{username}", + * summary="Get user by user name", + * operationId="getUserByName", + * @OA\Parameter( + * name="username", + * in="path", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\JsonContent(ref="#/components/schemas/User"), + * @OA\MediaType( + * mediaType="application/xml", + * @OA\Schema(ref="#/components/schemas/User") + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username supplied" + * ), + * @OA\Response( + * response=404, + * description="User not found" + * ), + * ) + */ + public function getUserByName() + { + } + + /** + * @OA\Put( + * path="/user/{username}", + * summary="Updated user", + * description="This can pnly be done by the logged in user.", + * operationId="updateUser", + * @OA\Parameter( + * name="username", + * in="path", + * description="name that to be updated", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid user supplied" + * ), + * @OA\Response( + * response=404, + * description="User not found" + * ), + * @OA\RequestBody( + * description="Updated user object", + * required=true, + * @OA\JsonContent(ref="#/components/schemas/User") + * ) + * ) + */ + public function updateUser() + { + } + + /** + * @OA\Delete( + * path="/user/{username}", + * summary="Delete user", + * description="This can only be done by the logged in user.", + * operationId="deleteUser", + * @OA\Parameter( + * name="username", + * in="path", + * description="The name that needs to be deleted", + * required=true, + * @OA\Schema( + * type="string" + * ) + * ), + * @OA\Response( + * response=400, + * description="Invalid username supplied", + * ), + * @OA\Response( + * response=404, + * description="User not found", + * ) + * ) + */ + public function deleteUser() + { + } +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php new file mode 100644 index 0000000..29c8172 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php @@ -0,0 +1,51 @@ + + * + * @OA\Schema( + * description="Api response", + * title="Api response" + * ) + */ +class ApiResponse +{ + /** + * @OA\Property( + * description="Code", + * title="Code", + * format="int32" + * ) + * + * @var int + */ + private $code; + + /** + * OA\Property( + * description="Type", + * title="Type", + * ). + * + * @var string + */ + private $type; + + /** + * @OA\Property( + * description="Message", + * title="Message" + * ) + * + * @var string + */ + private $message; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php new file mode 100644 index 0000000..c178845 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php @@ -0,0 +1,43 @@ + + * + * @OA\Schema( + * title="Pets Category.", + * @OA\Xml( + * name="Category" + * ) + * ) + */ +class Category +{ + /** + * @OA\Property( + * title="ID", + * description="ID", + * format="int64", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * title="Category name", + * description="Category name" + * ) + * + * @var string + */ + private $name; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php new file mode 100644 index 0000000..36d46c7 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php @@ -0,0 +1,93 @@ + + * + * @OA\Schema( + * title="Order model", + * description="Order model", + * ) + */ +class Order +{ + /** + * @OA\Property( + * format="int64", + * title="ID", + * default=1, + * description="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * default=1, + * format="int64", + * description="Pet ID", + * title="Pet ID", + * ) + * + * @var int + */ + private $petId; + + /** + * @OA\Property( + * default=12, + * format="in32", + * description="Quantity", + * title="Quantity", + * ) + * + * @var int + */ + private $quantity; + + /** + * @OA\Property( + * default="2017-02-02 18:31:45", + * format="datetime", + * description="Shipping date", + * title="Shipping date", + * type="string" + * ) + * + * @var \DateTime + */ + private $shipDate; + + /** + * @OA\Property( + * default="placed", + * title="Order status.", + * description="Order status.", + * enum={"placed", "approved", "delivered"}, + * ) + * + * @var string + */ + private $status; + + /** + * @OA\Property( + * default=false, + * format="int64", + * description="Complete status", + * title="Complete status", + * ) + * + * @var bool + */ + private $complete; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php new file mode 100644 index 0000000..ade5557 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php @@ -0,0 +1,88 @@ + + * + * @OA\Schema( + * description="Pet model", + * title="Pet model", + * required={"name", "photoUrls"}, + * @OA\Xml( + * name="Pet" + * ) + * ) + */ +class Pet +{ + + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * title="Category", + * ) + * + * @var Category + */ + private $category; + + /** + * @OA\Property( + * format="int64", + * description="Pet name", + * title="Pet name", + * ) + * + * @var int + */ + private $name; + + /** + * @OA\Property( + * description="Photo urls", + * title="Photo urls", + * @OA\Xml( + * name="photoUrl", + * wrapped=true + * ), + * @OA\Items( + * type="string", + * default="images/image-1.png" + * ) + * ) + * + * @var array + */ + private $photoUrls; + + /** + * @OA\Property( + * description="Pet tags", + * title="Pet tags", + * @OA\Xml( + * name="tag", + * wrapped=true + * ), + * ) + * + * @var Tag[] + */ + private $tags; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php new file mode 100644 index 0000000..97e2661 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php @@ -0,0 +1,23 @@ + + * + * @OA\Schema( + * title="Tag", + * @OA\Xml( + * name="Tag" + * ) + * ) + */ +class Tag +{ + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID" + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * description="Name", + * title="Name" + * ) + * + * @var string + */ + private $name; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php new file mode 100644 index 0000000..c9c32ad --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php @@ -0,0 +1,106 @@ + + * + * @OA\Schema( + * title="User model", + * description="User model", + * ) + */ +class User +{ + /** + * @OA\Property( + * format="int64", + * description="ID", + * title="ID", + * ) + * + * @var int + */ + private $id; + + /** + * @OA\Property( + * description="Username", + * title="Username", + * ) + * + * @var string + */ + private $username; + + /** + * @OA\Property( + * description="First name", + * title="First name", + * ) + * + * @var string + */ + private $firstName; + + /** + * @OA\Property( + * description="Last name", + * title="Last name", + * ) + * + * @var string + */ + private $lastName; + + /** + * @OA\Property( + * format="email", + * description="Email", + * title="Email", + * ) + * + * @var string + */ + private $email; + + /** + * @OA\Property( + * format="int64", + * description="Password", + * title="Password", + * maximum=255 + * ) + * + * @var string + */ + private $password; + + /** + * @OA\Property( + * format="msisdn", + * description="Phone", + * title="Phone", + * ) + * + * @var string + */ + private $phone; + + /** + * @OA\Property( + * format="int32", + * description="User status", + * title="User status", + * ) + * + * @var int + */ + private $userStatus; +} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php new file mode 100644 index 0000000..79d0124 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php @@ -0,0 +1,22 @@ += 1 and <= 10. Other values will generated exceptions' + operationId: getOrderById + parameters: + - + name: orderId + in: path + description: 'ID of pet that needs to be fetched' + required: true + schema: + type: integer + format: int64 + maximum: 10 + minimum: 1 + responses: + '200': + description: 'successful operation' + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + delete: + tags: + - store + summary: 'Delete purchase order by ID' + description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' + operationId: deleteOrder + parameters: + - + name: orderId + in: path + description: 'ID of the order that needs to be deleted' + required: true + schema: + type: integer + format: int64 + minimum: 1 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + /user: + post: + tags: + - user + summary: 'Create user' + description: 'This can only be done by the logged in user.' + operationId: createUser + requestBody: + description: 'Create user object' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithArray: + post: + tags: + - user + summary: 'Create list of users with given input array' + operationId: createUsersWithListInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: 'successful operation' + /user/login: + get: + tags: + - user + summary: 'Logs user into system' + operationId: loginUser + parameters: + - + name: username + in: query + description: 'The user name for login' + required: true + schema: + type: string + - + name: password + in: query + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + headers: + X-Rate-Limit: + description: 'calls per hour allowed by the user' + schema: + type: integer + format: int32 + X-Expires-After: + description: 'date in UTC when token expires' + schema: + type: string + format: datetime + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + '400': + description: 'Invalid username/password supplied' + /user/logout: + get: + tags: + - user + summary: 'Logs out current logged in user session' + operationId: logoutUser + responses: + default: + description: 'successful operation' + '/user/{username}': + get: + summary: 'Get user by user name' + operationId: getUserByName + parameters: + - + name: username + in: path + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' + put: + summary: 'Updated user' + description: 'This can pnly be done by the logged in user.' + operationId: updateUser + parameters: + - + name: username + in: path + description: 'name that to be updated' + required: true + schema: + type: string + requestBody: + description: 'Updated user object' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + '400': + description: 'Invalid user supplied' + '404': + description: 'User not found' + delete: + summary: 'Delete user' + description: 'This can only be done by the logged in user.' + operationId: deleteUser + parameters: + - + name: username + in: path + description: 'The name that needs to be deleted' + required: true + schema: + type: string + responses: + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' +components: + schemas: + ApiResponse: + title: 'Api response' + description: 'Api response' + properties: + code: + title: Code + description: Code + type: integer + format: int32 + message: + title: Message + description: Message + type: string + type: object + Category: + title: 'Pets Category.' + description: 'Pets Category.' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + name: + title: 'Category name' + description: 'Category name' + type: string + type: object + xml: + name: Category + Order: + title: 'Order model' + description: 'Order model' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + default: 1 + petId: + title: 'Pet ID' + description: 'Pet ID' + type: integer + format: int64 + default: 1 + quantity: + title: Quantity + description: Quantity + type: integer + format: in32 + default: 12 + shipDate: + title: 'Shipping date' + description: 'Shipping date' + type: string + format: datetime + default: '2017-02-02 18:31:45' + status: + title: 'Order status.' + description: 'Order status.' + type: string + default: placed + enum: + - placed + - approved + - delivered + complete: + title: 'Complete status' + description: 'Complete status' + type: boolean + format: int64 + default: false + type: object + Pet: + title: 'Pet model' + description: 'Pet model' + required: + - name + - photoUrls + properties: + id: + title: ID + description: ID + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + title: 'Pet name' + description: 'Pet name' + type: integer + format: int64 + photoUrls: + title: 'Photo urls' + description: 'Photo urls' + type: array + items: + type: string + default: images/image-1.png + xml: + name: photoUrl + wrapped: true + tags: + title: 'Pet tags' + description: 'Pet tags' + type: array + items: + $ref: '#/components/schemas/Tag' + xml: + name: tag + wrapped: true + type: object + xml: + name: Pet + Tag: + title: Tag + description: Tag. + properties: + id: + title: ID + description: ID + type: integer + format: int64 + name: + title: Name + description: Name + type: string + type: object + xml: + name: Tag + User: + title: 'User model' + description: 'User model' + properties: + id: + title: ID + description: ID + type: integer + format: int64 + username: + title: Username + description: Username + type: string + firstName: + title: 'First name' + description: 'First name' + type: string + lastName: + title: 'Last name' + description: 'Last name' + type: string + email: + title: Email + description: Email + type: string + format: email + password: + title: Password + description: Password + type: string + format: int64 + maximum: 255 + phone: + title: Phone + description: Phone + type: string + format: msisdn + userStatus: + title: 'User status' + description: 'User status' + type: integer + format: int32 + type: object + requestBodies: + Pet: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + UserArray: + description: 'List of user object' + required: true + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' + scopes: + 'write:pets': 'modify pets in your account' + 'read:pets': 'read your pets' + api_key: + type: apiKey + name: api_key + in: header +tags: + - + name: pet + description: 'Everything about your Pets' + externalDocs: + description: 'Find out more' + url: 'http://swagger.io' + - + name: store + description: 'Access to Petstore orders' + - + name: user + description: 'Operations about user' + externalDocs: + description: 'Find out more about store' + url: 'http://swagger.io' +externalDocs: + description: 'Find out more about Swagger' + url: 'http://swagger.io' diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php new file mode 100644 index 0000000..4653df6 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php @@ -0,0 +1,31 @@ += 1 and <= 10. Other values will generated exceptions", + * operationId="getOrderById", + * @OA\Parameter( + * name="orderId", + * in="path", + * description="ID of pet that needs to be fetched", + * required=true, + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1.0, + * maximum=10.0 + * ) + * ), + * @OA\Response( + * response=200, + * description="successful operation", + * @OA\Schema(ref="#/components/schemas/Order") + * ), + * @OA\Response(response=400, description="Invalid ID supplied"), + * @OA\Response(response=404, description="Order not found") + * ) + */ + public function getOrderById() + { + } + + /** + * @OA\Delete(path="/store/order/{orderId}", + * tags={"store"}, + * summary="Delete purchase order by ID", + * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + * operationId="deleteOrder", + * @OA\Parameter( + * name="orderId", + * in="path", + * required=true, + * description="ID of the order that needs to be deleted", + * @OA\Schema( + * type="integer", + * format="int64", + * minimum=1.0 + * ) + * ), + * @OA\Response(response=400, description="Invalid ID supplied"), + * @OA\Response(response=404, description="Order not found") + * ) + */ + public function deleteOrder() + { + } +} diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php new file mode 100644 index 0000000..caf7e92 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php @@ -0,0 +1,218 @@ += 1 and <= 10. Other values will generated exceptions", + "operationId": "getOrderById", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of pet that needs to be fetched", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "maximum": 10, + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "successful operation" + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + }, + "delete": { + "tags": [ + "store" + ], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", + "operationId": "deleteOrder", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1 + } + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + } + }, + "/user": { + "post": { + "tags": [ + "user" + ], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "requestBody": { + "description": "Created user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithArray": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithArrayInput", + "requestBody": { + "description": "List of user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "requestBody": { + "description": "List of user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/login": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-Rate-Limit": { + "description": "calls per hour allowed by the user", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "X-Expires-After": { + "description": "date in UTC when token expires", + "schema": { + "type": "string", + "format": "date-time" + } + } + } + }, + "400": { + "description": "Invalid username/password supplied" + } + } + } + }, + "/user/logout": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "parameters": [], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/{username}": { + "get": { + "tags": [ + "user" + ], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation" + }, + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Updated user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be updated", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Updated user object", + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "400": { + "description": "Invalid user supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + } + } + }, + "components": { + "schemas": { + "ApiResponse": { + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" + }, + "Category": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "xml": { + "name": "Category" + } + }, + "Order": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "petId": { + "type": "integer", + "format": "int64" + }, + "complete": { + "type": "boolean", + "default": false + }, + "quantity": { + "type": "integer", + "format": "int32" + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "description": "Order Status.", + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ] + } + }, + "type": "object", + "xml": { + "name": "Order" + } + }, + "Pet": { + "required": [ + "name", + "photoUrls" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "photoUrls": { + "type": "array", + "items": { + "type": "string" + }, + "xml": { + "name": "photoUrl", + "wrapped": true + } + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tag" + }, + "xml": { + "name": "tag", + "wrapped": true + } + }, + "status": { + "description": "pet status in the store", + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ] + } + }, + "type": "object", + "xml": { + "name": "Pet" + } + }, + "Tag": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "xml": { + "name": "Tag" + } + }, + "User": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "username": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "userStatus": { + "description": "User Status", + "type": "integer", + "format": "int32" + } + }, + "type": "object", + "xml": { + "name": "User" + } + } + }, + "securitySchemes": { + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + }, + "petstore_auth": { + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "http://petstore.swagger.io/oauth/dialog", + "scopes": { + "read:pets": "read your pets", + "write:pets": "modify pets in your account" + } + } + } + } + } + }, + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + }, + { + "name": "store", + "description": "Access to Petstore orders" + }, + { + "name": "user", + "description": "Operations about user", + "externalDocs": { + "description": "Find out more about our store", + "url": "http://swagger.io" + } + } + ], + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + } +} diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml new file mode 100644 index 0000000..ec62cd3 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml @@ -0,0 +1,669 @@ +openapi: 3.0.0 +info: + title: 'Swagger Petstore' + description: 'This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.' + termsOfService: 'http://swagger.io/terms/' + contact: + email: apiteam@swagger.io + license: + name: 'Apache 2.0' + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' + version: 1.0.0 +servers: + - + url: 'https://petstore.swagger.io/v3' + description: 'OpenApi host' +paths: + /pet/findByTags: + get: + tags: + - pet + summary: 'Finds Pets by tags' + description: 'Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.' + operationId: findPetsByTags + parameters: + - + name: tags + in: query + description: 'Tags to filter by' + required: true + style: form + schema: + type: array + items: + type: string + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid tag value' + deprecated: true + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + /pet/findByStatus: + get: + tags: + - pet + summary: 'Finds Pets by status' + description: 'Multiple status values can be provided with comma separated strings' + operationId: findPetsByStatus + parameters: + - + name: status + in: query + description: 'Status values that need to be considered for filter' + required: true + style: form + schema: + type: array + items: + type: string + default: available + enum: + - available + - pending + - sold + responses: + '200': + description: 'successful operation' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: 'Invalid status value' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}': + get: + tags: + - pet + summary: 'Find pet by ID' + description: 'Returns a single pet' + operationId: getPetById + parameters: + - + name: petId + in: path + description: 'ID of pet to return' + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: 'successful operation' + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + security: + - + api_key: [] + post: + tags: + - pet + summary: 'Updates a pet in the store with form data' + description: '' + operationId: updatePetWithForm + parameters: + - + name: petId + in: path + description: 'ID of pet that needs to be updated' + required: true + schema: + type: integer + format: int64 + requestBody: + required: false + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + description: 'Updated name of the pet' + type: string + status: + description: 'Updated status of the pet' + type: string + type: object + responses: + '405': + description: 'Invalid input' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + delete: + tags: + - pet + summary: 'Deletes a pet' + description: '' + operationId: deletePet + parameters: + - + name: petId + in: path + description: 'Pet id to delete' + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + /pet: + put: + tags: + - pet + summary: 'Update an existing pet.' + description: '' + operationId: updatePet + requestBody: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Pet not found' + '405': + description: 'Validation exception' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + post: + tags: + - pet + summary: 'Add a new pet to the store' + description: '' + operationId: addPet + requestBody: + description: 'Pet object that needs to be added to the store' + required: true + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '405': + description: 'Invalid input' + security: + - + petstore_auth: + - 'write:pets' + - 'read:pets' + '/pet/{petId}/uploadImage': + post: + tags: + - pet + summary: 'uploads an image' + description: '' + operationId: uploadFile + parameters: + - + name: petId + in: path + description: 'ID of pet to update' + required: true + schema: + type: integer + format: int64 + requestBody: + required: true + content: + multipart/form-data: + schema: + required: + - file + properties: + additionalMetadata: + description: 'Additional data to pass to server' + type: string + file: + description: 'file to upload' + type: string + format: file + type: object + responses: + '200': + description: 'successful operation' + security: + - + petstore_auth: + - 'read:pets' + - 'write:pets' + /store/inventory: + get: + tags: + - store + summary: 'Returns pet inventories by status' + description: 'Returns a map of status codes to quantities' + operationId: getInventory + parameters: [] + responses: + '200': + description: 'successful operation' + security: + - + api_key: [] + /store/order: + post: + tags: + - store + summary: 'Place an order for a pet' + description: '' + operationId: placeOrder + requestBody: + description: 'order placed for purchasing the pet' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid Order' + '/store/order/{orderId}': + get: + tags: + - store + summary: 'Find purchase order by ID' + description: 'For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions' + operationId: getOrderById + parameters: + - + name: orderId + in: path + description: 'ID of pet that needs to be fetched' + required: true + schema: + type: integer + format: int64 + maximum: 10 + minimum: 1 + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + delete: + tags: + - store + summary: 'Delete purchase order by ID' + description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' + operationId: deleteOrder + parameters: + - + name: orderId + in: path + description: 'ID of the order that needs to be deleted' + required: true + schema: + type: integer + format: int64 + minimum: 1 + responses: + '400': + description: 'Invalid ID supplied' + '404': + description: 'Order not found' + /user: + post: + tags: + - user + summary: 'Create user' + description: 'This can only be done by the logged in user.' + operationId: createUser + requestBody: + description: 'Created user object' + required: true + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithArray: + post: + tags: + - user + summary: 'Creates list of users with given input array' + description: '' + operationId: createUsersWithArrayInput + requestBody: + description: 'List of user object' + required: true + content: + multipart/form-data: + schema: + type: array + items: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/createWithList: + post: + tags: + - user + summary: 'Creates list of users with given input array' + description: '' + operationId: createUsersWithListInput + requestBody: + description: 'List of user object' + required: true + content: + multipart/form-data: + schema: + type: array + items: + $ref: '#/components/schemas/User' + responses: + default: + description: 'successful operation' + /user/login: + get: + tags: + - user + summary: 'Logs user into the system' + description: '' + operationId: loginUser + parameters: + - + name: username + in: query + description: 'The user name for login' + required: true + schema: + type: string + - + name: password + in: query + description: 'The password for login in clear text' + schema: + type: string + responses: + '200': + description: 'successful operation' + headers: + X-Rate-Limit: + description: 'calls per hour allowed by the user' + schema: + type: integer + format: int32 + X-Expires-After: + description: 'date in UTC when token expires' + schema: + type: string + format: date-time + '400': + description: 'Invalid username/password supplied' + /user/logout: + get: + tags: + - user + summary: 'Logs out current logged in user session' + description: '' + operationId: logoutUser + parameters: [] + responses: + default: + description: 'successful operation' + '/user/{username}': + get: + tags: + - user + summary: 'Get user by user name' + description: '' + operationId: getUserByName + parameters: + - + name: username + in: path + description: 'The name that needs to be fetched. Use user1 for testing. ' + required: true + schema: + type: string + responses: + '200': + description: 'successful operation' + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' + put: + tags: + - user + summary: 'Updated user' + description: 'This can only be done by the logged in user.' + operationId: updateUser + parameters: + - + name: username + in: path + description: 'name that need to be updated' + required: true + schema: + type: string + requestBody: + description: 'Updated user object' + required: true + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/User' + responses: + '400': + description: 'Invalid user supplied' + '404': + description: 'User not found' + delete: + tags: + - user + summary: 'Delete user' + description: 'This can only be done by the logged in user.' + operationId: deleteUser + parameters: + - + name: username + in: path + description: 'The name that needs to be deleted' + required: true + schema: + type: string + responses: + '400': + description: 'Invalid username supplied' + '404': + description: 'User not found' +components: + schemas: + ApiResponse: + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string + type: object + Category: + properties: + id: + type: integer + format: int64 + name: + type: string + type: object + xml: + name: Category + Order: + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + complete: + type: boolean + default: false + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + description: 'Order Status.' + type: string + enum: + - placed + - approved + - delivered + type: object + xml: + name: Order + Pet: + required: + - name + - photoUrls + properties: + id: + type: integer + format: int64 + name: + type: string + example: doggie + category: + $ref: '#/components/schemas/Category' + photoUrls: + type: array + items: + type: string + xml: + name: photoUrl + wrapped: true + tags: + type: array + items: + $ref: '#/components/schemas/Tag' + xml: + name: tag + wrapped: true + status: + description: 'pet status in the store.' + type: string + enum: + - available + - pending + - sold + type: object + xml: + name: Pet + Tag: + properties: + id: + type: integer + format: int64 + name: + type: string + type: object + xml: + name: Tag + User: + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + description: 'User Status.' + type: integer + format: int32 + type: object + xml: + name: User + securitySchemes: + api_key: + type: apiKey + name: api_key + in: header + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' + scopes: + 'read:pets': 'read your pets' + 'write:pets': 'modify pets in your account' +tags: + - + name: pet + description: 'Everything about your Pets' + externalDocs: + description: 'Find out more' + url: 'http://swagger.io' + - + name: store + description: 'Access to Petstore orders' + - + name: user + description: 'Operations about user' + externalDocs: + description: 'Find out more about our store' + url: 'http://swagger.io' +externalDocs: + description: 'Find out more about Swagger' + url: 'http://swagger.io' diff --git a/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php b/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php new file mode 100644 index 0000000..79c309b --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php @@ -0,0 +1,38 @@ +type = static::TYPE; + } +} diff --git a/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php b/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php new file mode 100644 index 0000000..914ef3c --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php @@ -0,0 +1,40 @@ +getAnnotationsOfType(Schema::class, true); + /** @var Operation[] $operations */ + $operations = $analysis->getAnnotationsOfType(Operation::class); + + foreach ($operations as $operation) { + if ($operation->x !== Generator::UNDEFINED && array_key_exists(self::X_QUERY_AGS_REF, $operation->x)) { + if ($schema = $this->schemaForRef($schemas, $operation->x[self::X_QUERY_AGS_REF])) { + $this->expandQueryArgs($operation, $schema); + $this->cleanUp($operation); + } + } + } + } + + /** + * Find schema for the given ref. + */ + protected function schemaForRef(array $schemas, string $ref) + { + foreach ($schemas as $schema) { + if (Components::ref($schema) === $ref) { + return $schema; + } + } + + return null; + } + + /** + * Expand the given operation by injecting parameters for all properties of the given schema. + */ + protected function expandQueryArgs(Operation $operation, Schema $schema) + { + if ($schema->properties == Generator::UNDEFINED || !$schema->properties) { + return; + } + + $operation->parameters = $operation->parameters == Generator::UNDEFINED ? [] : $operation->parameters; + foreach ($schema->properties as $property) { + $parameter = new Parameter([ + 'name' => $property->property, + 'in' => 'query', + 'required' => false, + ]); + $operation->parameters[] = $parameter; + } + } + + /** + * Clean up. + */ + protected function cleanUp($operation) + { + unset($operation->x[self::X_QUERY_AGS_REF]); + if (!$operation->x) { + $operation->x = Generator::UNDEFINED; + } + } +} diff --git a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php new file mode 100644 index 0000000..1e78978 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php @@ -0,0 +1,17 @@ +addPsr4('App\\', __DIR__ . '/app'); +// and our custom processor +$classLoader->addPsr4('SchemaQueryParameterProcessor\\', __DIR__); + +$generator = new Generator(); + +// merge our custom processor +$processors = []; +foreach ($generator->getProcessors() as $processor) { + $processors[] = $processor; + if ($processor instanceof BuildPaths) { + $processors[] = new SchemaQueryParameter(); + } +} + +$options = [ + 'processors' => $processors, +]; + +$openapi = $generator + ->setProcessors($processors) + ->generate([__DIR__ . '/app']); +//file_put_contents(__DIR__ . '/schema-query-parameter.yaml', $openapi->toYaml()); +echo $openapi->toYaml(); diff --git a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml new file mode 100644 index 0000000..c6a86d3 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml @@ -0,0 +1,62 @@ +openapi: 3.0.0 +info: + title: 'Example of using a custom processor in swagger-php' + version: 1.0.0 +paths: + '/products/{id}': + get: + tags: + - Products + operationId: 399b71a7672f0a46be1b5f4c120c355d + parameters: + - + name: id + in: path + required: true + responses: + '200': + description: 'A single product' + content: + application/json: + schema: + $ref: '#/components/schemas/Product' + /products/search: + get: + tags: + - Products + summary: 'Controller that takes all `Product` properties as query parameter.' + operationId: 178f74de3417eec20dee95709821e6ca + parameters: + - + name: id + in: query + required: false + - + name: name + in: query + required: false + responses: + '200': + description: 'A list of matching products' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Product' +components: + schemas: + Product: + title: Product + description: 'A simple product model' + properties: + id: + description: 'The unique identifier of a product in our catalog.' + type: integer + format: int64 + example: 1 + name: + type: string + format: int64 + example: 1 + type: object diff --git a/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php b/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php new file mode 100644 index 0000000..92fee26 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php @@ -0,0 +1,20 @@ +openapi->components) && is_iterable($analysis->openapi->components->schemas)) { + usort($analysis->openapi->components->schemas, function ($a, $b) { + return strcmp($a->schema, $b->schema); + }); + } + } +} diff --git a/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php b/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php new file mode 100644 index 0000000..8fa6f9b --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php @@ -0,0 +1,46 @@ + '$response.body#/username'])] + public function getRepositoriesByOwner($username) + { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}', + operationId: 'getRepository', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response( + response: 200, + description: 'The repository', + content: new OAT\JsonContent(ref: '#/components/schemas/repository'), + links: [ + new OAT\Link(link: 'repositoryPullRequests', ref: '#/components/links/RepositoryPullRequests'), + ] + ), + ] + ) + ] + #[OAT\Link(link: 'UserRepository', operationId: 'getRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] + public function getRepository() + { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}/{state}/pullrequests', + operationId: 'getPullRequestsByRepository', + responses: [ + new OAT\Response(response: 200, description: 'An array of pull request objects', content: new OAT\JsonContent(type: 'array', items: new OAT\Items(ref: '#/components/schemas/pullrequest'))), + ] + ) + ] + #[OAT\Link(link: 'RepositoryPullRequests', operationId: 'getPullRequestsByRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] + public function getPullRequestsByRepository( + #[OAT\PathParameter()] string $username, + #[OAT\PathParameter()] string $slug, + #[OAT\PathParameter()] State $state + ) { + } + + #[OAT\Get( + path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}', + operationId: 'getPullRequestsById', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response(response: 200, description: 'A pull request object', content: new OAT\JsonContent(ref: '#/components/schemas/pullrequest'), links: [new OAT\Link(link: 'pullRequestMerge', ref: '#/components/links/PullRequestMerge')]), + ] + ) + ] + public function getPullRequestsById() + { + } + + #[OAT\Post( + path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge', + operationId: 'mergePullRequest', + parameters: [ + new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), + ], + responses: [ + new OAT\Response(response: 204, description: 'The PR was successfully merged'), + ] + ) + ] + #[OAT\Link(link: 'PullRequestMerge', operationId: 'mergePullRequest', parameters: ['username' => '$response.body#/author/username', 'slug' => '$response.body#/repository/slug', 'pid' => '$response.body#/id'])] + public function mergePullRequest() + { + } +} diff --git a/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php b/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php new file mode 100644 index 0000000..56e5a4f --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php @@ -0,0 +1,19 @@ + 'pong'])] + public array $arrayShape; +} diff --git a/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php b/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php new file mode 100644 index 0000000..7b8f7d7 --- /dev/null +++ b/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php @@ -0,0 +1,16 @@ +toYaml(); +``` +Documentation of how to use the `Generator` class can be found in the [Generator reference](https://zircote.github.io/swagger-php/reference/generator). + +### Usage from the Command Line Interface + +The `openapi` command line interface can be used to generate the documentation to a static yaml/json file. + +```bash +./vendor/bin/openapi --help +``` +Starting with version 4 the default analyser used on the command line is the new `ReflectionAnalyser`. + +Using the `--legacy` flag (`-l`) the legacy `TokenAnalyser` can still be used. + +### Usage from the Deserializer + +Generate the OpenApi annotation object from a json string, which makes it easier to manipulate objects programmatically. + +```php +deserialize($jsonString, 'OpenApi\Annotations\OpenApi'); +echo $openapi->toJson(); +``` + +### Usage from [docker](https://docker.com) + +Generate the swagger documentation to a static json file. + +``` +docker run -v "$PWD":/app -it tico/swagger-php --help +``` + +## More on OpenApi & Swagger + +- https://swagger.io +- https://www.openapis.org +- [OpenApi Documentation](https://swagger.io/docs/) +- [OpenApi Specification](http://swagger.io/specification/) +- [Related projects](docs/related-projects.md) + +## Contributing + +Feel free to submit [Github Issues](https://github.com/zircote/swagger-php/issues) +or pull requests. + +The documentation website is build from the [docs](docs/) folder with [vuepress](https://vuepress.vuejs.org). + +Make sure pull requests pass [PHPUnit](https://phpunit.de/) +and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PSR-2) tests. + +### To run both unit tests and linting execute: +```bash +composer test +``` + +### Running unit tests only: +```bash +./bin/phpunit +``` + +### Regenerate annotation/attribute reference markup docs +```bash +composer docs:refgen +``` + +### Running linting only: +```bash +composer lint +``` + +### To make `php-cs-fixer` fix linting errors: +```bash +composer cs +``` diff --git a/vendor/zircote/swagger-php/bin/openapi b/vendor/zircote/swagger-php/bin/openapi new file mode 100755 index 0000000..6f78272 --- /dev/null +++ b/vendor/zircote/swagger-php/bin/openapi @@ -0,0 +1,234 @@ +#!/usr/bin/env php + false, + 'output' => false, + 'format' => 'auto', + 'exclude' => [], + 'pattern' => '*.php', + 'bootstrap' => false, + 'help' => false, + 'debug' => false, + 'processor' => [], + 'version' => null, +]; +$aliases = [ + 'l' => 'legacy', + 'o' => 'output', + 'e' => 'exclude', + 'n' => 'pattern', + 'b' => 'bootstrap', + 'h' => 'help', + 'd' => 'debug', + 'p' => 'processor', + 'f' => 'format' +]; +$needsArgument = [ + 'output', + 'format', + 'exclude', + 'pattern', + 'bootstrap', + 'processor', + 'version', +]; +$paths = []; +$error = false; + +try { + // Parse cli arguments + for ($i = 1; $i < $argc; $i++) { + $arg = $argv[$i]; + if (substr($arg, 0, 2) === '--') { // longopt + $option = substr($arg, 2); + } elseif ($arg[0] === '-') { // shortopt + if (array_key_exists(substr($arg, 1), $aliases)) { + $option = $aliases[$arg[1]]; + } else { + throw new Exception('Unknown option: "' . $arg . '"'); + } + } else { + $paths[] = $arg; + continue; + } + if (array_key_exists($option, $options) === false) { + throw new Exception('Unknown option: "' . $arg . '"'); + } + if (in_array($option, $needsArgument)) { + if (empty($argv[$i + 1]) || $argv[$i + 1][0] === '-') { + throw new Exception('Missing argument for "' . $arg . '"'); + } + if (is_array($options[$option])) { + $options[$option][] = $argv[$i + 1]; + } else { + $options[$option] = $argv[$i + 1]; + } + $i++; + } else { + $options[$option] = true; + } + } +} catch (\Exception $e) { + $error = $e->getMessage(); +} + +if (!$error && $options['bootstrap']) { + if (is_readable($options['bootstrap']) === false) { + $error = 'Invalid `--bootstrap` value: "'.$options['bootstrap'].'"'; + } else { + require_once($options['bootstrap']); + } +} +if (count($paths) === 0) { + $error = 'Specify at least one path.'; +} + +$logger = new ConsoleLogger($options['debug']); + +if ($options['help'] === false && $error) { + $logger->error('', ['prefix' => '']); + $logger->error($error); + // Show help + $options['help'] = true; +} +$defaultVersion = OpenApi::DEFAULT_VERSION; +if ($options['help']) { + $help = <<info($help); + exit(1); +} + +$errorTypes = [ + E_ERROR => 'Error', + E_WARNING => 'Warning', + E_PARSE => 'Parser error', + E_NOTICE => 'Notice', + E_STRICT => 'Strict', + E_DEPRECATED => 'Deprecated', + E_CORE_ERROR => 'Error(Core)', + E_CORE_WARNING => 'Warning(Core)', + E_COMPILE_ERROR => 'Error(compile)', + E_COMPILE_WARNING => 'Warning(Compile)', + E_RECOVERABLE_ERROR => 'Error(Recoverable)', + E_USER_ERROR => 'Error', + E_USER_WARNING => 'Warning', + E_USER_NOTICE => 'Notice', + E_USER_DEPRECATED => 'Deprecated', +]; +set_error_handler(function ($errno, $errstr, $file, $line) use ($errorTypes, $options, $logger) { + if (!(error_reporting() & $errno)) { + // This error code is not included in error_reporting + return; + } + $type = array_key_exists($errno, $errorTypes) ? $errorTypes[$errno] : 'Error'; + if ($type === 'Deprecated') { + $logger->info($errstr, ['prefix' => $type . ': ']); + } else { + $logger->error($errstr, ['prefix' => $type . ': ']); + } + + if ($options['debug']) { + $logger->info(' in '.$file.' on line '.$line); + } + if (substr($type, 0, 5) === 'Error') { + exit($errno); + } +}); + +set_exception_handler(function ($exception) use ($logger) { + $logger->error($exception); + exit($exception->getCode() ?: 1); +}); + +$exclude = null; +if ($options['exclude']) { + $exclude = $options['exclude']; + if (strpos($exclude[0], ',') !== false) { + $exploded = explode(',', $exclude[0]); + $logger->error('Comma-separated exclude paths are deprecated, use multiple --exclude statements: --exclude '.$exploded[0].' --exclude '.$exploded[1]); + $exclude[0] = array_shift($exploded); + $exclude = array_merge($exclude, $exploded); + } +} + +$pattern = "*.php"; +if ($options['pattern']) { + $pattern = $options['pattern']; +} + +$generator = new Generator($logger); +foreach ($options["processor"] as $processor) { + $class = '\OpenApi\Processors\\'.$processor; + if (class_exists($class)) { + $processor = new $class(); + } elseif (class_exists($processor)) { + $processor = new $processor(); + } + $generator->addProcessor($processor); +} + +$analyser = $options['legacy'] + ? new TokenAnalyser() + : new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); + +$openapi = $generator + ->setVersion($options['version']) + ->setAnalyser($analyser) + ->generate(Util::finder($paths, $exclude, $pattern)); + +if ($options['output'] === false) { + if (strtolower($options['format']) === 'json') { + echo $openapi->toJson(); + } else { + echo $openapi->toYaml(); + } + echo "\n"; +} else { + if (is_dir($options['output'])) { + $options['output'] .= '/openapi.yaml'; + } + $openapi->saveAs($options['output'], $options['format']); +} +exit($logger->loggedMessageAboveNotice() ? 1 : 0); diff --git a/vendor/zircote/swagger-php/composer.json b/vendor/zircote/swagger-php/composer.json new file mode 100644 index 0000000..8728e63 --- /dev/null +++ b/vendor/zircote/swagger-php/composer.json @@ -0,0 +1,112 @@ +{ + "name": "zircote/swagger-php", + "type": "library", + "license": "Apache-2.0", + "bin": [ + "bin/openapi" + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "keywords": [ + "json", + "rest", + "api", + "service discovery" + ], + "homepage": "https://github.com/zircote/swagger-php/", + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "config": { + "bin-dir": "bin", + "optimize-autoloader": true, + "sort-packages": true, + "allow-plugins": { + "composer/package-versions-deprecated": true + } + }, + "minimum-stability": "stable", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "require": { + "php": ">=7.2", + "ext-json": "*", + "doctrine/annotations": "^1.7", + "psr/log": "^1.1 || ^2.0 || 3.0", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "autoload-dev": { + "exclude-from-classmap": [ + "/tests/Fixtures" + ], + "psr-4": { + "OpenApi\\Tools\\": "tools/src/", + "OpenApi\\Tests\\": "tests/", + "AnotherNamespace\\": "tests/Fixtures/AnotherNamespace" + } + }, + "scripts-descriptions": { + "cs": "Fix all codestyle issues", + "lint": "Test codestyle", + "test": "Run all non-legacy and codestyle tests", + "testlegacy": "Run tests using the legacy TokenAnalyser", + "testall": "Run all tests (test + testlegacy)", + "analyse": "Run static analysis (phpstan/psalm)", + "spectral": "Run spectral lint over all .yaml files in the Examples folder", + "docs:refgen": "Rebuild the annotations/attributes reference markup files", + "docs:dev": "Run dev server for local development of gh-pages", + "docs:build": "Re-build static gh-pages" + }, + "scripts": { + "cs": "php-cs-fixer fix --allow-risky=yes", + "lint": "@cs --dry-run", + "test": [ + "phpunit", + "@lint" + ], + "testlegacy": "export PHPUNIT_ANALYSER=legacy && phpunit", + "testall": [ + "@test", + "@testlegacy" + ], + "analyse": [ + "phpstan analyse --memory-limit=2G", + "psalm" + ], + "spectral": "for ff in `find Examples -name '*.yaml'`; do spectral lint $ff; done", + "docs:refgen": "php tools/refgen.php", + "docs:dev": "cd docs && npm run dev", + "docs:build": [ + "@docs:refgen", + "cd docs && npm run build" + ] + } +} diff --git a/vendor/zircote/swagger-php/docs/.vitepress/config.js b/vendor/zircote/swagger-php/docs/.vitepress/config.js new file mode 100644 index 0000000..468749b --- /dev/null +++ b/vendor/zircote/swagger-php/docs/.vitepress/config.js @@ -0,0 +1,82 @@ +function getGuideSidebar() { + return [ + { + text: 'Introduction', + children: [ + { text: 'What is Swagger-PHP?', link: '/guide/' }, + { text: 'Installation', link: '/guide/installation' }, + { text: 'Generating OpenAPI documents', link: '/guide/generating-openapi-documents' }, + ] + }, + { + text: 'Annotating your code', + children: [ + { text: 'Attributes', link: '/guide/attributes' }, + { text: 'Annotations', link: '/guide/annotations' }, + { text: 'Required elements', link: '/guide/required-elements' }, + { text: 'Common techniques', link: '/guide/common-techniques' }, + ] + }, + { + text: 'Upgrading', + children: [ + { text: 'Migration from 3.x to 4.x', link: '/guide/migrating-to-v4' }, + { text: 'Migration from 2.x to 3.x', link: '/guide/migrating-to-v3' }, + ] + }, + { + text: 'Other', + children: [ + { text: 'Cookbook', link: '/guide/cookbook' }, + { text: 'FAQ', link: '/guide/faq' }, + { text: 'Under the hood', link: '/guide/under-the-hood' }, + { text: 'Related Projects', link: '/related-projects' }, + ] + }, + ] +} + +function getReferenceSidebar() { + return [ + { + text: 'Reference', + children: [ + { text: 'Attributes', link: '/reference/attributes' }, + { text: 'Annotations', link: '/reference/annotations' }, + ] + }, + { + text: 'Api', + children: [ + { text: 'Generator', link: '/reference/generator' }, + { text: 'Processors', link: '/reference/processors' }, + ] + }, + ] +} + + +module.exports = { + title: "Swagger-PHP", + base: "/swagger-php/", + description: "Generate OpenAPI documentation for your RESTful API.", + themeConfig: { + repo: 'zircote/swagger-php', + docsDir: 'docs', + docsBranch: 'master', + editLinks: false, + editLinkText: 'Edit this page on GitHub', + + nav: [ + { text: "User Guide", link: "/guide/" }, + { text: "Reference", link: "/reference/" }, + { text: "OpenApi", link: "https://oai.github.io/Documentation/" }, + { text: "Releases", link: "https://github.com/zircote/swagger-php/releases" }, + ], + + sidebar: { + '/guide/': getGuideSidebar(), + '/reference/': getReferenceSidebar() + } + } +}; diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue b/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue new file mode 100644 index 0000000..bec5d06 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue @@ -0,0 +1,31 @@ + + + diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css b/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css new file mode 100644 index 0000000..557687d --- /dev/null +++ b/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css @@ -0,0 +1,30 @@ +/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */ +:root { + --c-brand: #74a535; + --c-brand-light: #94c73d; + + --c-bg: #fefefe; +} + +.tabs-component { + margin: 2em 0; +} + +.tabs-component-panels { + padding: 0 0; + border: none; +} + +.tabs-component-tab-a { + padding: 0.5em; +} + +.tabs-component-tab { + transform: none; +} + +@media (min-width: 700px) { + .tabs-component-tab.is-active { + border-bottom: solid 1px #ddd; + } +} diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js b/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js new file mode 100644 index 0000000..9d856a3 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js @@ -0,0 +1,14 @@ +import DefaultTheme from "vitepress/theme"; +import {Tabs, Tab} from 'vue3-tabs-component'; +import Codeblock from "./components/Codeblock.vue"; +import "./tabs.css"; +import "./custom.css"; + +export default { + ...DefaultTheme, + enhanceApp({ app, router, siteData }) { + app.component('tabs', Tabs); + app.component('tab', Tab); + app.component('codeblock', Codeblock); + }, +}; diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css b/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css new file mode 100644 index 0000000..9fa151d --- /dev/null +++ b/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css @@ -0,0 +1,80 @@ +.tabs-component { + margin: 2em 0; +} + +.tabs-component-tabs { + border: solid 1px #ddd; + border-radius: 6px; + margin-bottom: 5px; +} + +@media (min-width: 700px) { + .tabs-component-tabs { + border: 0; + align-items: stretch; + display: flex; + justify-content: flex-start; + margin-bottom: -1px; + } +} + +.tabs-component-tab { + color: #999; + font-size: 14px; + font-weight: 600; + margin-right: 0; + list-style: none; +} + +.tabs-component-tab:hover { + color: #666; +} + +.tabs-component-tab.is-active { + color: #000; +} + +.tabs-component-tab.is-disabled * { + color: #cdcdcd; + cursor: not-allowed !important; +} + +@media (min-width: 700px) { + .tabs-component-tab { + background-color: #fff; + border: solid 1px #ddd; + border-radius: 3px 3px 0 0; + margin-right: 0.5em; + transform: translateY(2px); + transition: transform 0.3s ease; + } + + .tabs-component-tab.is-active { + border-bottom: solid 1px #fff; + z-index: 2; + transform: translateY(0); + } +} + +.tabs-component-tab-a { + align-items: center; + color: inherit; + display: flex; + padding: 0.5em 1.25em; + text-decoration: none; +} + +.tabs-component-panels { + padding: 1em 0; +} + +@media (min-width: 700px) { + .tabs-component-panels { + background-color: #fff; + border: solid 1px #ddd; + border-radius: 6px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); + padding: 1em 1em; + position: relative; + } +} diff --git a/vendor/zircote/swagger-php/docs/guide/annotations.md b/vendor/zircote/swagger-php/docs/guide/annotations.md new file mode 100644 index 0000000..f73f609 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/annotations.md @@ -0,0 +1,141 @@ +# Annotations + +::: tip Namespace +Using a namespace alias simplifies typing and improves readability. + +All annotations are in the `OpenApi\Annotations` namespace. +::: + +Since Annotations are technically PHP comments, adding `use OpenApi\Annotations as OA;` is strictly speaking not necessary. +However, doctrine will be quite specific about whether an alias is valid or not. + +`swagger-php` will automatically register the `@OA` alias so all annotations can be used using the `@OA` shortcut without +any additional work. + +## Doctrine +Annotations are PHP comments (docblocks) containing [doctrine style annotations](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +::: info +All documentation related to doctrine applies to annotations only. +::: + +**Example:** +```php + openapi --bootstrap constants.php +``` +::: diff --git a/vendor/zircote/swagger-php/docs/guide/attributes.md b/vendor/zircote/swagger-php/docs/guide/attributes.md new file mode 100644 index 0000000..ce6b229 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/attributes.md @@ -0,0 +1,41 @@ +# Attributes + +::: tip Namespace +Using a namespace alias simplifies typing and improves readability. + +All attributes are in the `OpenApi\Attributes` namespace. +::: + +## Nesting + +Similar to annotations attributes can be top level or nested. However, attributes **may be put at the same level** if +there is no ambiguity. `swagger-php` will then merge attributes according to the defined rules about parent/child +relationships. + +**Example** + +Nested: +```php + #[OA\Get( + path: '/api/users', + responses: [ + new OA\Response(response: 200, description: 'AOK'), + new OA\Response(response: 401, description: 'Not allowed'), + ] + )] + public function users() { /* ... */ } +``` + +Not nested: +```php + #[OA\Get(path: '/api/users')] + #[OA\Response(response: 200, description: 'AOK')] + #[OA\Response(response: 401, description: 'Not allowed')] + public function users() { /* ... */ } +``` + +Depending on how much nesting there is this can make things a bit simpler and easier to read. + +::: warning Top level only +Automatic merging of attributes works only at the top level - in the example that would be the method `users()`. +::: diff --git a/vendor/zircote/swagger-php/docs/guide/common-techniques.md b/vendor/zircote/swagger-php/docs/guide/common-techniques.md new file mode 100644 index 0000000..dd3a19f --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/common-techniques.md @@ -0,0 +1,190 @@ +# Common techniques + +## Annotation placement + +You shouldn't place all annotations inside one big block, but scatter them throughout your codebase as close to the +relevant source code as appropriate. + +`swagger-php` will scan your project and merge all meta-data into one` @OA\OpenApi` annotation. + +::: warning +As of `swagger-php` v4 all annotations or attributes must be associated with +a structural element (`class`, `method`, `parameter` or `enum`) +::: + +## Context awareness + +`swagger-php` looks at the context of the annotation and will augment it with things like `property name`, +`data type` (doctype and native type hints) as well as a couple other things. + +This means in a lot of cases it is not necessary to explicitly document all details. + +**Example** +```php + new OA\Property(property: 'name', type: 'string'), + 'email' => new OA\Property(property: 'email', type: 'string'), + ] +)] +class User {} +``` + +## Using class name as type instead of references +Typically, when referencing schemas this is done using `$ref`'s + +```php +#[OAT\Schema(schema: 'user')] +class User +{ +} + +#[OAT\Schema()] +class Book +{ + /** + * @var User + */ + #[OAT\Property(ref: '#/components/schemas/user')] + public $author; +} +``` + +This works, but is not very convenient. + +First, when using custom schema names (`schema: 'user'`), this needs to be taken into account everywhere. +Secondly, having to write `ref: '#/components/schemas/user'` is tedious and error-prone. + +Using attributes all this changes as we can take advantage of PHP itself by referring to a schema by its (fully qualified) +class name. + +With the same `User` schema as before, the `Book::author` property could be written in a few different ways + +```php + #[OAT\Property()] + public User author; +``` + +**or** + +```php + /** + * @var User + */ + #[OAT\Property()] + public author; +``` + +**or** + +```php + #[OAT\Property(type: User::class)] + public author; +``` + +## Enums +As of PHP 8.1 there is native support for `enum`'s. + +`swagger-php` supports enums in much the same way as class names can be used to reference schemas. + +**Example** + +```php +#[Schema()] +enum State +{ + case OPEN; + case MERGED; + case DECLINED; +} + +#[Schema()] +class PullRequest + #[OAT\Property()] + public State $state +} +``` + +However, in this case the schema generated for `State` will be an enum: + +```yaml +components: + schemas: + PullRequest: + properties: + state: + $ref: '#/components/schemas/State' + type: object + State: + type: string + enum: + - OPEN + - MERGED + - DECLINED +``` + +## Multi value query parameter: `&q[]=1&q[]=1` + +PHP allows to have query parameters multiple times in the url and will combine the values to an array if the parameter +name uses trailing `[]`. In fact, it is possible to create nested arrays too by using more than one pair of `[]`. + +In terms of OpenAPI, the parameters can be considered a single parameter with a list of values. + +```php +/** + * @OA\Get( + * path="/api/endpoint", + * description="The endpoint", + * operationId="endpoint", + * tags={"endpoints"}, + * @OA\Parameter( + * name="things[]", + * in="query", + * description="A list of things.", + * required=false, + * @OA\Schema( + * type="array", + * @OA\Items(type="integer") + * ) + * ), + * @OA\Response(response="200", description="All good") + * ) + */ +``` + +The corresponding bit of the spec will look like this: + +```yaml + parameters: + - + name: 'things[]' + in: query + description: 'A list of things.' + required: false + schema: + type: array + items: + type: integer +``` + +`swagger-ui` will show a form that allows to add/remove items (`integer` values in this case) to/from a list +and post those values as something like ```?things[]=1&things[]=2&things[]=0``` + +## Custom response classes + +Even with using refs there is a bit of overhead in sharing responses. One way around that is to write +your own response classes. +The beauty is that in your custom `__construct()` method you can prefill as much as you need. + +Best of all, this works for both annotations and attributes. + +Example: +```php +use OpenApi\Attributes as OA; + +/** + * @Annotation + */ +#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] +class BadRequest extends OA\Response +{ + public function __construct() + { + parent::__construct(response: 400, description: 'Bad request'); + } +} + +class Controller +{ + + #[OA\Get(path: '/foo', responses: [new BadRequest()])] + public function get() + { + } + + #[OA\Post(path: '/foo')] + #[BadRequest] + public function post() + { + } + + /** + * @OA\Delete( + * path="/foo", + * @BadRequest() + * ) + */ + public function delete() + { + } +} +``` + +::: tip Annotations only? +If you are only interested in annotations you canleave out the attribute setup line (`#[\Attribute...`) for `BadRequest`. + +Furthermore, your custom annotations should extend from the `OpenApi\Annotations` namespace. +::: + +## Annotating class constants +```php +use OpenApi\Attributes as OA; + +#[OA\Schema()] +class Airport +{ + #[OA\Property(property='kind')] + public const KIND = 'Airport'; +} +``` +The `const` property is supported in OpenApi 3.1.0. +```yaml +components: + schemas: + Airport: + properties: + kind: + type: string + const: Airport +``` +For 3.0.0 this is serialized into a single value `enum`. +```yaml +components: + schemas: + Airport: + properties: + kind: + type: string + enum: + - Airport +``` diff --git a/vendor/zircote/swagger-php/docs/guide/faq.md b/vendor/zircote/swagger-php/docs/guide/faq.md new file mode 100644 index 0000000..ee16686 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/faq.md @@ -0,0 +1,80 @@ +# FAQ + +## Warning: Required `@OA\Info()` not found + +With adding support for [PHP attributes](https://www.php.net/manual/en/language.attributes.php) in version 4, some +architectural changes had to be made. + +One of those changes is that placing annotations in your source files is now subject to the same limitations as attributes. +These limits are dictated by the PHP reflection API, specifically where it provides access to attributes and doc comments. + +This means stand-alone annotations are no longer supported and ignored as `swagger-php` cannot 'see' them any more. + +Supported locations: +* class +* interface +* trait +* method +* property +* class/interface const + +Most commonly this manifests with a warning about the required `@OA\Info` not being found. While most annotations have specific +related code, the info annotation (and a few more) is kind of global. + +The simplest solution to avoid this issue is to add a 'dummy' class to the docblock and add +all 'global' annotations (e.g. `Tag`, `Server`, `SecurityScheme`, etc.) **in a single docblock** to that class. + +```php +/** + * @OA\Tag( + * name="user", + * description="User related operations" + * ) + * @OA\Info( + * version="1.0", + * title="Example API", + * description="Example info", + * @OA\Contact(name="Swagger API Team") + * ) + * @OA\Server( + * url="https://example.localhost", + * description="API server" + * ) + */ +class OpenApiSpec +{ +} +``` + +## Skipping unknown `\SomeClass` + +This message means that `swagger-php` has tried to use reflection to inspect `\SomeClass` and that PHP could not find/load +that class. Effectively, this means that `class_exists("\SomeClass")` returns `false`. + +### Using the `-b` `--bootstrap` option + +There are a number of reasons why this could happen. If you are using the `openapi` command line tool from a global +installation typically the application classloader (composer) is not active. +With you application root being `myapp` you could try: + +```shell +openapi -b myapp/vendor/autoload.php myapp/src +``` + +The `-b` allows to execute some extra PHP code to load whatever is needed to register your apps classloader with PHP. + +### Namespace mismatch + +Another reason for this error could be that your class actually has the wrong namespace (or no namespace at all!). + +Depending on your framework this might still work in the context of your app, but the composer autoloader +alone might not be able to load your class (assuming you are using composer). + +## No output from `openapi` command line tool + +Depending on your PHP configuration, running the `openapi` command line tool might result in no output at all. + +The reason for this is that `openapi` currently uses the [`error_log`](https://www.php.net/manual/en/function.error-log.php) +function for all output. + +So if this is configured to write to a file, then it will seem like the command is broken. diff --git a/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md b/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md new file mode 100644 index 0000000..c2eabcd --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md @@ -0,0 +1,60 @@ +# Generating OpenAPI documents + +## `./bin/openapi` + +`swagger-php` includes a command line tool `./bin/openapi`. This can be used to generate OpenAPI documents. + +```shell +> ./vendor/bin/openapi app -o openapi.yaml +``` + +::: tip Output Format +By default the output format is YAML. If a filename is given (via `--output` or `-o`) +the tool will use the file extension to determine the format. + +The `--format` option can be used to force a specific format. +::: + +For a list of all available options use the `-h` option + +```shell +> ./bin/openapi -h + +Usage: openapi [--option value] [/path/to/project ...] + +Options: + --legacy (-l) Use legacy TokenAnalyser; default is the new ReflectionAnalyser + --output (-o) Path to store the generated documentation. + ex: --output openapi.yaml + --exclude (-e) Exclude path(s). + ex: --exclude vendor,library/Zend + --pattern (-n) Pattern of files to scan. + ex: --pattern "*.php" or --pattern "/\.(phps|php)$/" + --bootstrap (-b) Bootstrap a php file for defining constants, etc. + ex: --bootstrap config/constants.php + --processor Register an additional processor. + --format Force yaml or json. + --debug Show additional error information. + --version The OpenAPI version; defaults to 3.0.0. + --help (-h) Display this help message. +``` + +## Using PHP + +Depending on your use case PHP code can also be used to generate OpenAPI documents in a more dynamic way. + +In its simplest form this may look something like + +```php +toYaml(); +``` + +::: tip Programming API +Details about the `swagger-php` API can be found in the [reference](../reference/index.md). +::: diff --git a/vendor/zircote/swagger-php/docs/guide/index.md b/vendor/zircote/swagger-php/docs/guide/index.md new file mode 100644 index 0000000..e8c555b --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/index.md @@ -0,0 +1,20 @@ +# What is Swagger-PHP? + +`swagger-php` is a library that extracts API metadata from your PHP source code files. + +The idea is to add `swagger-php` [annotations](annotations.md) or [attributes](attributes.md) +next to the relevant PHP code in your application. These will contain the details about your API and +`swagger-php` will convert those into machine-readable [OpenAPI documentation](https://oai.github.io/Documentation/specification.html). + +By adding your API documentation next to the corresponding source code (same file!) makes it easy to keep it up-to-date +as all details can be modified in one place. + +::: tip Annotating vs. Annotations +When talking about annotating your code we mean the act of adding meta-data to your codebase. This can be done by +either adding [`Annotations`](annotations.md) or [`Attributes`](attributes.md). +::: + +::: warning Requirements +Using `swagger-php` requires a minimum of **PHP 7.2** for using annotations and +at least **PHP 8.1** to use attributes. +::: diff --git a/vendor/zircote/swagger-php/docs/guide/installation.md b/vendor/zircote/swagger-php/docs/guide/installation.md new file mode 100644 index 0000000..ba07e5b --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/installation.md @@ -0,0 +1,20 @@ +# Installation + +## Per project + +We recommend adding `swagger-php` to your project using [Composer](https://getcomposer.org) + +```shell +> composer require zircote/swagger-php +``` + +## Globally + +Alternatively, use the composer `global` argument to install `swagger-php` globally. + +```shell +> composer global require zircote/swagger-php +``` +::: warning PATH variables +Remember to add the `~/.composer/vendor/bin` directory to the PATH in your environment. +::: diff --git a/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md b/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md new file mode 100644 index 0000000..641e72d --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md @@ -0,0 +1,58 @@ +# Migrating to v3 + +Swagger-PHP 3.x generates an openapi.json file that follows the [OpenAPI Version 3.0.x Specification](https://github.com/OAI/OpenAPI-Specification). + +If you need to output the older 2.x specification use OpenApi-php 2.x + +## The default output changed from json to yaml + +This aligns better with the direction of the swagger documentation and examples. +Annotations can't be used as string anymore, you'll need to call `toYaml()` or `toJson()` if you prefer the json format. + +## Updated CLI + +- Added colors +- No output for successful execution (Removed summary) +- non-zero exit when an error occurred. +- Defaults to yaml +- Defaults to stdout. To save to openapi.yaml use `-o` or `>` + +## Changed annotations + +### SWG is renamed to OA + +The namespace is renamed from SWG (Swagger) to OA (OpenApi) + +### @SWG\Swagger() is renamed to @OA\OpenApi() + +### @SWG\Path() is renamed to @OA\PathItem() + +The specification uses the term "Path Item Object", updated the annotation to reflect that. + +### @SWG\Definition() is removed + +Use @OA\Schema() instead of @OA\Definition() and update the references from "#/definitions/something" to "#/components/schemas/something". + +### @SWG\Path is removed + +Use @OA\PathItem instead of @SWG\Path and update references. + +### Consumes, produces field is removed from OpenAPI specification + +Use @OA\MediaType to set data format. + +### Rename parameter references + +Rename `#/parameters/{parameter_name}` to `#/components/parameters/{parameter_name}` + +### Rename response references + +Rename `#/responses/{response}` to `#/components/responses/{response}` + +### Renamed cli + +Renamed swagger to openapi + +### More details about differences: + +[A Visual Guide to What's New in Swagger 3.0](https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/) diff --git a/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md b/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md new file mode 100644 index 0000000..3e619a6 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md @@ -0,0 +1,138 @@ +# Migrating to v4 + +## Overview +* As of PHP 8.1 annotations may be used as + [PHP attributes](https://www.php.net/manual/en/language.attributes.overview.php) instead. + That means all references to annotations in this document also apply to attributes. +* Annotations now **must be** associated with a structural element (class, trait, interface), a method, property or const. +* A new annotation `PathParameter` was added for improved framework support. +* A new annotation `Attachable` was added to simplify custom processing. + `Attachable` can be used to attach arbitrary data to any given annotation. +* Deprecated elements have been removed + * `\Openapi\Analysis::processors()` + * `\Openapi\Analyser::$whitelist` + * `\Openapi\Analyser::$defaultImports` + * `\Openapi\Logger` +* Legacy support is available via the previous `TokenAnalyser` +* Improvements to the `Generator` class + +## Annotations as PHP attributes +While PHP attributes have been around since PHP 8.0 they were lacking the ability to be nested. +This changes with PHP 8.1 which allows to use `new` in initializers. + +Swagger-php attributes also make use of named arguments, so attribute parameters can be (mostly) typed. +There are some limitations to type hints which can only be resolved once support for PHP 7.x is dropped. + +### Using annotations +```php + +use OpenApi\Annotations as OA; + +/** + * @OA\Info( + * version="1.0.0", + * title="My API", + * @OA\License(name="MIT"), + * @OA\Attachable() + * ) + */ +class OpenApiSpec +{ +} +``` +### Using attributes +```php + +use OpenApi\Attributes as OA; + +#[OA\Info( + version: '1.0.0', + title: 'My API', + attachables: [new OA\Attachable()] +)] +#[OA\License(name: 'MIT')] +class OpenApiSpec +{ +} +``` + +## Optional nesting +One of the few differences between annotations and attributes visible in the above example is that the `OA\License` attribute +is not nested within `OA\Info`. Nesting of attributes is possible and required in certain cases however, **in cases where there +is no ambiguity attributes may be all written on the top level** and swagger-php will do the rest. + +## Annotations must be associated with a structural element +The (now legacy) way of parsing PHP files meant that docblocks could live in a file without a single line +of actual PHP code. + +PHP Attributes cannot exist in isolation; they need code to be associated with and then are available +via reflection on the associated structural element. +In order to allow to keep supporting annotations and the code simple it made sense to treat annotations and attributes +the same in this respect. + +## The `PathParameter` annotation +As annotation this is just a short form for +```php + @OA\Parameter(in='body') +``` + +Things get more interesting when it comes to using it as attribute, though. In the context of +a controller you can now do something like +```php +class MyController +{ + #[OA\Get(path: '/products/{product_id}')] + public function getProduct( + #[OA\PathParameter] string $product_id) + { + } +} +``` +Here it avoids having to duplicate details about the `$product_id` parameter and the simple use of the attribute +will pick up typehints automatically. + +## The `Attachable` annotation +Technically these were added in version 3.3.0, however they become really useful only with version 4. + +The attachable annotation is similar to the OpenApi vendor extension `x=`. The main difference are that +1. Attachables allow complex structures and strong typing +2. **Attachables are not added to the generated spec.** + +Their main purpose is to make customizing swagger-php easier by allowing to add arbitrary data to any annotation. + +One possible use case could be custom annotations. Classes extending `Attachable` are allowed to limit +the allowed parent annotations. This means it would be easy to create a new attribute to flag certain endpoints +as private and exclude them under certain conditions from the spec (via a custom processor). + +## Removed deprecated elements +### `\Openapi\Analysis::processors()` +Processors have been moved into the `Generator` class incl. some new convenience methods. +### `\Openapi\Analyser::$whitelist` +This has been replaced with the `Generator` `namespaces` property. +### `\Openapi\Analyser::$defaultImports` +This has been replaced with the `Generator` `aliases` property. +### `\Openapi\Logger` +This class has been removed completely. Instead, you may configure a [PSR-3 logger](https://www.php-fig.org/psr/psr-3/). + +## Improvements to the `Generator` class +The removal of deprecated static config options means that the `Generator` class now is +the main entry point into swagger-php when used programmatically. + +To make the migration as simple as possible a new `Generator::withContext(callable)` has been added. +This allows to use parts of the library (an `Analyser` instance, for example) within the context of a `Generator` instance. + +Example: +```php +$analyser = createMyAnalyser(); + +$analysis = (new Generator()) + ->addAlias('fo', 'My\\Attribute\\Namespace') + ->addNamespace('Other\\Annotations\\') + ->withContext(function (Generator $generator, Analysis $analysis, Context $context) use ($analyser) { + $analyser->setGenerator($generator); + $analysis = $analyser->fromFile('my_code.php', $context); + $analysis->process($generator->getProcessors()); + + return $analysis; + }); +``` diff --git a/vendor/zircote/swagger-php/docs/guide/required-elements.md b/vendor/zircote/swagger-php/docs/guide/required-elements.md new file mode 100644 index 0000000..b14f5a6 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/required-elements.md @@ -0,0 +1,41 @@ +# Required elements + +The OpenAPI specification defines a minimum set of information for a valid document. + +For the most part that consists of some general information about the API like `name`, `version` +and at least one endpoint. + +The endpoint, in turn, needs to have a path and at least one response. + +## Minimum required annotations + +With the above in mind a minimal API with a single endpoint could look like this + + + + + + +with the resulting OpenAPI document like this + +<<< @/snippets/minimal_api.yaml + +::: warning Code locations +Attributes and annotations can be added anywhere on declarations in code as defined by the PHP docs. +These are limited to the extent of what the PHP Reflection APIs supports. +::: + +## Optional elements + +Looking at the generated document you will notice that there are some elements that `swagger-php` adds automatically +when they are missing. + +For the most part those are `@OA\OpenApi`, `@OA\Components` and `@OA\PathItem`. diff --git a/vendor/zircote/swagger-php/docs/guide/under-the-hood.md b/vendor/zircote/swagger-php/docs/guide/under-the-hood.md new file mode 100644 index 0000000..7ee2dbb --- /dev/null +++ b/vendor/zircote/swagger-php/docs/guide/under-the-hood.md @@ -0,0 +1,50 @@ +# Under the hood + +## Processing flow + +- The `Generator` iterates over the given sources (Symfony `Finder`, file/directory list, etc) +- The configured analyser (`AnalyserInterface`) reads the files and builds an `Analysis` object. + Default (as of v4) is the `ReflectionAnalyser`. Alternatively, there is the `TokenAnalyser` which was the default in v3. +- The `Analysis` object and its annotations are then processed by the configured processors. +- If enabled, the analysis/annotations are validated. +- The root `OpenApi` annotation then contains all annotations and is serialized into YAML/JSON. + +## `Context` + +Each annotation is associated with a unique `Context` instance. This contains details, collected by the parser/analyser, +about the PHP context where the annotation was found. + +Typically, there will be a processor that uses the data to augment/enrich the annotation. + +**Examples of the data collected:** + - class/interface/trait/enum names + - property names + - doctype or native type hints + - file name and line number + +## Analysis + +Contains all detected annotations and other relevant meta-data. + +It uses a `SplObjectStorage` instance to store the parsed annotations. + +## Documentation + +This documentation is generated with [VitePress](https://vitepress.vuejs.org/) + +### Installation +```shell +cd docs +npm install vitepress +``` + +### Workflow + +* Edit `.md` files in the `docs` folder +* Update annotation / attribute PHP docblocks.
These will be extracted during publishing into the [reference](../reference/) section. +* Run 'composer docs:build' to check for any errors +* Run 'composer docs:dev' to test the generated documentation locally (`localhost:3000`) +* Create PR and update `master` +* Manually trigger the `gh-pages` workflow to update the online docs. + +The last step requires commit rights on `zircote/swagger-php`. diff --git a/vendor/zircote/swagger-php/docs/index.md b/vendor/zircote/swagger-php/docs/index.md new file mode 100644 index 0000000..b862797 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/index.md @@ -0,0 +1,56 @@ +--- +home: true +actionText: User Guide → +actionLink: /guide/ +features: + - title: OpenAPI conformant + details: Generate OpenAPI documents in version 3.0 or 3.1. + - title: Document your API inside PHP source code + details: Using swagger-php lets you write the API documentation inside the PHP source files + which helps keeping the documentation up-to-date. + - title: Annotation and Attribute support + details: Annotations can be either docblocks or PHP 8.1 attributes. +--- + +### 1. Install with composer: + +```shell +> composer require zircote/swagger-php +``` + +### 2. Update your code + +Add `swagger-php` annotations or attributes to your source code. + + + + + + +### 3. Generate OpenAPI documentation + +```shell +> ./bin/openapi src -o openapi.yaml +``` + +### 4. Explore and interact with your API + +Use an OpenAPI tool like [Swagger UI ](https://swagger.io/tools/swagger-ui/) to explore and interact with your API. + +## Links + +- [User Guide](guide/index.md) +- [Reference](reference/index.md) +- [OpenApi Documentation](https://oai.github.io/Documentation/) +- [OpenApi Specification](https://spec.openapis.org/oas/v3.1.0.html) +- [Learn by example](https://github.com/zircote/swagger-php/tree/master/Examples) +- [Related projects](related-projects.md) +- [Swagger-php 2.x documentation](https://github.com/zircote/swagger-php/tree/2.x/docs) diff --git a/vendor/zircote/swagger-php/docs/package.json b/vendor/zircote/swagger-php/docs/package.json new file mode 100644 index 0000000..1663db1 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/package.json @@ -0,0 +1,14 @@ +{ + "name": "swagger-php-docs", + "version": "4.0.0", + "license": "Apache-2.0", + "scripts": { + "dev": "vitepress dev .", + "build": "vitepress build .", + "deploy": "npm run build && git-directory-deploy --branch gh-pages --directory .vitepress/dist/" + }, + "devDependencies": { + "vitepress": "^0.22", + "vue3-tabs-component": "^1.0.8" + } +} diff --git a/vendor/zircote/swagger-php/docs/reference/annotations.md b/vendor/zircote/swagger-php/docs/reference/annotations.md new file mode 100644 index 0000000..5f83e69 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/reference/annotations.md @@ -0,0 +1,1212 @@ +# Annotations + +This page is generated automatically from the `swagger-php` sources. + +For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) + +In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. + + +## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Annotations/AdditionalProperties.php) + + + +#### Allowed in +--- +Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Attachable.php) + +A container for custom data to be attached to an annotation. + +These will be ignored by `swagger-php` but can be used for custom processing. + +#### Allowed in +--- +AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent + +## [Components](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Components.php) + +Holds a set of reusable objects for different aspects of the OA. + +All objects defined within the components object will have no effect on the API unless they are explicitly +referenced from properties outside the components object. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable + +#### Properties +--- +
+
callbacks : callable[]
+

Reusable Callbacks.

+
+ +#### Reference +--- +- [OAI Components Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#components-object) + +## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Contact.php) + +Contact information for the exposed API. + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

The identifying name of the contact person/organization.

+
url : string
+

The URL pointing to the contact information.

+
email : string
+

The email address of the contact person/organization.

+
+ +#### Reference +--- +- [OAI Contact Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#contact-object) + +## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Delete.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Discriminator.php) + +The discriminator is a specific object in a schema which is used to inform the consumer of +the specification of an alternative schema based on the value associated with it. + +This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. +On top of this subset, there are extensions provided by this specification to allow for more complete documentation. + +#### Allowed in +--- +Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
propertyName : string
+

The name of the property in the payload that will hold the discriminator value.

+
mapping : string[]
+

An object to hold mappings between payload values and schema names or references.

+
+ +#### Reference +--- +- [OAI Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminatorObject) +- [JSON Schema](http://json-schema.org/) + +## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Examples.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
example : string
+

The key into `#/components/examples`.

+
summary : string
+

Short description for the example.

+
description : string
+

Embedded literal example.
+
+The value field and externalValue field are mutually exclusive.
+
+To represent examples of media types that cannot naturally be represented
+in JSON or YAML, use a string value to contain the example, escaping where necessary.

+
value : int|string|array
+

Embedded literal example.
+
+The value field and externalValue field are mutually exclusive.
+
+To represent examples of media types that cannot naturally be represented
+in JSON or YAML, use a string value to contain the example, escaping where necessary.

+
externalValue : string
+

An URL that points to the literal example.
+
+This provides the capability to reference examples that cannot easily be included
+in JSON or YAML documents.
+
+The value field and externalValue field are mutually exclusive.

+
+ +## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ExternalDocumentation.php) + +Allows referencing an external resource for extended documentation. + +#### Allowed in +--- +OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
description : string
+

A short description of the target documentation. GFM syntax can be used for rich text representation.

+
url : string
+

The URL for the target documentation.

+
+ +#### Reference +--- +- [OAI External Documentation Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#external-documentation-object) + +## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Flow.php) + +Configuration details for a supported OAuth Flow. + +#### Allowed in +--- +SecurityScheme + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
authorizationUrl : string
+

The authorization url to be used for this flow.
+
+This must be in the form of an url.

+
tokenUrl : string
+

The token URL to be used for this flow.
+
+This must be in the form of an url.

+
refreshUrl : string
+

The URL to be used for obtaining refresh tokens.
+
+This must be in the form of an url.

+
flow : string
+

Flow name.
+
+One of ['implicit', 'password', 'authorizationCode', 'clientCredentials'].

+
scopes : array
+

The available scopes for the OAuth2 security scheme.
+
+A map between the scope name and a short description for it.

+
+ +#### Reference +--- +- [OAI OAuth Flow Object](https://swagger.io/specification/#oauthFlowObject) + +## [Get](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Get.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Head](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Head.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Header](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Header.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Schema, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
header : string
+

No details available.

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+CommonMark syntax MAY be used for rich text representation.

+
required : bool
+

No details available.

+
deprecated : bool
+

Specifies that a parameter is deprecated and SHOULD be transitioned out of usage.

+
allowEmptyValue : bool
+

Sets the ability to pass empty-valued parameters.
+
+This is valid only for query parameters and allows sending a parameter with an empty value.
+
+Default value is false.
+
+If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue SHALL be ignored.

+
+ +#### Reference +--- +- [OAI Header Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#headerObject). + +## [Info](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Info.php) + +The object provides metadata about the API. + +The metadata may be used by the clients if needed and may be presented in editing or documentation generation tools for convenience. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Contact, License, Attachable + +#### Properties +--- +
+
title : string
+

The title of the application.

+
description : string
+

A short description of the application.
+
+CommonMark syntax may be used for rich text representation.

+
termsOfService : string
+

An URL to the Terms of Service for the API.
+
+Must be in the format of an url.

+
version : string
+

The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API implementation version).

+
+ +#### Reference +--- +- [OAI Info Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#info-object) + +## [Items](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Items.php) + +The description of an item in a Schema with type `array`. + +#### Allowed in +--- +Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/JsonContent.php) + +Shorthand for a json response. + +Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/json'` will be generated. + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable + +## [License](https://github.com/zircote/swagger-php/tree/master/src/Annotations/License.php) + +License information for the exposed API. + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

The license name used for the API.

+
identifier : string
+

An SPDX license expression for the API. The `identifier` field is mutually exclusive of the `url` field.

+
url : string
+

An URL to the license used for the API. This MUST be in the form of an URL.
+
+The `url` field is mutually exclusive of the `identifier` field.

+
+ +#### Reference +--- +- [OAI License Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#license-object) + +## [Link](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Link.php) + +The Link object represents a possible design-time link for a response. + +The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known +relationship and traversal mechanism between responses and other operations. + +Unlike dynamic links (i.e. links provided in the response payload), the OA linking mechanism does not require +link information in the runtime response. + +For computing links, and providing instructions to execute them, a runtime expression is used for +accessing values in an operation and using them as parameters while invoking the linked operation. + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Server, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
link : string
+

The key into MediaType->links array.

+
operationRef : string
+

A relative or absolute reference to an OA operation.
+
+This field is mutually exclusive of the operationId field, and must point to an Operation object.
+
+Relative values may be used to locate an existing Operation object in the OpenAPI definition.

+
operationId : string
+

The name of an existing, resolvable OA operation, as defined with a unique operationId.
+
+This field is mutually exclusive of the operationRef field.

+
parameters : array<string,mixed>
+

A map representing parameters to pass to an operation as specified with operationId or identified via
+operationRef.
+
+The key is the parameter name to be used, whereas the value can be a constant or an expression to
+be evaluated and passed to the linked operation.
+The parameter name can be qualified using the parameter location [{in}.]{name} for operations
+that use the same parameter name in different locations (e.g. path.id).

+
requestBody
+

A literal value or {expression} to use as a request body when calling the target operation.

+
description : string
+

A description of the link.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Link Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object) + +## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Annotations/MediaType.php) + +Each Media Type object provides schema and examples for the media type identified by its key. + +#### Allowed in +--- +Response, RequestBody + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
mediaType : string
+

The key into Operation->content array.

+
example
+

Example of the media type.
+
+The example object should be in the correct format as specified by the media type.
+The example object is mutually exclusive of the examples object.
+
+Furthermore, if referencing a schema which contains an example,
+the example value shall override the example provided by the schema.

+
encoding : array<string,mixed>
+

A map between a property name and its encoding information.
+
+The key, being the property name, must exist in the schema as a property.
+
+The encoding object shall only apply to requestBody objects when the media type is multipart or
+application/x-www-form-urlencoded.

+
+ +#### Reference +--- +- [OAI Media Type Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) + +## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Annotations/OpenApi.php) + +This is the root document object for the API specification. + +#### Nested elements +--- +Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable + +#### Properties +--- +
+
openapi : string
+

The semantic version number of the OpenAPI Specification version that the OpenAPI document uses.
+
+The openapi field should be used by tooling specifications and clients to interpret the OpenAPI document.
+
+A version specified via `Generator::setVersion()` will overwrite this value.
+
+This is not related to the API info::version string.

+
security : array
+

Lists the required security schemes to execute this operation.
+
+The name used for each property must correspond to a security scheme declared
+in the Security Schemes under the Components Object.
+Security Requirement Objects that contain multiple schemes require that
+all schemes must be satisfied for a request to be authorized.
+This enables support for scenarios where multiple query parameters or
+HTTP headers are required to convey security information.
+When a list of Security Requirement Objects is defined on the Open API object or
+Operation Object, only one of Security Requirement Objects in the list needs to
+be satisfied to authorize the request.

+
+ +#### Reference +--- +- [OAI OpenApi Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#openapi-object) + +## [Options](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Options.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Parameter.php) + +Describes a single operation parameter. + +A unique parameter is defined by a combination of a name and location. + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
parameter : string
+

The key into Components::parameters or PathItem::parameters array.

+
name : string
+

The (case-sensitive) name of the parameter.
+
+If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object.
+
+If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored.
+For all other cases, the name corresponds to the parameter name used by the in property.

+
in : string
+

The location of the parameter.
+
+Possible values are "query", "header", "path" or "cookie".

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+
+CommonMark syntax may be used for rich text representation.

+
required : bool
+

Determines whether this parameter is mandatory.
+
+If the parameter location is "path", this property is required and its value must be true.
+Otherwise, the property may be included and its default value is false.

+
deprecated : bool
+

Specifies that a parameter is deprecated and should be transitioned out of usage.

+
allowEmptyValue : bool
+

Sets the ability to pass empty-valued parameters.
+
+This is valid only for query parameters and allows sending a parameter with an empty value.
+
+Default value is false.
+
+If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored.

+
style : string
+

Describes how the parameter value will be serialized depending on the type of the parameter value.
+
+Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form.

+
explode : bool
+

When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map.
+
+For other types of parameters this property has no effect.
+
+When style is form, the default value is true.
+For all other styles, the default value is false.

+
allowReserved : bool
+

Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding.
+
+This property only applies to parameters with an in value of query.
+
+The default value is false.

+
example
+

Example of the media type.
+
+The example should match the specified schema and encoding properties if present.
+The example object is mutually exclusive of the examples object.
+Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema.
+To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary.

+
content : MediaType[]
+

A map containing the representations for the parameter.
+
+The key is the media type and the value describes it.
+The map must only contain one entry.

+
matrix
+

Path-style parameters defined by RFC6570.

See: RFC6570

+
label
+

Label style parameters defined by RFC6570.

See: RFC6570

+
form
+

Form style parameters defined by RFC6570.
+
+This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0.

See: RFC6570

+
simple : array
+

Simple style parameters defined by RFC6570.
+
+This option replaces collectionFormat with a csv value from OpenAPI 2.0.

See: RFC6570

+
spaceDelimited : array
+

Space separated array values.
+
+This option replaces collectionFormat equal to ssv from OpenAPI 2.0.

+
pipeDelimited : array
+

Pipe separated array values.
+
+This option replaces collectionFormat equal to pipes from OpenAPI 2.0.

+
deepObject
+

Provides a simple way of rendering nested objects using form parameters.

+
+ +#### Reference +--- +- [OAA Parameter Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) + +## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Patch.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathItem.php) + +Describes the operations available on a single path. + +A Path Item may be empty, due to ACL constraints. +The path itself is still exposed to the documentation viewer, but they will not know which operations and parameters are available. + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
path : string
+

Key for the Path Object (OpenApi->paths array).

+
summary : string
+

An optional, string summary, intended to apply to all operations in this path.

+
+ +#### Reference +--- +- [OAI Path Item Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object) + +## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathParameter.php) + +A `@OA\Request` path parameter. + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Properties +--- +
+
in
+

No details available.

+
required
+

No details available.

+
+ +## [Post](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Post.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Property](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Property.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Properties +--- +
+
property : string
+

The key into Schema->properties array.

+
+ +## [Put](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Put.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Annotations/RequestBody.php) + +Describes a single request body. + +#### Allowed in +--- +Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put + +#### Nested elements +--- +MediaType, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
request : string
+

Request body model name.

+
description : string
+

A brief description of the parameter.
+
+This could contain examples of use.
+
+CommonMark syntax may be used for rich text representation.

+
required : bool
+

Determines whether this parameter is mandatory.
+
+If the parameter location is "path", this property is required and its value must be true.
+Otherwise, the property may be included and its default value is false.

+
+ +#### Reference +--- +- [OAI Request Body Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#requestBodyObject) + +## [Response](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Response.php) + +Describes a single response from an API Operation, including design-time, +static links to operations based on the response. + +#### Allowed in +--- +Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace + +#### Nested elements +--- +MediaType, Header, Link, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
response : string|int
+

The key into Operations->responses array.
+
+A HTTP status code or default.

+
description : string
+

A short description of the response.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object) + +## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Schema.php) + +The definition of input and output data types. + +These types can be objects, but also primitives and arrays. + +This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. +On top of this subset, there are extensions provided by this specification to allow for more complete documentation. + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, Header + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
schema : string
+

The key into Components->schemas array.

+
title : string
+

Can be used to decorate a user interface with information about the data produced by this user interface.
+
+Preferably short; use description for more details.

+
description : string
+

A description will provide explanation about the purpose of the instance described by this schema.

+
maxProperties : int
+

An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the
+value of this property.

+
minProperties : int
+

An object instance is valid against "minProperties" if its number of properties is greater than, or equal to,
+the value of this property.

+
required : string[]
+

An object instance is valid against this property if its property set contains all elements in this property's
+array value.

+
type : string
+

The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or
+"object".

+
format : string
+

The extending format for the previously mentioned type. See Data Type Formats for further details.

+
collectionFormat : string
+

Determines the format of the array if type array is used.
+Possible values are:
+- csv: comma separated values foo,bar.
+- ssv: space separated values foo bar.
+- tsv: tab separated values foo\tbar.
+- pipes: pipe separated values foo|bar.
+- multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz.
+This is valid only for parameters of type query or formData.
+Default value is csv.

+
default
+

Sets a default value to the parameter. The type of the value depends on the defined type.

See: JSON schema validation

+
maximum : int|float
+

No details available.

See: JSON schema validation

+
exclusiveMaximum : bool
+

No details available.

See: JSON schema validation

+
minimum : int|float
+

No details available.

See: JSON schema validation

+
exclusiveMinimum : bool
+

No details available.

See: JSON schema validation

+
maxLength : int
+

No details available.

See: JSON schema validation

+
minLength : int
+

No details available.

See: JSON schema validation

+
pattern : string
+

A string instance is considered valid if the regular expression matches the instance successfully.

+
maxItems : int
+

No details available.

See: JSON schema validation

+
minItems : int
+

No details available.

See: JSON schema validation

+
uniqueItems : bool
+

No details available.

See: JSON schema validation

+
enum : string[]|int[]|float[]
+

No details available.

See: JSON schema validation

+
multipleOf : int|float
+

A numeric instance is valid against "multipleOf" if the result of the division of the instance by this
+property's value is an integer.

+
readOnly : bool
+

Declares the property as "read only".
+
+Relevant only for Schema "properties" definitions.
+
+This means that it may be sent as part of a response but should not be sent as part of the request.
+If the property is marked as readOnly being true and is in the required list, the required will take effect on
+the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is
+false.

+
writeOnly : bool
+

Declares the property as "write only".
+
+Relevant only for Schema "properties" definitions.
+Therefore, it may be sent as part of a request but should not be sent as part of the response.
+If the property is marked as writeOnly being true and is in the required list, the required will take effect on
+the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is
+false.

+
example
+

A free-form property to include an example of an instance for this schema.
+
+To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to
+contain the example with escaping where necessary.

+
nullable : bool
+

Allows sending a null value for the defined schema.
+Default value is false.

+
deprecated : bool
+

Specifies that a schema is deprecated and should be transitioned out of usage.
+Default value is false.

+
allOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against all schemas
+defined by this property's value.

+
anyOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against at least one
+schema defined by this property's value.

+
oneOf : Schema[]
+

An instance validates successfully against this property if it validates successfully against exactly one schema
+defined by this property's value.

+
not
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29.

+
additionalItems
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10.

+
contains
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14.

+
patternProperties
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19.

+
dependencies
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21.

+
propertyNames
+

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22.

+
const : mixed
+

http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3.

+
+ +#### Reference +--- +- [OAI Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schemaObject) +- [JSON Schema](http://json-schema.org/) + +## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Annotations/SecurityScheme.php) + + + +#### Allowed in +--- +Components + +#### Nested elements +--- +Flow, Attachable + +#### Properties +--- +
+
ref : string|object
+

No details available.

See: Using refs

+
securityScheme : string
+

The key into OpenApi->security array.

+
type : string
+

The type of the security scheme.

+
description : string
+

A short description for security scheme.

+
name : string
+

The name of the header or query parameter to be used.

+
in : string
+

Required The location of the API key.

+
bearerFormat : string
+

A hint to the client to identify how the bearer token is formatted.
+
+Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.

+
scheme : string
+

The name of the HTTP Authorization scheme.

See: RFC7235

+
openIdConnectUrl : string
+

OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL.

+
+ +#### Reference +--- +- [OAI Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#securitySchemeObject). + +## [Server](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Server.php) + +An object representing a server. + +#### Allowed in +--- +OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link + +#### Nested elements +--- +ServerVariable, Attachable + +#### Properties +--- +
+
url : string
+

An URL to the target host.
+
+This URL supports Server Variables and may be relative,
+to indicate that the host location is relative to the location where the OpenAPI document is being served.
+Variable substitutions will be made when a variable is named in {brackets}.

+
description : string
+

An optional string describing the host designated by the URL.
+
+CommonMark syntax may be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Server Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-object) + +## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ServerVariable.php) + +An object representing a server variable for server URL template substitution. + +#### Allowed in +--- +Server + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
serverVariable : string
+

The key into Server->variables array.

+
enum : string[]|int[]|float[]
+

An enumeration of values to be used if the substitution options are from a limited set.

+
default : string
+

The default value to use for substitution, and to send, if an alternate value is not supplied.
+
+Unlike the Schema Object's default, this value must be provided by the consumer.

+
variables : array
+

A map between a variable name and its value.
+
+The value is used for substitution in the server's URL template.

+
description : string
+

An optional description for the server variable.
+
+CommonMark syntax MAY be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Server Variable Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object) + +## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Tag.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +ExternalDocumentation, Attachable + +#### Properties +--- +
+
name : string
+

The name of the tag.

+
description : string
+

A short description for the tag. GFM syntax can be used for rich text representation.

+
+ +#### Reference +--- +- [OAI Tag Object]( https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#tagObject). + +## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Trace.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Properties +--- +
+
method
+

No details available.

+
+ +## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Xml.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, Property, Schema, Items, XmlContent + +#### Nested elements +--- +Attachable + +#### Properties +--- +
+
name : string
+

Replaces the name of the element/attribute used for the described schema property.
+
+When defined within the Items Object (items), it will affect the name of the individual XML elements within the list.
+When defined alongside type being array (outside the items), it will affect the wrapping element
+and only if wrapped is true.
+
+If wrapped is false, it will be ignored.

+
namespace : string
+

The URL of the namespace definition. Value SHOULD be in the form of an URL.

+
prefix : string
+

The prefix to be used for the name.

+
attribute : bool
+

Declares whether the property definition translates to an attribute instead of an element.
+
+Default value is false.

+
wrapped : bool
+

MAY be used only for an array definition.
+
+Signifies whether the array is wrapped (for example <books><book/><book/></books>)
+or unwrapped (<book/><book/>).
+
+Default value is false. The definition takes effect only when defined alongside type being array (outside the items).

+
+ +#### Reference +--- +- [OAI XML Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#xmlObject). + +## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/XmlContent.php) + +Shorthand for a xml response. + +Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/xml'` will be generated. + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable + diff --git a/vendor/zircote/swagger-php/docs/reference/attributes.md b/vendor/zircote/swagger-php/docs/reference/attributes.md new file mode 100644 index 0000000..55dfd66 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/reference/attributes.md @@ -0,0 +1,1664 @@ +# Attributes + +This page is generated automatically from the `swagger-php` sources. + +For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) + +In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. + + +## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Attributes/AdditionalProperties.php) + + + +#### Allowed in +--- +Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Attachable.php) + + + +#### Allowed in +--- +AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent + +#### Parameters +--- +
+
properties : array
+

No details available.

+
+ +## [Components](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Components.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable + +#### Parameters +--- +
+
schemas : Schema[]|null
+

No details available.

+
responses : Response[]|null
+

No details available.

+
parameters : Parameter[]|null
+

No details available.

+
requestBodies : RequestBody[]|null
+

No details available.

+
examples : Examples[]|null
+

No details available.

+
headers : Header[]|null
+

No details available.

+
securitySchemes : SecurityScheme[]|null
+

No details available.

+
links : Link[]|null
+

No details available.

+
callbacks : callable[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Contact.php) + + + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
url : string|null
+

No details available.

+
email : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Delete.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Discriminator.php) + + + +#### Allowed in +--- +Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
propertyName : string|null
+

No details available.

+
mapping : string[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Examples.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
example : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
description : string|null
+

No details available.

+
value : array|string|int|null
+

No details available.

+
externalValue : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ExternalDocumentation.php) + + + +#### Allowed in +--- +OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
description : string|null
+

No details available.

+
url : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Flow.php) + + + +#### Allowed in +--- +SecurityScheme + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
authorizationUrl : string|null
+

No details available.

+
tokenUrl : string|null
+

No details available.

+
refreshUrl : string|null
+

No details available.

+
flow : string|null
+

No details available.

+
scopes : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Get](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Get.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Head](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Head.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Header](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Header.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Schema, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
header : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Info](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Info.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Contact, License, Attachable + +#### Parameters +--- +
+
version : string|null
+

No details available.

+
description : string|null
+

No details available.

+
title : string|null
+

No details available.

+
termsOfService : string|null
+

No details available.

+
contact : OpenApi\Attributes\Contact|null
+

No details available.

+
license : OpenApi\Attributes\License|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Items](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Items.php) + + + +#### Allowed in +--- +Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/JsonContent.php) + + + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable + +#### Parameters +--- +
+
examples : array<string,Examples>
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [License](https://github.com/zircote/swagger-php/tree/master/src/Attributes/License.php) + + + +#### Allowed in +--- +Info + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
identifier : string|null
+

No details available.

+
url : string|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Link](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Link.php) + + + +#### Allowed in +--- +Components, Response + +#### Nested elements +--- +Server, Attachable + +#### Parameters +--- +
+
link : string|null
+

No details available.

+
operationRef : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
parameters : array<string,mixed>
+

No details available.

+
requestBody
+

No details available.

+
description : string|null
+

No details available.

+
server : OpenApi\Attributes\Server|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Attributes/MediaType.php) + + + +#### Allowed in +--- +Response, RequestBody + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
mediaType : string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
encoding : array<string,mixed>
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Attributes/OpenApi.php) + + + +#### Nested elements +--- +Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable + +#### Parameters +--- +
+
openapi : string
+

No details available.

+
info : OpenApi\Attributes\Info|null
+

No details available.

+
servers : Server[]|null
+

No details available.

+
security : array|null
+

No details available.

+
tags : Tag[]|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
paths : PathItem[]|null
+

No details available.

+
components : OpenApi\Attributes\Components|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Options](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Options.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Parameter.php) + + + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
parameter : string|null
+

No details available.

+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
in : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
style : string|null
+

No details available.

+
explode : bool|null
+

No details available.

+
allowReserved : bool|null
+

No details available.

+
spaceDelimited : array|null
+

No details available.

+
pipeDelimited : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Patch.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathItem.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
servers : Server[]|null
+

No details available.

+
parameters : Parameter[]|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathParameter.php) + + + +#### Allowed in +--- +Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace + +#### Nested elements +--- +Schema, Examples, Attachable + +#### Parameters +--- +
+
parameter : string|null
+

No details available.

+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
in : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allowEmptyValue : bool|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : OpenApi\Attributes\Schema|null
+

No details available.

+
example
+

No details available.

+
examples : array<string,Examples>
+

No details available.

+
style : string|null
+

No details available.

+
explode : bool|null
+

No details available.

+
allowReserved : bool|null
+

No details available.

+
spaceDelimited : array|null
+

No details available.

+
pipeDelimited : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Post](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Post.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Property](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Property.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
property : string|null
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Put](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Put.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Attributes/RequestBody.php) + + + +#### Allowed in +--- +Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put + +#### Nested elements +--- +MediaType, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
request : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : bool|null
+

No details available.

+
content : array<MediaType>|JsonContent|XmlContent|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Response](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Response.php) + + + +#### Allowed in +--- +Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace + +#### Nested elements +--- +MediaType, Header, Link, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
response : string|int|null
+

No details available.

+
description : string|null
+

No details available.

+
headers : Header[]
+

No details available.

+
content : MediaType|JsonContent|XmlContent|array<MediaType|XmlContent>
+

No details available.

+
links : Link[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Schema.php) + + + +#### Allowed in +--- +Components, Parameter, PathParameter, MediaType, Header + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
const : mixed
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Attributes/SecurityScheme.php) + + + +#### Allowed in +--- +Components + +#### Nested elements +--- +Flow, Attachable + +#### Parameters +--- +
+
ref : object|string|null
+

No details available.

+
securityScheme : string|null
+

No details available.

+
type : string|null
+

No details available.

+
description : string|null
+

No details available.

+
name : string|null
+

No details available.

+
in : string|null
+

No details available.

+
bearerFormat : string|null
+

No details available.

+
scheme : string|null
+

No details available.

+
openIdConnectUrl : string|null
+

No details available.

+
flows : Flow[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Server](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Server.php) + + + +#### Allowed in +--- +OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link + +#### Nested elements +--- +ServerVariable, Attachable + +#### Parameters +--- +
+
url : string|null
+

No details available.

+
description : string|null
+

No details available.

+
variables : ServerVariable[]
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ServerVariable.php) + + + +#### Allowed in +--- +Server + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
serverVariable : string|null
+

No details available.

+
description : string|null
+

No details available.

+
default : string|null
+

No details available.

+
enum : string[]|int[]|float[]|null
+

No details available.

+
variables : array|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Tag.php) + + + +#### Allowed in +--- +OpenApi + +#### Nested elements +--- +ExternalDocumentation, Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
description : string|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Trace.php) + + + +#### Allowed in +--- +PathItem + +#### Nested elements +--- +Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable + +#### Parameters +--- +
+
path : string|null
+

No details available.

+
operationId : string|null
+

No details available.

+
description : string|null
+

No details available.

+
summary : string|null
+

No details available.

+
security : array
+

No details available.

+
servers : Server[]
+

No details available.

+
requestBody : OpenApi\Attributes\RequestBody|null
+

No details available.

+
tags : string[]
+

No details available.

+
parameters : Parameter[]
+

No details available.

+
responses : Response[]
+

No details available.

+
callbacks : callable[]
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Xml.php) + + + +#### Allowed in +--- +AdditionalProperties, Schema, Property, Schema, Items, XmlContent + +#### Nested elements +--- +Attachable + +#### Parameters +--- +
+
name : string|null
+

No details available.

+
namespace : string|null
+

No details available.

+
prefix : string|null
+

No details available.

+
attribute : bool|null
+

No details available.

+
wrapped : bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ +## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/XmlContent.php) + + + +#### Nested elements +--- +Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable + +#### Parameters +--- +
+
examples : array<string,Examples>
+

No details available.

+
ref : object|string|null
+

No details available.

+
schema : string|null
+

No details available.

+
title : string|null
+

No details available.

+
description : string|null
+

No details available.

+
required : string[]
+

No details available.

+
properties : Property[]
+

No details available.

+
type : string|null
+

No details available.

+
format : string|null
+

No details available.

+
items : OpenApi\Attributes\Items|null
+

No details available.

+
collectionFormat : string|null
+

No details available.

+
default
+

No details available.

+
maximum : int|float
+

No details available.

+
exclusiveMaximum : bool|null
+

No details available.

+
minimum : int|float
+

No details available.

+
exclusiveMinimum : bool|null
+

No details available.

+
maxLength : int|null
+

No details available.

+
minLength : int|null
+

No details available.

+
maxItems : int|null
+

No details available.

+
minItems : int|null
+

No details available.

+
uniqueItems : bool|null
+

No details available.

+
pattern : string|null
+

No details available.

+
enum : string[]|int[]|float[]
+

No details available.

+
discriminator : OpenApi\Attributes\Discriminator|null
+

No details available.

+
readOnly : bool|null
+

No details available.

+
writeOnly : bool|null
+

No details available.

+
xml : OpenApi\Attributes\Xml|null
+

No details available.

+
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
+

No details available.

+
example
+

No details available.

+
nullable : bool|null
+

No details available.

+
deprecated : bool|null
+

No details available.

+
allOf : Schema[]
+

No details available.

+
anyOf : Schema[]
+

No details available.

+
oneOf : Schema[]
+

No details available.

+
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
+

No details available.

+
x : array<string,string>|null
+

No details available.

+
attachables : Attachable[]|null
+

No details available.

+
+ diff --git a/vendor/zircote/swagger-php/docs/reference/generator.md b/vendor/zircote/swagger-php/docs/reference/generator.md new file mode 100644 index 0000000..a8f9c99 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/reference/generator.md @@ -0,0 +1,161 @@ +# Using the `Generator` + +## Introduction +The `Generator` class provides an object-oriented way to use `swagger-php` and all its aspects in a single place. + +## The `\OpenApi\scan()` function + +For a long time the `\OpenApi\scan()` function was the main entry point into using swagger-php from PHP code. + +```php +/** + * Scan the filesystem for OpenAPI annotations and build openapi-documentation. + * + * @param array|Finder|string $directory The directory(s) or filename(s) + * @param array $options + * exclude: string|array $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) + * pattern: string $pattern File pattern(s) to scan (default: *.php) + * analyser: defaults to StaticAnalyser + * analysis: defaults to a new Analysis + * processors: defaults to the registered processors in Analysis + * + * @return OpenApi + */ + function scan($directory, $options = []) { /* ... */ } +``` + +Using it looked typically something like this: +```php +require("vendor/autoload.php"); + +$openapi = \OpenApi\scan(__DIR__, ['exclude' => ['tests'], 'pattern' => '*.php']); +``` + +The two configuration options for the underlying Doctrine doc-block parser `aliases` and `namespaces` +are not part of this function and need to be set separately. + +Being static this means setting them back is the callers responsibility and there is also the fact that +some Doctrine configuration currently can not be reverted easily. + +Therefore, having a single side effect free way of using swagger-php seemed like a good idea... + +## The `\OpenApi\Generator` class + +The `Generator` class can be used in object-oriented (and fluent) style which allows for easy customization +if needed. + +In that case to actually process the given input files the **non-static** method `generate()` is to be used. + +Full example of using the `Generator` class to generate OpenApi specs. + +```php +require("vendor/autoload.php"); + +$validate = true; +$logger = new \Psr\Log\NullLogger(); +$processors = [/* my processors */]; +$finder = \Symfony\Component\Finder\Finder::create()->files()->name('*.php')->in(__DIR__); + +$openapi = (new \OpenApi\Generator($logger)) + ->setProcessors($processors) + ->setAliases(['MY' => 'My\Annotations']) + ->setNamespaces(['My\\Annotations\\']) + ->setAnalyser(new \OpenApi\Analysers\TokenAnalyser()) + ->setVersion(\OpenApi\Annotations\OpenApi::VERSION_3_0_0) + ->generate(['/path1/to/project', $finder], new \OpenApi\Analysis(), $validate); +``` + +`Aliases` and `namespaces` are additional options that allow to customize the parsing of docblocks. + +Defaults: +* **aliases**: `['oa' => 'OpenApi\\Annotations']` + + Aliases help the underlying `doctrine annotations library` to parse annotations. Effectively they avoid having + to write `use OpenApi\Annotations as OA;` in your code and make `@OA\property(..)` annotations still work. + +* **namespaces**: `['OpenApi\\Annotations\\']` + + Namespaces control which annotation namespaces can be autoloaded automatically. Under the hood this + is handled by registering a custom loader with the `doctrine annotation library`. + +Advantages: +* The `Generator` code will handle configuring things as before in a single place +* Static settings will be reverted to the default once finished +* The get/set methods allow for using type hints +* Static configuration is deprecated and can be removed at some point without code changes +* Build in support for PSR logger +* Support for [Symfony Finder](https://symfony.com/doc/current/components/finder.html), `\SplInfo` and file/directory names (`string) as source. + +The minimum code required, using the `generate()` method, looks quite similar to the old `scan()` code: + +```php + /** + * Generate OpenAPI spec by scanning the given source files. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string - file / directory name + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param null|Analysis $analysis custom analysis instance + * @param bool $validate flag to enable/disable validation of the returned spec + */ + public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): \OpenApi\OpenApi { /* ... */ } +``` + +```php +require("vendor/autoload.php"); + +$openapi = (new \OpenApi\Generator())->generate(['/path1/to/project']); +``` + +For those that want to type even less and keep using a plain array to configure `swagger-php` there is also a static version: + +```php +toYaml(); +``` + +**Note:** While using the same name as the old `scan()` function, the `Generator::scan` method is not +100% backwards compatible. + +```php + /** + * Static wrapper around `Generator::generate()`. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param array $options + * aliases: null|array Defaults to `['oa' => 'OpenApi\\Annotations']`. + * namespaces: null|array Defaults to `['OpenApi\\Annotations\\']`. + * analyser: null|AnalyserInterface Defaults to a new `ReflectionAnalyser` supporting both docblocks and attributes. + * analysis: null|Analysis Defaults to a new `Analysis`. + * processors: null|array Defaults to `Analysis::processors()`. + * logger: null|\Psr\Log\LoggerInterface If not set logging will use \OpenApi\Logger as before. + * validate: bool Defaults to `true`. + */ + public static function scan(iterable $sources, array $options = []): OpenApi { /* ... */ } +``` + +Most notably the `exclude` and `pattern` keys are no longer supported. Instead, a Symfony `Finder` instance can be passed in +as source directly (same as with `Generator::generate()`). + +If needed, the `\OpenApi\Util` class provides a builder method that allows to keep the status-quo + +```php +$exclude = ['tests']; +$pattern = '*.php'; + +$openapi = \OpenApi\Generator::scan(\OpenApi\Util::finder(__DIR__, $exclude, $pattern)); + +// same as + +$openapi = \OpenApi\scan(__DIR__, ['exclude' => $exclude, 'pattern' => $pattern]); diff --git a/vendor/zircote/swagger-php/docs/reference/index.md b/vendor/zircote/swagger-php/docs/reference/index.md new file mode 100644 index 0000000..6ec960a --- /dev/null +++ b/vendor/zircote/swagger-php/docs/reference/index.md @@ -0,0 +1,23 @@ +# Reference + +In total there are a number of different aspects to using `swagger-php`. Depending on how custom your requirements are this might be limited to just annotating your code and using the command line tool. + +However, `swagger-php` offers more. + +* [Attributes](attributes.md) + + The new way of adding meta-data to your codebase. Requires PHP 8.1 + +* [Docblock annotations](annotations.md) + + The 'traditional' way of documenting your API. + +* The [`Generator`](generator.md) + + The `\OpenAPI\Generator` class is the main entry point to programmatically generate OpenAPI documents from your code. + +* [Processors](processors.md) + + `swagger-php` comes with a list of pre-defined processors that convert the raw data to a + complete OpenAPI document. + Custom processors can be added or existing removed to tweak swagger-php` to your requirements. diff --git a/vendor/zircote/swagger-php/docs/reference/processors.md b/vendor/zircote/swagger-php/docs/reference/processors.md new file mode 100644 index 0000000..5010a6a --- /dev/null +++ b/vendor/zircote/swagger-php/docs/reference/processors.md @@ -0,0 +1,6 @@ +# Processors + +## Adding/removing processors + +## Processors +### OperationId diff --git a/vendor/zircote/swagger-php/docs/related-projects.md b/vendor/zircote/swagger-php/docs/related-projects.md new file mode 100644 index 0000000..2f20ef7 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/related-projects.md @@ -0,0 +1,35 @@ +--- +sidebar: false +--- + +# Related projects + +| Project | Description | +| ----------------------------- | --------------------------------------------------------- | +| [Swagger UI][1] | The webinterface for reading the generated documentation | +| [Swagger Explained][2] | Browse the spec by using an swagger.json. | +| [silex2swagger][3] | Generate swagger documentation from Silex Annotations | +| [yii2-swagger][4] | swagger-php intergation with yii2 | +| [Lumen swagger][5] | swagger-php integration with lumen/laravel | +| [NelmioApiDocBundle][6] | Symfony bundle on top of swagger-php | +| [auto-swagger-ui][7] | Automatically add swagger ui and json to your application | +| [openapi-router][8] | Configure framework routes from OpenApi annotations | +| [openapi-verifier][9] | Verify response against OpenAPI specification in PHPUnit | +| [openapi-filter][10] | Filter internal paths, operations, parameters, etc | +| [OpenAPI-Symfony-Routing][11] | Load routes in Symfony based on OpenAPI annotations | +| [Swag It PHP][12] | Convert JSON to PHP Swagger annotations | + +Is a related project missing? Create a pull request! + +[1]: https://swagger.io/tools/swagger-ui/ +[2]: https://bfanger.nl/swagger-explained/ +[3]: https://github.com/DerManoMann/silex2swagger +[4]: https://github.com/lichunqiang/yii2-swagger +[5]: https://github.com/DarkaOnLine/SwaggerLumen +[6]: https://github.com/nelmio/NelmioApiDocBundle +[7]: https://github.com/kevupton/auto-swagger-ui +[8]: https://github.com/DerManoMann/openapi-router +[9]: https://github.com/DerManoMann/openapi-verifier +[10]: https://github.com/Mermade/openapi-filter +[11]: https://github.com/Tobion/OpenAPI-Symfony-Routing +[12]: https://kizu514.com/swagit.php diff --git a/vendor/zircote/swagger-php/docs/snippets/example_annotations.php b/vendor/zircote/swagger-php/docs/snippets/example_annotations.php new file mode 100644 index 0000000..2772d36 --- /dev/null +++ b/vendor/zircote/swagger-php/docs/snippets/example_annotations.php @@ -0,0 +1,21 @@ + top level annotations + */ + public function build(\Reflector $reflector, Context $context): array; +} diff --git a/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php b/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php new file mode 100644 index 0000000..0db5bdb --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php @@ -0,0 +1,132 @@ +generator = $generator; + } + + public function build(\Reflector $reflector, Context $context): array + { + if (\PHP_VERSION_ID < 80100 || !method_exists($reflector, 'getAttributes')) { + return []; + } + + if ($reflector instanceof \ReflectionProperty && method_exists($reflector, 'isPromoted') && $reflector->isPromoted()) { + // handled via __construct() parameter + return []; + } + + // no proper way to inject + Generator::$context = $context; + + /** @var AbstractAnnotation[] $annotations */ + $annotations = []; + try { + foreach ($reflector->getAttributes() as $attribute) { + try { + $instance = $attribute->newInstance(); + if ($instance instanceof AbstractAnnotation) { + $annotations[] = $instance; + } + } catch (\Error $e) { + $context->logger->debug('Could not instantiate attribute: ' . $e->getMessage(), ['exception' => $e]); + } + } + + if ($reflector instanceof \ReflectionMethod) { + // also look at parameter attributes + foreach ($reflector->getParameters() as $rp) { + foreach ([Property::class, Parameter::class, PathParameter::class] as $attributeName) { + foreach ($rp->getAttributes($attributeName) as $attribute) { + $instance = $attribute->newInstance(); + $type = (($rnt = $rp->getType()) && $rnt instanceof \ReflectionNamedType) ? $rnt->getName() : Generator::UNDEFINED; + $nullable = $rnt ? $rnt->allowsNull() : true; + + if ($instance instanceof Property) { + $instance->property = $rp->getName(); + if (Generator::isDefault($instance->type)) { + $instance->type = $type; + } + $instance->nullable = $nullable; + } else { + $instance->name = $rp->getName(); + $instance->required = !$nullable; + $context = new Context(['nested' => $this], $context); + $context->comment = null; + $instance->merge([new Schema(['type' => $type, '_context' => $context])]); + } + $annotations[] = $instance; + } + } + } + } + } finally { + Generator::$context = null; + } + + $annotations = array_values(array_filter($annotations, function ($a) { + return $a !== null && $a instanceof AbstractAnnotation; + })); + + // merge backwards into parents... + $isParent = function (AbstractAnnotation $annotation, AbstractAnnotation $possibleParent): bool { + // regular annotation hierarchy + $explicitParent = null !== $possibleParent::matchNested(get_class($annotation)); + + $isParentAllowed = false; + // support Attachable subclasses + if ($isAttachable = $annotation instanceof Attachable) { + if (!$isParentAllowed = (null === $annotation->allowedParents())) { + // check for allowed parents + foreach ($annotation->allowedParents() as $allowedParent) { + if ($possibleParent instanceof $allowedParent) { + $isParentAllowed = true; + break; + } + } + } + } + + // Property can be nested... + return get_class($annotation) != get_class($possibleParent) + && ($explicitParent || ($isAttachable && $isParentAllowed)); + }; + foreach ($annotations as $index => $annotation) { + for ($ii = 0; $ii < count($annotations); ++$ii) { + if ($ii === $index) { + continue; + } + $possibleParent = $annotations[$ii]; + if ($isParent($annotation, $possibleParent)) { + $possibleParent->merge([$annotation]); + } + } + } + + $annotations = array_filter($annotations, function ($a) { + return !$a instanceof Attachable; + }); + + return $annotations; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php b/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php new file mode 100644 index 0000000..d604f56 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php @@ -0,0 +1,49 @@ +getComposerAutoloader()) { + foreach (array_keys($autoloader->getClassMap()) as $unit) { + foreach ($namespaces as $namespace) { + if (0 === strpos($unit, $namespace)) { + $units[] = $unit; + break; + } + } + } + } + + return $units; + } + + public static function getComposerAutoloader(): ?ClassLoader + { + foreach (spl_autoload_functions() as $fkt) { + if (is_array($fkt) && $fkt[0] instanceof ClassLoader) { + return $fkt[0]; + } + } + + return null; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php b/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php new file mode 100644 index 0000000..21d1768 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php @@ -0,0 +1,58 @@ +docBlockParser = $docBlockParser ?: new DocBlockParser(); + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + $this->docBlockParser->setAliases($generator->getAliases()); + } + + public function build(\Reflector $reflector, Context $context): array + { + $aliases = $this->generator ? $this->generator->getAliases() : []; + + if (method_exists($reflector, 'getShortName') && method_exists($reflector, 'getName')) { + $aliases[strtolower($reflector->getShortName())] = $reflector->getName(); + } + + if ($context->with('scanned')) { + $details = $context->scanned; + foreach ($details['uses'] as $alias => $name) { + $aliasKey = strtolower($alias); + if ($name != $alias && !array_key_exists($aliasKey, $aliases)) { + // real aliases only + $aliases[strtolower($alias)] = $name; + } + } + } + $this->docBlockParser->setAliases($aliases); + + if (method_exists($reflector, 'getDocComment') && ($comment = $reflector->getDocComment())) { + return $this->docBlockParser->fromComment($comment, $context); + } + + return []; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php b/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php new file mode 100644 index 0000000..407dd39 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php @@ -0,0 +1,76 @@ +setIgnoreNotImportedAnnotations(true); + $docParser->setImports($aliases); + $this->docParser = $docParser; + } + + public function setAliases(array $aliases): void + { + $this->docParser->setImports($aliases); + } + + /** + * Use doctrine to parse the comment block and return the detected annotations. + * + * @param string $comment a T_DOC_COMMENT + * @param Context $context + * + * @return array Annotations + */ + public function fromComment(string $comment, Context $context): array + { + $context->comment = $comment; + + try { + Generator::$context = $context; + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + return $this->docParser->parse($comment, $context->getDebugLocation()); + } catch (\Exception $e) { + if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote((string) $context, '/') . '\.$/', $e->getMessage(), $matches)) { + $errorMessage = $matches[1]; + $errorPos = (int) $matches[2]; + $atPos = strpos($comment, '@'); + $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos); + $lines = explode("\n", substr($comment, $atPos, $errorPos)); + $context->character = strlen(array_pop($lines)) + 1; // position starts at 0 character starts at 1 + $context->logger->error($errorMessage . ' in ' . $context, ['exception' => $e]); + } else { + $context->logger->error( + $e->getMessage() . ($context->filename ? ('; file=' . $context->filename) : ''), + ['exception' => $e] + ); + } + + return []; + } finally { + Generator::$context = null; + } + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php b/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php new file mode 100644 index 0000000..a8f3a58 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php @@ -0,0 +1,186 @@ +annotationFactories = $annotationFactories; + if (!$this->annotationFactories) { + throw new \InvalidArgumentException('Need at least one annotation factory'); + } + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + foreach ($this->annotationFactories as $annotationFactory) { + $annotationFactory->setGenerator($generator); + } + } + + public function fromFile(string $filename, Context $context): Analysis + { + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $analysis = new Analysis([], $context); + foreach ($fileDetails as $fqdn => $details) { + $this->analyzeFqdn($fqdn, $analysis, $details); + } + + return $analysis; + } + + public function fromFqdn(string $fqdn, Analysis $analysis): Analysis + { + $fqdn = ltrim($fqdn, '\\'); + + $rc = new \ReflectionClass($fqdn); + if (!$filename = $rc->getFileName()) { + return $analysis; + } + + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $this->analyzeFqdn($fqdn, $analysis, $fileDetails[$fqdn]); + + return $analysis; + } + + protected function analyzeFqdn(string $fqdn, Analysis $analysis, array $details): Analysis + { + if (!class_exists($fqdn) && !interface_exists($fqdn) && !trait_exists($fqdn) && (!function_exists('enum_exists') || !enum_exists($fqdn))) { + $analysis->context->logger->warning('Skipping unknown ' . $fqdn); + + return $analysis; + } + + $rc = new \ReflectionClass($fqdn); + $contextType = $rc->isInterface() ? 'interface' : ($rc->isTrait() ? 'trait' : ((method_exists($rc, 'isEnum') && $rc->isEnum()) ? 'enum' : 'class')); + $context = new Context([ + $contextType => $rc->getShortName(), + 'namespace' => $rc->getNamespaceName() ?: null, + 'comment' => $rc->getDocComment() ?: null, + 'filename' => $rc->getFileName() ?: null, + 'line' => $rc->getStartLine(), + 'annotations' => [], + 'scanned' => $details, + ], $analysis->context); + + $definition = [ + $contextType => $rc->getShortName(), + 'extends' => null, + 'implements' => [], + 'traits' => [], + 'properties' => [], + 'methods' => [], + 'context' => $context, + ]; + $normaliseClass = function (string $name): string { + return '\\' . $name; + }; + if ($parentClass = $rc->getParentClass()) { + $definition['extends'] = $normaliseClass($parentClass->getName()); + } + $definition[$contextType == 'class' ? 'implements' : 'extends'] = array_map($normaliseClass, $details['interfaces']); + $definition['traits'] = array_map($normaliseClass, $details['traits']); + + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($rc, $context), $context); + } + + foreach ($rc->getMethods() as $method) { + if (in_array($method->name, $details['methods'])) { + $definition['methods'][$method->getName()] = $ctx = new Context([ + 'method' => $method->getName(), + 'comment' => $method->getDocComment() ?: null, + 'filename' => $method->getFileName() ?: null, + 'line' => $method->getStartLine(), + 'annotations' => [], + ], $context); + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($method, $ctx), $ctx); + } + } + } + + foreach ($rc->getProperties() as $property) { + if (in_array($property->name, $details['properties'])) { + $definition['properties'][$property->getName()] = $ctx = new Context([ + 'property' => $property->getName(), + 'comment' => $property->getDocComment() ?: null, + 'annotations' => [], + ], $context); + if ($property->isStatic()) { + $ctx->static = true; + } + if (\PHP_VERSION_ID >= 70400 && ($type = $property->getType())) { + $ctx->nullable = $type->allowsNull(); + if ($type instanceof \ReflectionNamedType) { + $ctx->type = $type->getName(); + // Context::fullyQualifiedName(...) expects this + if (class_exists($absFqn = '\\' . $ctx->type)) { + $ctx->type = $absFqn; + } + } + } + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($property, $ctx), $ctx); + } + } + } + + foreach ($rc->getReflectionConstants() as $constant) { + foreach ($this->annotationFactories as $annotationFactory) { + $definition['constants'][$constant->getName()] = $ctx = new Context([ + 'constant' => $constant->getName(), + 'comment' => $constant->getDocComment() ?: null, + 'annotations' => [], + ], $context); + foreach ($annotationFactory->build($constant, $ctx) as $annotation) { + if ($annotation instanceof Property) { + if (Generator::isDefault($annotation->property)) { + $annotation->property = $constant->getName(); + } + if (Generator::isDefault($annotation->const)) { + $annotation->const = $constant->getValue(); + } + $analysis->addAnnotation($annotation, $ctx); + } + } + } + } + + $addDefinition = 'add' . ucfirst($contextType) . 'Definition'; + $analysis->{$addDefinition}($definition); + + return $analysis; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php b/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php new file mode 100644 index 0000000..2a3916d --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php @@ -0,0 +1,639 @@ +generator = $generator; + } + + /** + * Extract and process all doc-comments from a file. + * + * @param string $filename path to a php file + */ + public function fromFile(string $filename, Context $context): Analysis + { + if (function_exists('opcache_get_status') && function_exists('opcache_get_configuration')) { + if (empty($GLOBALS['openapi_opcache_warning'])) { + $GLOBALS['openapi_opcache_warning'] = true; + $status = opcache_get_status(); + $config = opcache_get_configuration(); + if (is_array($status) && $status['opcache_enabled'] && $config['directives']['opcache.save_comments'] == false) { + $context->logger->error("php.ini \"opcache.save_comments = 0\" interferes with extracting annotations.\n[LINK] https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments"); + } + } + } + $tokens = token_get_all(file_get_contents($filename)); + + return $this->fromTokens($tokens, new Context(['filename' => $filename], $context)); + } + + /** + * Extract and process all doc-comments from the contents. + * + * @param string $code PHP code. (including fromTokens($tokens, $context); + } + + /** + * Shared implementation for parseFile() & parseContents(). + * + * @param array $tokens The result of a token_get_all() + */ + protected function fromTokens(array $tokens, Context $parseContext): Analysis + { + $generator = $this->generator ?: new Generator(); + $analysis = new Analysis([], $parseContext); + $docBlockParser = new DocBlockParser($generator->getAliases()); + + reset($tokens); + $token = ''; + + $aliases = $generator->getAliases(); + + $parseContext->uses = []; + // default to parse context to start with + $schemaContext = $parseContext; + + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + $comment = false; + + $line = 0; + $lineOffset = $parseContext->line ?: 0; + + while ($token !== false) { + $previousToken = $token; + $token = $this->nextToken($tokens, $parseContext); + + if (is_array($token) === false) { + // Ignore tokens like "{", "}", etc + continue; + } + + if (defined('T_ATTRIBUTE') && $token[0] === T_ATTRIBUTE) { + // consume + $this->parseAttribute($tokens, $token, $parseContext); + continue; + } + + if ($token[0] === T_DOC_COMMENT) { + if ($comment) { + // 2 Doc-comments in succession? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + $comment = $token[1]; + $line = $token[2] + $lineOffset; + continue; + } + + if (in_array($token[0], [T_ABSTRACT, T_FINAL])) { + // skip + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token[0] === T_CLASS) { + // Doc-comment before a class? + if (is_array($previousToken) && $previousToken[0] === T_DOUBLE_COLON) { + //php 5.5 class name resolution (i.e. ClassName::class) + continue; + } + + $token = $this->nextToken($tokens, $parseContext); + + if (is_string($token) && ($token === '(' || $token === '{')) { + // php7 anonymous classes (i.e. new class() { public function foo() {} };) + continue; + } + + if (is_array($token) && ($token[1] === 'extends' || $token[1] === 'implements')) { + // php7 anonymous classes with extends (i.e. new class() extends { public function foo() {} };) + continue; + } + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $schemaContext = new Context(['class' => $token[1], 'line' => $token[2]], $parseContext); + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + $classDefinition = [ + 'class' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespace($tokens, $token, $parseContext); + $classDefinition['extends'] = $schemaContext->fullyQualifiedName($schemaContext->extends); + } + + if ($token[0] === T_IMPLEMENTS) { + $schemaContext->implements = $this->parseNamespaceList($tokens, $token, $parseContext); + $classDefinition['implements'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->implements); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-class and reset $schemaContext + } + + if ($token[0] === T_INTERFACE) { // Doc-comment before an interface? + $classDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['interface' => $token[1], 'line' => $token[2]], $parseContext); + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + $interfaceDefinition = [ + 'interface' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespaceList($tokens, $token, $parseContext); + $interfaceDefinition['extends'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->extends); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-interface and reset $schemaContext + } + + if ($token[0] === T_TRAIT) { + $classDefinition = false; + $interfaceDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['trait' => $token[1], 'line' => $token[2]], $parseContext); + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + $traitDefinition = [ + 'trait' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if (defined('T_ENUM') && $token[0] === T_ENUM) { + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['enum' => $token[1], 'line' => $token[2]], $parseContext); + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + $enumDefinition = [ + 'enum' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // static property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'static' => true, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + continue; + } + } + + if (in_array($token[0], [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR])) { // Scope + [$type, $nullable, $token] = $this->parseTypeAndNextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // instance property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'type' => $type, + 'nullable' => $nullable, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + continue; + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + + if (in_array($token[0], [T_NAMESPACE, T_USE]) === false) { + // Skip "use" & "namespace" to prevent "never imported" warnings) + if ($comment) { + // Not a doc-comment for a class, property or method? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + $comment = false; + } + } + + if ($token[0] === T_NAMESPACE) { + $parseContext->namespace = $this->parseNamespace($tokens, $token, $parseContext); + $aliases['__NAMESPACE__'] = $parseContext->namespace; + $docBlockParser->setAliases($aliases); + continue; + } + + if ($token[0] === T_USE) { + $statements = $this->parseUseStatement($tokens, $token, $parseContext); + foreach ($statements as $alias => $target) { + if ($classDefinition) { + // class traits + $classDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } elseif ($traitDefinition) { + // trait traits + $traitDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } else { + // not a trait use + $parseContext->uses[$alias] = $target; + + $namespaces = $generator->getNamespaces(); + if (null === $namespaces) { + $aliases[strtolower($alias)] = $target; + } else { + foreach ($namespaces as $namespace) { + if (strcasecmp(substr($target . '\\', 0, strlen($namespace)), $namespace) === 0) { + $aliases[strtolower($alias)] = $target; + break; + } + } + } + $docBlockParser->setAliases($aliases); + } + } + } + } + + // cleanup final comment and definition + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + + return $analysis; + } + + /** + * Parse comment and add annotations to analysis. + */ + private function analyseComment(Analysis $analysis, DocBlockParser $docBlockParser, string $comment, Context $context): void + { + $analysis->addAnnotations($docBlockParser->fromComment($comment, $context), $context); + } + + /** + * The next non-whitespace, non-comment token. + * + * + * @return array|string The next token (or false) + */ + private function nextToken(array &$tokens, Context $context) + { + while (true) { + $token = next($tokens); + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + continue; + } + if ($token[0] === T_COMMENT) { + $pos = strpos($token[1], '@OA\\'); + if ($pos) { + $line = $context->line ? $context->line + $token[2] : $token[2]; + $commentContext = new Context(['line' => $line], $context); + $context->logger->warning('Annotations are only parsed inside `/**` DocBlocks, skipping ' . $commentContext); + } + continue; + } + } + + return $token; + } + } + + private function parseAttribute(array &$tokens, &$token, Context $parseContext): void + { + $nesting = 1; + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!is_array($token) && '[' === $token) { + ++$nesting; + continue; + } + + if (!is_array($token) && ']' === $token) { + --$nesting; + if (!$nesting) { + break; + } + } + } + } + + /** + * @return int[] + */ + private function php8NamespaceToken(): array + { + return defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + } + + /** + * Parse namespaced string. + * + * @param array|string $token + */ + private function parseNamespace(array &$tokens, &$token, Context $parseContext): string + { + $namespace = ''; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!in_array($token[0], $nsToken)) { + break; + } + $namespace .= $token[1]; + } + + return $namespace; + } + + /** + * Parse comma separated list of namespaced strings. + * + * @param array|string $token + */ + private function parseNamespaceList(array &$tokens, &$token, Context $parseContext): array + { + $namespaces = []; + while ($namespace = $this->parseNamespace($tokens, $token, $parseContext)) { + $namespaces[] = $namespace; + if ($token != ',') { + break; + } + } + + return $namespaces; + } + + /** + * Parse a use statement. + */ + private function parseUseStatement(array &$tokens, &$token, Context $parseContext): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } else { + break; + } + } + + return $statements; + } + + /** + * Parse type of variable (if it exists). + */ + private function parseTypeAndNextToken(array &$tokens, Context $parseContext): array + { + $type = Generator::UNDEFINED; + $nullable = false; + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token === '?') { // nullable type + $nullable = true; + $token = $this->nextToken($tokens, $parseContext); + } + + $qualifiedToken = array_merge([T_NS_SEPARATOR, T_STRING, T_ARRAY], $this->php8NamespaceToken()); + $typeToken = array_merge([T_STRING], $this->php8NamespaceToken()); + // drill down namespace segments to basename property type declaration + while (in_array($token[0], $qualifiedToken)) { + if (in_array($token[0], $typeToken)) { + $type = $token[1]; + } + $token = $this->nextToken($tokens, $parseContext); + } + + return [$type, $nullable, $token]; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php b/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php new file mode 100644 index 0000000..8d916e2 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php @@ -0,0 +1,356 @@ +scanTokens(token_get_all(file_get_contents($filename))); + } + + /** + * Scan file for all classes, interfaces and traits. + * + * @return array> File details + */ + protected function scanTokens(array $tokens): array + { + $units = []; + $uses = []; + $isInterface = false; + $namespace = ''; + $currentName = null; + $unitLevel = 0; + $lastToken = null; + $stack = []; + + $initUnit = function ($uses): array { + return [ + 'uses' => $uses, + 'interfaces' => [], + 'traits' => [], + 'enums' => [], + 'methods' => [], + 'properties' => [], + ]; + }; + + while (false !== ($token = $this->nextToken($tokens))) { + if (!is_array($token)) { + switch ($token) { + case '{': + $stack[] = $token; + break; + case '}': + array_pop($stack); + if (count($stack) == $unitLevel) { + $currentName = null; + } + break; + } + continue; + } + + switch ($token[0]) { + case T_CURLY_OPEN: + case T_DOLLAR_OPEN_CURLY_BRACES: + $stack[] = $token[1]; + break; + + case T_NAMESPACE: + $namespace = $this->nextWord($tokens); + break; + + case T_USE: + if (!$stack) { + $uses = array_merge($uses, $this->parseFQNStatement($tokens, $token)); + } elseif ($currentName) { + $traits = $this->resolveFQN($this->parseFQNStatement($tokens, $token), $namespace, $uses); + $units[$currentName]['traits'] = array_merge($units[$currentName]['traits'], $traits); + } + break; + + case T_CLASS: + if ($currentName) { + break; + } + + if ($lastToken && is_array($lastToken) && $lastToken[0] === T_DOUBLE_COLON) { + // ::class + break; + } + + // class name + $token = $this->nextToken($tokens); + + // unless ... + if (is_string($token) && ($token === '(' || $token === '{')) { + // new class[()] { ... } + if ('{' == $token) { + prev($tokens); + } + break; + } elseif (is_array($token) && in_array($token[1], ['extends', 'implements'])) { + // new class[()] extends { ... } + break; + } + + $isInterface = false; + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_INTERFACE: + if ($currentName) { + break; + } + + $isInterface = true; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_EXTENDS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($isInterface && $currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + if (!is_array($token) || T_IMPLEMENTS !== $token[0]) { + break; + } + // no break + case T_IMPLEMENTS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + break; + + case T_FUNCTION: + $token = $this->nextToken($tokens); + + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['methods'][] = $token[1]; + if (!$isInterface) { + // more nesting + $units[$currentName]['properties'] = array_merge( + $units[$currentName]['properties'], + $this->parsePromotedProperties($tokens) + ); + $this->skipTo($tokens, '{', true); + } else { + // no function body + $this->skipTo($tokens, ';'); + } + } + break; + + case T_VARIABLE: + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['properties'][] = substr($token[1], 1); + } + break; + default: + // handle trait here too to avoid duplication + if (T_TRAIT === $token[0] || (defined('T_ENUM') && T_ENUM === $token[0])) { + if ($currentName) { + break; + } + + $isInterface = false; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $this->skipTo($tokens, '{', true); + $units[$currentName] = $initUnit($uses); + } + break; + + } + $lastToken = $token; + } + + return $units; + } + + /** + * Get the next token that is not whitespace or comment. + */ + protected function nextToken(array &$tokens) + { + $token = true; + while ($token) { + $token = next($tokens); + if (is_array($token)) { + if (in_array($token[0], [T_WHITESPACE, T_COMMENT])) { + continue; + } + } + + return $token; + } + + return $token; + } + + protected function resolveFQN(array $names, string $namespace, array $uses): array + { + $resolve = function ($name) use ($namespace, $uses) { + if ('\\' == $name[0]) { + return substr($name, 1); + } + + if (array_key_exists($name, $uses)) { + return $uses[$name]; + } + + return $namespace . '\\' . $name; + }; + + return array_values(array_map($resolve, $names)); + } + + protected function skipTo(array &$tokens, string $char, bool $prev = false): void + { + while (false !== ($token = next($tokens))) { + if (is_string($token) && $token == $char) { + if ($prev) { + prev($tokens); + } + + break; + } + } + } + + /** + * Read next word. + * + * Skips leading whitespace. + */ + protected function nextWord(array &$tokens): string + { + $word = ''; + while (false !== ($token = next($tokens))) { + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + if ($word) { + break; + } + continue; + } + $word .= $token[1]; + } + } + + return $word; + } + + /** + * Parse a use statement. + */ + protected function parseFQNStatement(array &$tokens, array &$token): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $php8NSToken = defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $php8NSToken); + while ($token !== false) { + $token = $this->nextToken($tokens); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token[0] === T_IMPLEMENTS) { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === '{') { + $statements[$normalizeAlias($alias)] = $class; + prev($tokens); + break; + } else { + break; + } + } + + return $statements; + } + + protected function parsePromotedProperties(array &$tokens): array + { + $properties = []; + + $this->skipTo($tokens, '('); + $round = 1; + $promoted = false; + while (false !== ($token = $this->nextToken($tokens))) { + if (is_string($token)) { + switch ($token) { + case '(': + ++$round; + break; + case ')': + --$round; + if (0 == $round) { + return $properties; + } + } + } + if (is_array($token)) { + switch ($token[0]) { + case T_PUBLIC: + case T_PROTECTED: + case T_PRIVATE: + $promoted = true; + break; + case T_VARIABLE: + if ($promoted) { + $properties[] = ltrim($token[1], '$'); + $promoted = false; + } + break; + } + } + } + + return $properties; + } +} diff --git a/vendor/zircote/swagger-php/src/Analysis.php b/vendor/zircote/swagger-php/src/Analysis.php new file mode 100644 index 0000000..eec1071 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Analysis.php @@ -0,0 +1,440 @@ +annotations = new \SplObjectStorage(); + $this->context = $context; + + $this->addAnnotations($annotations, $context); + } + + public function addAnnotation(object $annotation, Context $context): void + { + if ($this->annotations->contains($annotation)) { + return; + } + + if ($annotation instanceof OpenApi) { + $this->openapi = $this->openapi ?: $annotation; + } else { + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + if (in_array($annotation, $context->annotations, true) === false) { + $context->annotations[] = $annotation; + } + } + $this->annotations->attach($annotation, $context); + $blacklist = property_exists($annotation, '_blacklist') ? $annotation::$_blacklist : []; + foreach ($annotation as $property => $value) { + if (in_array($property, $blacklist)) { + if ($property === '_unmerged') { + foreach ($value as $item) { + $this->addAnnotation($item, $context); + } + } + continue; + } elseif (is_array($value)) { + foreach ($value as $item) { + if ($item instanceof AbstractAnnotation) { + $this->addAnnotation($item, $context); + } + } + } elseif ($value instanceof AbstractAnnotation) { + $this->addAnnotation($value, $context); + } + } + } + + public function addAnnotations(array $annotations, Context $context): void + { + foreach ($annotations as $annotation) { + $this->addAnnotation($annotation, $context); + } + } + + public function addClassDefinition(array $definition): void + { + $class = $definition['context']->fullyQualifiedName($definition['class']); + $this->classes[$class] = $definition; + } + + public function addInterfaceDefinition(array $definition): void + { + $interface = $definition['context']->fullyQualifiedName($definition['interface']); + $this->interfaces[$interface] = $definition; + } + + public function addTraitDefinition(array $definition): void + { + $trait = $definition['context']->fullyQualifiedName($definition['trait']); + $this->traits[$trait] = $definition; + } + + public function addEnumDefinition(array $definition): void + { + $enum = $definition['context']->fullyQualifiedName($definition['enum']); + $this->enums[$enum] = $definition; + } + + public function addAnalysis(Analysis $analysis): void + { + foreach ($analysis->annotations as $annotation) { + $this->addAnnotation($annotation, $analysis->annotations[$annotation]); + } + $this->classes = array_merge($this->classes, $analysis->classes); + $this->interfaces = array_merge($this->interfaces, $analysis->interfaces); + $this->traits = array_merge($this->traits, $analysis->traits); + $this->enums = array_merge($this->enums, $analysis->enums); + if ($this->openapi === null && $analysis->openapi !== null) { + $this->openapi = $analysis->openapi; + } + } + + /** + * Get all subclasses of the given parent class. + * + * @param string $parent the parent class + * + * @return array map of class => definition pairs of sub-classes + */ + public function getSubClasses(string $parent): array + { + $definitions = []; + foreach ($this->classes as $class => $classDefinition) { + if ($classDefinition['extends'] === $parent) { + $definitions[$class] = $classDefinition; + $definitions = array_merge($definitions, $this->getSubClasses($class)); + } + } + + return $definitions; + } + + /** + * Get a list of all super classes for the given class. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class parents + * + * @return array map of class => definition pairs of parent classes + */ + public function getSuperClasses(string $class, bool $direct = false): array + { + $classDefinition = isset($this->classes[$class]) ? $this->classes[$class] : null; + if (!$classDefinition || empty($classDefinition['extends'])) { + // unknown class, or no inheritance + return []; + } + + $extends = $classDefinition['extends']; + $extendsDefinition = isset($this->classes[$extends]) ? $this->classes[$extends] : null; + if (!$extendsDefinition) { + return []; + } + + $parentDetails = [$extends => $extendsDefinition]; + + if ($direct) { + return $parentDetails; + } + + return array_merge($parentDetails, $this->getSuperClasses($extends)); + } + + /** + * Get the list of interfaces used by the given class or by classes which it extends. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class interfaces + * + * @return array map of class => definition pairs of interfaces + */ + public function getInterfacesOfClass(string $class, bool $direct = false): array + { + $classes = $direct ? [] : array_keys($this->getSuperClasses($class)); + // add self + $classes[] = $class; + + $definitions = []; + foreach ($classes as $clazz) { + if (isset($this->classes[$clazz])) { + $definition = $this->classes[$clazz]; + if (isset($definition['implements'])) { + foreach ($definition['implements'] as $interface) { + if (array_key_exists($interface, $this->interfaces)) { + $definitions[$interface] = $this->interfaces[$interface]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for interfaces extending other interfaces + $collect = function ($interfaces, $cb) use (&$definitions): void { + foreach ($interfaces as $interface) { + if (isset($this->interfaces[$interface]['extends'])) { + $cb($this->interfaces[$interface]['extends'], $cb); + foreach ($this->interfaces[$interface]['extends'] as $fqdn) { + $definitions[$fqdn] = $this->interfaces[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * Get the list of traits used by the given class/trait or by classes which it extends. + * + * @param string $source the source name + * @param bool $direct flag to find only the actual class traits + * + * @return array map of class => definition pairs of traits + */ + public function getTraitsOfClass(string $source, bool $direct = false): array + { + $sources = $direct ? [] : array_keys($this->getSuperClasses($source)); + // add self + $sources[] = $source; + + $definitions = []; + foreach ($sources as $sourze) { + if (isset($this->classes[$sourze]) || isset($this->traits[$sourze])) { + $definition = isset($this->classes[$sourze]) ? $this->classes[$sourze] : $this->traits[$sourze]; + if (isset($definition['traits'])) { + foreach ($definition['traits'] as $trait) { + if (array_key_exists($trait, $this->traits)) { + $definitions[$trait] = $this->traits[$trait]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for traits using other traits + $collect = function ($traits, $cb) use (&$definitions): void { + foreach ($traits as $trait) { + if (isset($this->traits[$trait]['traits'])) { + $cb($this->traits[$trait]['traits'], $cb); + foreach ($this->traits[$trait]['traits'] as $fqdn) { + $definitions[$fqdn] = $this->traits[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * @param string|array $classes One ore more class names + * @param bool $strict in non-strict mode child classes are also detected + * + * @return AbstractAnnotation[] + */ + public function getAnnotationsOfType($classes, bool $strict = false): array + { + $annotations = []; + if ($strict) { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if (get_class($annotation) === $class) { + $annotations[] = $annotation; + } + } + } + } else { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if ($annotation instanceof $class) { + $annotations[] = $annotation; + } + } + } + } + + return $annotations; + } + + /** + * @param string $fqdn the source class/interface/trait + */ + public function getSchemaForSource(string $fqdn): ?AnnotationSchema + { + $fqdn = '\\' . ltrim($fqdn, '\\'); + + foreach ([$this->classes, $this->interfaces, $this->traits, $this->enums] as $definitions) { + if (array_key_exists($fqdn, $definitions)) { + $definition = $definitions[$fqdn]; + if (is_iterable($definition['context']->annotations)) { + foreach (array_reverse($definition['context']->annotations) as $annotation) { + if (in_array(get_class($annotation), [AnnotationSchema::class, AttributeSchema::class]) && !$annotation->_aux) { + return $annotation; + } + } + } + } + } + + return null; + } + + public function getContext(object $annotation): ?Context + { + if ($annotation instanceof AbstractAnnotation) { + return $annotation->_context; + } + if ($this->annotations->contains($annotation) === false) { + throw new \Exception('Annotation not found'); + } + $context = $this->annotations[$annotation]; + if ($context instanceof Context) { + return $context; + } + // Weird, did you use the addAnnotation/addAnnotations methods? + throw new \Exception('Annotation has no context'); + } + + /** + * Build an analysis with only the annotations that are merged into the OpenAPI annotation. + */ + public function merged(): Analysis + { + if ($this->openapi === null) { + throw new \Exception('No openapi target set. Run the MergeIntoOpenApi processor'); + } + $unmerged = $this->openapi->_unmerged; + $this->openapi->_unmerged = []; + $analysis = new Analysis([$this->openapi], $this->context); + $this->openapi->_unmerged = $unmerged; + + return $analysis; + } + + /** + * Analysis with only the annotations that not merged. + */ + public function unmerged(): Analysis + { + return $this->split()->unmerged; + } + + /** + * Split the annotation into two analysis. + * One with annotations that are merged and one with annotations that are not merged. + * + * @return object {merged: Analysis, unmerged: Analysis} + */ + public function split() + { + $result = new \stdClass(); + $result->merged = $this->merged(); + $result->unmerged = new Analysis([], $this->context); + foreach ($this->annotations as $annotation) { + if ($result->merged->annotations->contains($annotation) === false) { + $result->unmerged->annotations->attach($annotation, $this->annotations[$annotation]); + } + } + + return $result; + } + + /** + * Apply the processor(s). + * + * @param callable|callable[] $processors One or more processors + */ + public function process($processors = null): void + { + if (is_array($processors) === false && is_callable($processors)) { + $processors = [$processors]; + } + foreach ($processors as $processor) { + $processor($this); + } + } + + public function validate(): bool + { + if ($this->openapi !== null) { + return $this->openapi->validate(); + } + + $this->context->logger->warning('No openapi target set. Run the MergeIntoOpenApi processor before validate()'); + + return false; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php b/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php new file mode 100644 index 0000000..b4469be --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php @@ -0,0 +1,714 @@ + + */ + public $x = Generator::UNDEFINED; + + /** + * Arbitrary attachables for this annotation. + * These will be ignored but can be used for custom processing. + * + * @var array + */ + public $attachables = Generator::UNDEFINED; + + /** + * @var bool + */ + public $_aux = false; + + /** + * @var Context|null + */ + public $_context = null; + + /** + * Annotations that couldn't be merged by mapping or postprocessing. + * + * @var array + */ + public $_unmerged = []; + + /** + * The properties which are required by [the spec](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). + * + * @var array + */ + public static $_required = []; + + /** + * Specify the type of the property. + * + * Examples: + * 'name' => 'string' // a string + * 'required' => 'boolean', // true or false + * 'tags' => '[string]', // array containing strings + * 'in' => ["query", "header", "path", "formData", "body"] // must be one on these + * 'oneOf' => [Schema::class] // array of schema objects. + * + * @var array> + */ + public static $_types = []; + + /** + * Declarative mapping of Annotation types to properties. + * Examples: + * Info::clas => 'info', // Set @OA\Info annotation as the info property. + * Parameter::clas => ['parameters'], // Append @OA\Parameter annotations the parameters array. + * PathItem::clas => ['paths', 'path'], // Append @OA\PathItem annotations the paths array and use path as key. + * + * @var array,string|array> + */ + public static $_nested = []; + + /** + * Reverse mapping of $_nested with the allowed parent annotations. + * + * @var array> + */ + public static $_parents = []; + + /** + * List of properties are blacklisted from the JSON output. + * + * @var array + */ + public static $_blacklist = ['_context', '_unmerged', '_analysis', '_aux', 'attachables']; + + public function __construct(array $properties) + { + if (isset($properties['_context'])) { + $this->_context = $properties['_context']; + unset($properties['_context']); + } elseif (Generator::$context) { + $this->_context = Generator::$context; + } else { + $this->_context = Context::detect(1); + } + + if ($this->_context->is('annotations') === false) { + $this->_context->annotations = []; + } + + $this->_context->annotations[] = $this; + $nestedContext = new Context(['nested' => $this], $this->_context); + foreach ($properties as $property => $value) { + if (property_exists($this, $property)) { + $this->$property = $value; + if (is_array($value)) { + foreach ($value as $key => $annotation) { + if (is_object($annotation) && $annotation instanceof AbstractAnnotation) { + $this->$property[$key] = $this->nested($annotation, $nestedContext); + } + } + } + } elseif ($property !== 'value') { + $this->$property = $value; + } elseif (is_array($value)) { + $annotations = []; + foreach ($value as $annotation) { + if ($annotation instanceof AbstractAnnotation) { + $annotations[] = $annotation; + } else { + $this->_context->logger->warning('Unexpected field in ' . $this->identity() . ' in ' . $this->_context); + } + } + $this->merge($annotations); + } elseif (is_object($value)) { + $this->merge([$value]); + } else { + if ($value !== Generator::UNDEFINED) { + $this->_context->logger->warning('Unexpected parameter "' . $property . '" in ' . $this->identity()); + } + } + } + + if ($this instanceof OpenApi) { + if ($this->_context->root()->version) { + // override via `Generator::setVersion()` + $this->openapi = $this->_context->root()->version; + } else { + $this->_context->root()->version = $this->openapi; + } + } + } + + public function __get($property) + { + $properties = get_object_vars($this); + $this->_context->logger->warning('Property "' . $property . '" doesn\'t exist in a ' . $this->identity() . ', existing properties: "' . implode('", "', array_keys($properties)) . '" in ' . $this->_context); + } + + public function __set($property, $value) + { + $fields = get_object_vars($this); + foreach (static::$_blacklist as $_property) { + unset($fields[$_property]); + } + $this->_context->logger->warning('Unexpected field "' . $property . '" for ' . $this->identity() . ', expecting "' . implode('", "', array_keys($fields)) . '" in ' . $this->_context); + $this->$property = $value; + } + + /** + * Merge given annotations to their mapped properties configured in static::$_nested. + * + * Annotations that couldn't be merged are added to the _unmerged array. + * + * @param AbstractAnnotation[] $annotations + * @param bool $ignore Ignore unmerged annotations + * + * @return AbstractAnnotation[] The unmerged annotations + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = []; + $nestedContext = new Context(['nested' => $this], $this->_context); + + foreach ($annotations as $annotation) { + $mapped = false; + if ($details = static::matchNested(get_class($annotation))) { + $property = $details->value; + if (is_array($property)) { + $property = $property[0]; + if (Generator::isDefault($this->$property)) { + $this->$property = []; + } + $this->$property[] = $this->nested($annotation, $nestedContext); + $mapped = true; + } elseif (Generator::isDefault($this->$property)) { + // ignore duplicate nested if only one expected + $this->$property = $this->nested($annotation, $nestedContext); + $mapped = true; + } + } + if (!$mapped) { + $unmerged[] = $annotation; + } + } + if (!$ignore) { + foreach ($unmerged as $annotation) { + $this->_unmerged[] = $this->nested($annotation, $nestedContext); + } + } + + return $unmerged; + } + + /** + * Merge the properties from the given object into this annotation. + * Prevents overwriting properties that are already configured. + * + * @param object $object + */ + public function mergeProperties($object): void + { + $defaultValues = get_class_vars(get_class($this)); + $currentValues = get_object_vars($this); + foreach ($object as $property => $value) { + if ($property === '_context') { + continue; + } + if ($currentValues[$property] === $defaultValues[$property]) { // Overwrite default values + $this->$property = $value; + continue; + } + if ($property === '_unmerged') { + $this->_unmerged = array_merge($this->_unmerged, $value); + continue; + } + if ($currentValues[$property] !== $value) { // New value is not the same? + if ($defaultValues[$property] === $value) { // but is the same as the default? + continue; // Keep current, no notice + } + $identity = method_exists($object, 'identity') ? $object->identity() : get_class($object); + $context1 = $this->_context; + $context2 = property_exists($object, '_context') ? $object->_context : 'unknown'; + if (is_object($this->$property) && $this->{$property} instanceof AbstractAnnotation) { + $context1 = $this->$property->_context; + } + $this->_context->logger->error('Multiple definitions for ' . $identity . '->' . $property . "\n Using: " . $context1 . "\n Skipping: " . $context2); + } + } + } + + /** + * Generate the documentation in YAML format. + */ + public function toYaml($flags = null): string + { + if ($flags === null) { + $flags = Yaml::DUMP_OBJECT_AS_MAP ^ Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE; + } + + return Yaml::dump(json_decode($this->toJson(JSON_INVALID_UTF8_IGNORE)), 10, 2, $flags); + } + + /** + * Generate the documentation in JSON format. + */ + public function toJson(?int $flags = null): string + { + if ($flags === null) { + $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE; + } + + return json_encode($this, $flags); + } + + public function __debugInfo() + { + $properties = []; + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $properties[$property] = $value; + } + } + + return $properties; + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = new \stdClass(); + + // Strip undefined values. + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $data->$property = $value; + } + } + + // Strip properties that are for internal (swagger-php) use. + foreach (static::$_blacklist as $property) { + unset($data->$property); + } + + // Correct empty array to empty objects. + foreach (static::$_types as $property => $type) { + if ($type === 'object' && is_array($data->$property) && empty($data->$property)) { + $data->$property = new \stdClass(); + } + } + + // Inject vendor properties. + unset($data->x); + if (is_array($this->x)) { + foreach ($this->x as $property => $value) { + $prefixed = 'x-' . $property; + $data->$prefixed = $value; + } + } + + // Map nested keys + foreach (static::$_nested as $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->$property)) { + continue; + } + $keyField = $nested[1]; + $object = new \stdClass(); + foreach ($this->$property as $key => $item) { + if (is_numeric($key) === false && is_array($item)) { + $object->$key = $item; + } else { + $key = $item->$keyField; + if (!Generator::isDefault($key) && empty($object->$key)) { + if ($item instanceof \JsonSerializable) { + $object->$key = $item->jsonSerialize(); + } else { + $object->$key = $item; + } + unset($object->$key->$keyField); + } + } + } + $data->$property = $object; + } + + // $ref + if (isset($data->ref)) { + // Only specific https://github.com/OAI/OpenAPI-Specification/blob/3.1.0/versions/3.1.0.md#reference-object + $ref = ['$ref' => $data->ref]; + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + $defaultValues = get_class_vars(get_class($this)); + foreach (['summary', 'description'] as $prop) { + if (property_exists($this, $prop)) { + if ($this->$prop !== $defaultValues[$prop]) { + $ref[$prop] = $data->$prop; + } + } + } + } + $data = (object) $ref; + } + + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + if (isset($data->nullable)) { + if (true === $data->nullable) { + $data->type = (array) $data->type; + $data->type[] = 'null'; + } + unset($data->nullable); + } + } + + return $data; + } + + /** + * Validate annotation tree, and log notices & warnings. + * + * @param array $stack the path of annotations above this annotation in the tree + * @param array $skip (prevent stack overflow, when traversing an infinite dependency graph) + * @param string $ref Current ref path? + * @param object $context a free-form context contains + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = true; + + // Report orphaned annotations + foreach ($this->_unmerged as $annotation) { + if (!is_object($annotation)) { + $this->_context->logger->warning('Unexpected type: "' . gettype($annotation) . '" in ' . $this->identity() . '->_unmerged, expecting a Annotation object'); + break; + } + + $class = get_class($annotation); + if ($details = static::matchNested($class)) { + $property = $details->value; + if (is_array($property)) { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . ' multiple found, skipped: ' . $annotation->_context); + } else { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . " multiple found in:\n Using: " . $this->$property->_context . "\n Skipped: " . $annotation->_context); + } + } elseif ($annotation instanceof AbstractAnnotation) { + $message = 'Unexpected ' . $annotation->identity(); + if ($class::$_parents) { + $message .= ', expected to be inside ' . implode(', ', Util::shorten($class::$_parents)); + } + $this->_context->logger->warning($message . ' in ' . $annotation->_context); + } + $valid = false; + } + + // Report conflicting key + foreach (static::$_nested as $annotationClass => $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->$property)) { + continue; + } + $keys = []; + $keyField = $nested[1]; + foreach ($this->$property as $key => $item) { + if (is_array($item) && is_numeric($key) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' is an object literal, use nested ' . Util::shorten($annotationClass) . '() annotation(s) in ' . $this->_context); + $keys[$key] = $item; + } elseif (Generator::isDefault($item->$keyField)) { + $this->_context->logger->error($item->identity() . ' is missing key-field: "' . $keyField . '" in ' . $item->_context); + } elseif (isset($keys[$item->$keyField])) { + $this->_context->logger->error('Multiple ' . $item->_identity([]) . ' with the same ' . $keyField . '="' . $item->$keyField . "\":\n " . $item->_context . "\n " . $keys[$item->$keyField]->_context); + } else { + $keys[$item->$keyField] = $item; + } + } + } + + if (property_exists($this, 'ref') && !Generator::isDefault($this->ref) && $this->ref !== null) { + if (substr($this->ref, 0, 2) === '#/' && count($stack) > 0 && $stack[0] instanceof OpenApi) { + // Internal reference + try { + $stack[0]->ref($this->ref); + } catch (\Exception $e) { + $this->_context->logger->warning($e->getMessage() . ' for ' . $this->identity() . ' in ' . $this->_context, ['exception' => $e]); + } + } + } else { + // Report missing required fields (when not a $ref) + foreach (static::$_required as $property) { + if (Generator::isDefault($this->$property)) { + $message = 'Missing required field "' . $property . '" for ' . $this->identity() . ' in ' . $this->_context; + foreach (static::$_nested as $class => $nested) { + $nestedProperty = is_array($nested) ? $nested[0] : $nested; + if ($property === $nestedProperty) { + if ($this instanceof OpenApi) { + $message = 'Required ' . Util::shorten($class) . '() not found'; + } elseif (is_array($nested)) { + $message = $this->identity() . ' requires at least one ' . Util::shorten($class) . '() in ' . $this->_context; + } else { + $message = $this->identity() . ' requires a ' . Util::shorten($class) . '() in ' . $this->_context; + } + break; + } + } + $this->_context->logger->warning($message); + } + } + } + + // Report invalid types + foreach (static::$_types as $property => $type) { + $value = $this->$property; + if (Generator::isDefault($value) || $value === null) { + continue; + } + if (is_string($type)) { + if ($this->validateType($type, $value) === false) { + $valid = false; + $this->_context->logger->warning($this->identity() . '->' . $property . ' is a "' . gettype($value) . '", expecting a "' . $type . '" in ' . $this->_context); + } + } elseif (is_array($type)) { // enum? + if (in_array($value, $type) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' "' . $value . '" is invalid, expecting "' . implode('", "', $type) . '" in ' . $this->_context); + } + } else { + throw new \Exception('Invalid ' . get_class($this) . '::$_types[' . $property . ']'); + } + } + $stack[] = $this; + + return self::_validate($this, $stack, $skip, $ref, $context) ? $valid : false; + } + + /** + * Recursively validate all annotation properties. + * + * @param array|object $fields + */ + private static function _validate($fields, array $stack, array $skip, string $baseRef, ?object $context): bool + { + $valid = true; + $blacklist = []; + if (is_object($fields)) { + if (in_array($fields, $skip, true)) { + return true; + } + $skip[] = $fields; + $blacklist = property_exists($fields, '_blacklist') ? $fields::$_blacklist : []; + } + + foreach ($fields as $field => $value) { + if ($value === null || is_scalar($value) || in_array($field, $blacklist)) { + continue; + } + $ref = $baseRef !== '' ? $baseRef . '/' . urlencode((string) $field) : urlencode((string) $field); + if (is_object($value)) { + if (method_exists($value, 'validate')) { + if (!$value->validate($stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (!self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (is_array($value) && !self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } + + return $valid; + } + + /** + * Return a identity for easy debugging. + * Example: "@OA\Get(path="/pets")". + */ + public function identity(): string + { + $class = get_class($this); + $properties = []; + foreach (static::$_parents as $parent) { + foreach ($parent::$_nested as $annotationClass => $entry) { + if ($annotationClass === $class && is_array($entry) && !Generator::isDefault($this->{$entry[1]})) { + $properties[] = $entry[1]; + break 2; + } + } + } + + return $this->_identity($properties); + } + + /** + * Find matching nested details. + * + * @param string $class the class to match + * + * @return null|object key/value object or `null` + */ + public static function matchNested(string $class) + { + if (array_key_exists($class, static::$_nested)) { + return (object) ['key' => $class, 'value' => static::$_nested[$class]]; + } + + $parent = $class; + // only consider the immediate OpenApi parent + while (0 !== strpos($parent, 'OpenApi\\Annotations\\') && $parent = get_parent_class($parent)) { + if ($kvp = static::matchNested($parent)) { + return $kvp; + } + } + + return null; + } + + /** + * Helper for generating the identity(). + */ + protected function _identity(array $properties): string + { + $fields = []; + foreach ($properties as $property) { + $value = $this->$property; + if ($value !== null && !Generator::isDefault($value)) { + $fields[] = $property . '=' . (is_string($value) ? '"' . $value . '"' : $value); + } + } + + return Util::shorten(get_class($this)) . '(' . implode(',', $fields) . ')'; + } + + /** + * Validates the matching of the property value to a annotation type. + * + * @param string $type The annotations property type + * @param mixed $value The property value + */ + private function validateType(string $type, $value): bool + { + if (substr($type, 0, 1) === '[' && substr($type, -1) === ']') { // Array of a specified type? + if ($this->validateType('array', $value) === false) { + return false; + } + $itemType = substr($type, 1, -1); + foreach ($value as $i => $item) { + if ($this->validateType($itemType, $item) === false) { + return false; + } + } + + return true; + } + + if (is_subclass_of($type, AbstractAnnotation::class)) { + $type = 'object'; + } + + return $this->validateDefaultTypes($type, $value); + } + + /** + * Validates default Open Api types. + * + * @param string $type The property type + * @param mixed $value The value to validate + */ + private function validateDefaultTypes(string $type, $value): bool + { + switch ($type) { + case 'string': + return is_string($value); + case 'boolean': + return is_bool($value); + case 'integer': + return is_int($value); + case 'number': + return is_numeric($value); + case 'object': + return is_object($value); + case 'array': + return $this->validateArrayType($value); + case 'scheme': + return in_array($value, ['http', 'https', 'ws', 'wss'], true); + default: + throw new \Exception('Invalid type "' . $type . '"'); + } + } + + /** + * Validate array type. + */ + private function validateArrayType($value): bool + { + if (is_array($value) === false) { + return false; + } + $count = 0; + foreach ($value as $i => $item) { + //not a array, but a hash/map + if ($count !== $i) { + return false; + } + $count++; + } + + return true; + } + + /** + * Wrap the context with a reference to the annotation it is nested in. + * + * @param AbstractAnnotation $annotation + * + * @return AbstractAnnotation + */ + protected function nested(AbstractAnnotation $annotation, Context $nestedContext) + { + if (property_exists($annotation, '_context') && $annotation->_context === $this->_context) { + $annotation->_context = $nestedContext; + } + + return $annotation; + } + + protected function combine(...$args): array + { + $combined = []; + foreach ($args as $arg) { + if (is_array($arg)) { + $combined = array_merge($combined, $arg); + } else { + $combined[] = $arg; + } + } + + return array_filter($combined, function ($value) { + return !Generator::isDefault($value) && $value !== null; + }); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php b/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php new file mode 100644 index 0000000..0cdf211 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php @@ -0,0 +1,38 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Attachable.php b/vendor/zircote/swagger-php/src/Annotations/Attachable.php new file mode 100644 index 0000000..5cb64ef --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Attachable.php @@ -0,0 +1,73 @@ + + */ + public $schemas = Generator::UNDEFINED; + + /** + * Reusable Responses. + * + * @var Response[] + */ + public $responses = Generator::UNDEFINED; + + /** + * Reusable Parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * Reusable Examples. + * + * @var Examples[] + */ + public $examples = Generator::UNDEFINED; + + /** + * Reusable Request Bodies. + * + * @var RequestBody[] + */ + public $requestBodies = Generator::UNDEFINED; + + /** + * Reusable Headers. + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * Reusable Security Schemes. + * + * @var SecurityScheme[] + */ + public $securitySchemes = Generator::UNDEFINED; + + /** + * Reusable Links. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * Reusable Callbacks. + * + * @var callable[] + */ + public $callbacks = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Response::class => ['responses', 'response'], + Parameter::class => ['parameters', 'parameter'], + PathParameter::class => ['parameters', 'parameter'], + RequestBody::class => ['requestBodies', 'request'], + Examples::class => ['examples', 'example'], + Header::class => ['headers', 'header'], + SecurityScheme::class => ['securitySchemes', 'securityScheme'], + Link::class => ['links', 'link'], + Schema::class => ['schemas', 'schema'], + Attachable::class => ['attachables'], + ]; + + /** + * Generate a `#/components/...` reference for the given annotation. + * + * A `string` component value always assumes type `Schema`. + * + * @param AbstractAnnotation|string $component + */ + public static function ref($component, bool $encode = true): string + { + if ($component instanceof AbstractAnnotation) { + foreach (Components::$_nested as $type => $nested) { + // exclude attachables + if (2 == count($nested)) { + if ($component instanceof $type) { + $type = $nested[0]; + $name = $component->{$nested[1]}; + break; + } + } + } + } else { + $type = 'schemas'; + $name = $component; + } + + return self::COMPONENTS_PREFIX . $type . '/' . ($encode ? Util::refEncode((string) $name) : $name); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Contact.php b/vendor/zircote/swagger-php/src/Annotations/Contact.php new file mode 100644 index 0000000..1075627 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Contact.php @@ -0,0 +1,63 @@ + 'string', + 'url' => 'string', + 'email' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Delete.php b/vendor/zircote/swagger-php/src/Annotations/Delete.php new file mode 100644 index 0000000..8c3a54f --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Delete.php @@ -0,0 +1,25 @@ + 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Schema::class, + Property::class, + AdditionalProperties::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Examples.php b/vendor/zircote/swagger-php/src/Annotations/Examples.php new file mode 100644 index 0000000..c38a24b --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Examples.php @@ -0,0 +1,96 @@ + 'string', + 'description' => 'string', + 'externalValue' => 'string', + ]; + + public static $_required = ['summary']; + + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php b/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php new file mode 100644 index 0000000..81bff45 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php @@ -0,0 +1,76 @@ + 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + Tag::class, + Schema::class, + AdditionalProperties::class, + Property::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Flow.php b/vendor/zircote/swagger-php/src/Annotations/Flow.php new file mode 100644 index 0000000..5409206 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Flow.php @@ -0,0 +1,106 @@ + ['implicit', 'password', 'authorizationCode', 'clientCredentials'], + 'refreshUrl' => 'string', + 'authorizationUrl' => 'string', + 'tokenUrl' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + SecurityScheme::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + if (is_array($this->scopes) && empty($this->scopes)) { + $this->scopes = new \stdClass(); + } + + return parent::jsonSerialize(); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Get.php b/vendor/zircote/swagger-php/src/Annotations/Get.php new file mode 100644 index 0000000..c0ff442 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Get.php @@ -0,0 +1,25 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Info.php b/vendor/zircote/swagger-php/src/Annotations/Info.php new file mode 100644 index 0000000..db535b3 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Info.php @@ -0,0 +1,98 @@ + 'string', + 'version' => 'string', + 'description' => 'string', + 'termsOfService' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Contact::class => 'contact', + License::class => 'license', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Items.php b/vendor/zircote/swagger-php/src/Annotations/Items.php new file mode 100644 index 0000000..c46ec94 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Items.php @@ -0,0 +1,62 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Property::class, + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + $parent = end($stack); + if ($parent instanceof Schema && $parent->type !== 'array') { + $this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context); + $valid = false; + } + + // @todo Additional validation when used inside a Header or Parameter context. + + return $valid; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/JsonContent.php b/vendor/zircote/swagger-php/src/Annotations/JsonContent.php new file mode 100644 index 0000000..348f8d6 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/JsonContent.php @@ -0,0 +1,42 @@ +`'application/json'` will be generated. + * + * @Annotation + */ +class JsonContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/License.php b/vendor/zircote/swagger-php/src/Annotations/License.php new file mode 100644 index 0000000..01e7250 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/License.php @@ -0,0 +1,102 @@ + 'string', + 'identifier' => 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['name']; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + unset($data->identifier); + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if ($this->_context->isVersion(OpenApi::VERSION_3_1_0)) { + if (!Generator::isDefault($this->url) && $this->identifier !== Generator::UNDEFINED) { + $this->_context->logger->warning($this->identity() . ' url and identifier are mutually exclusive'); + $valid = false; + } + } + + return $valid; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Link.php b/vendor/zircote/swagger-php/src/Annotations/Link.php new file mode 100644 index 0000000..99924db --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Link.php @@ -0,0 +1,113 @@ +links array. + * + * @var string + */ + public $link = Generator::UNDEFINED; + + /** + * A relative or absolute reference to an OA operation. + * + * This field is mutually exclusive of the operationId field, and must point to an Operation object. + * + * Relative values may be used to locate an existing Operation object in the OpenAPI definition. + * + * @var string + */ + public $operationRef = Generator::UNDEFINED; + + /** + * The name of an existing, resolvable OA operation, as defined with a unique operationId. + * + * This field is mutually exclusive of the operationRef field. + * + * @var string + */ + public $operationId = Generator::UNDEFINED; + + /** + * A map representing parameters to pass to an operation as specified with operationId or identified via + * operationRef. + * + * The key is the parameter name to be used, whereas the value can be a constant or an expression to + * be evaluated and passed to the linked operation. + * The parameter name can be qualified using the parameter location [{in}.]{name} for operations + * that use the same parameter name in different locations (e.g. path.id). + * + * @var array + */ + public $parameters = Generator::UNDEFINED; + + /** + * A literal value or {expression} to use as a request body when calling the target operation. + */ + public $requestBody = Generator::UNDEFINED; + + /** + * A description of the link. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * A server object to be used by the target operation. + * + * @var Server + */ + public $server = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Server::class => 'server', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/MediaType.php b/vendor/zircote/swagger-php/src/Annotations/MediaType.php new file mode 100644 index 0000000..5abfcdb --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/MediaType.php @@ -0,0 +1,87 @@ +content array. + * + * @var string + */ + public $mediaType = Generator::UNDEFINED; + + /** + * The schema defining the type used for the request body. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example object should be in the correct format as specified by the media type. + * The example object is mutually exclusive of the examples object. + * + * Furthermore, if referencing a schema which contains an example, + * the example value shall override the example provided by the schema. + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example object should match the media type and specified schema if present. + * The examples object is mutually exclusive of the example object. + * + * Furthermore, if referencing a schema which contains an example, + * the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map between a property name and its encoding information. + * + * The key, being the property name, must exist in the schema as a property. + * + * The encoding object shall only apply to requestBody objects when the media type is multipart or + * application/x-www-form-urlencoded. + * + * @var array + */ + public $encoding = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Response::class, + RequestBody::class, + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/OpenApi.php b/vendor/zircote/swagger-php/src/Annotations/OpenApi.php new file mode 100644 index 0000000..5a42184 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/OpenApi.php @@ -0,0 +1,236 @@ +@OA\Server objects, which provide connectivity information to a target server. + * + * If not provided, or is an empty array, the default value would be a Server Object with an url value of /. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * The available paths and operations for the API. + * + * @var PathItem[] + */ + public $paths = Generator::UNDEFINED; + + /** + * An element to hold various components for the specification. + * + * @var Components + */ + public $components = Generator::UNDEFINED; + + /** + * Lists the required security schemes to execute this operation. + * + * The name used for each property must correspond to a security scheme declared + * in the Security Schemes under the Components Object. + * Security Requirement Objects that contain multiple schemes require that + * all schemes must be satisfied for a request to be authorized. + * This enables support for scenarios where multiple query parameters or + * HTTP headers are required to convey security information. + * When a list of Security Requirement Objects is defined on the Open API object or + * Operation Object, only one of Security Requirement Objects in the list needs to + * be satisfied to authorize the request. + * + * @var array + */ + public $security = Generator::UNDEFINED; + + /** + * A list of tags used by the specification with additional metadata. + * + * The order of the tags can be used to reflect on their order by the parsing tools. + * Not all tags that are used by the Operation Object must be declared. + * The tags that are not declared may be organized randomly or based on the tools' logic. + * Each tag name in the list must be unique. + * + * @var Tag[] + */ + public $tags = Generator::UNDEFINED; + + /** + * Additional external documentation. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * @var Analysis + */ + public $_analysis = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['openapi', 'info', 'paths']; + + /** + * @inheritdoc + */ + public static $_nested = [ + Info::class => 'info', + Server::class => ['servers'], + PathItem::class => ['paths', 'path'], + Components::class => 'components', + Tag::class => ['tags'], + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_types = []; + + /** + * @inheritdoc + */ + public function validate(array $stack = null, array $skip = null, string $ref = '', $context = null): bool + { + if ($stack !== null || $skip !== null || $ref !== '') { + $this->_context->logger->warning('Nested validation for ' . $this->identity() . ' not allowed'); + + return false; + } + + if (!in_array($this->openapi, self::SUPPORTED_VERSIONS)) { + $this->_context->logger->warning('Unsupported OpenAPI version "' . $this->openapi . '". Allowed versions are: ' . implode(', ', self::SUPPORTED_VERSIONS)); + + return false; + } + + return parent::validate([], [], '#', new \stdClass()); + } + + /** + * Save the OpenAPI documentation to a file. + */ + public function saveAs(string $filename, string $format = 'auto'): void + { + if ($format === 'auto') { + $format = strtolower(substr($filename, -5)) === '.json' ? 'json' : 'yaml'; + } + + if (strtolower($format) === 'json') { + $content = $this->toJson(); + } else { + $content = $this->toYaml(); + } + + if (file_put_contents($filename, $content) === false) { + throw new \Exception('Failed to saveAs("' . $filename . '", "' . $format . '")'); + } + } + + /** + * Look up an annotation with a $ref url. + * + * @param string $ref The $ref value, for example: "#/components/schemas/Product" + */ + public function ref(string $ref) + { + if (substr($ref, 0, 2) !== '#/') { + // @todo Add support for external (http) refs? + throw new \Exception('Unsupported $ref "' . $ref . '", it should start with "#/"'); + } + + return $this->resolveRef($ref, '#/', $this, []); + } + + /** + * Recursive helper for ref(). + */ + private static function resolveRef(string $ref, string $resolved, $container, array $mapping) + { + if ($ref === $resolved) { + return $container; + } + $path = substr($ref, strlen($resolved)); + $slash = strpos($path, '/'); + + $subpath = $slash === false ? $path : substr($path, 0, $slash); + $property = Util::refDecode($subpath); + $unresolved = $slash === false ? $resolved . $subpath : $resolved . $subpath . '/'; + + if (is_object($container)) { + if (property_exists($container, $property) === false) { + throw new \Exception('$ref "' . $ref . '" not found'); + } + if ($slash === false) { + return $container->$property; + } + $mapping = []; + if ($container instanceof AbstractAnnotation) { + foreach ($container::$_nested as $nestedClass => $nested) { + if (is_string($nested) === false && count($nested) === 2 && $nested[0] === $property) { + $mapping[$nestedClass] = $nested[1]; + } + } + } + + return self::resolveRef($ref, $unresolved, $container->$property, $mapping); + } elseif (is_array($container)) { + if (array_key_exists($property, $container)) { + return self::resolveRef($ref, $unresolved, $container[$property], []); + } + foreach ($mapping as $nestedClass => $keyField) { + foreach ($container as $key => $item) { + if (is_numeric($key) && is_object($item) && $item instanceof $nestedClass && (string) $item->$keyField === $property) { + return self::resolveRef($ref, $unresolved, $item, []); + } + } + } + } + + throw new \Exception('$ref "' . $unresolved . '" not found'); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Operation.php b/vendor/zircote/swagger-php/src/Annotations/Operation.php new file mode 100644 index 0000000..be8d60a --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Operation.php @@ -0,0 +1,248 @@ + 'string', + 'method' => 'string', + 'tags' => '[string]', + 'summary' => 'string', + 'description' => 'string', + 'deprecated' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Response::class => ['responses', 'response'], + ExternalDocumentation::class => 'externalDocs', + Server::class => ['servers'], + RequestBody::class => 'requestBody', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + unset($data->method); + unset($data->path); + + // ensure security elements are object + if (isset($data->security) && is_array($data->security)) { + foreach ($data->security as $key => $scheme) { + $data->security[$key] = (object) $scheme; + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (!Generator::isDefault($this->responses)) { + foreach ($this->responses as $response) { + if (!Generator::isDefault($response->response) && $response->response !== 'default' && preg_match('/^([12345]{1}[0-9]{2})|([12345]{1}XX)$/', (string) $response->response) === 0) { + $this->_context->logger->warning('Invalid value "' . $response->response . '" for ' . $response->_identity([]) . '->response, expecting "default", a HTTP Status Code or HTTP Status Code range definition in ' . $response->_context); + $valid = false; + } + } + } + + if (is_object($context) && !Generator::isDefault($this->operationId)) { + if (!property_exists($context, 'operationIds')) { + $context->operationIds = []; + } + + if (in_array($this->operationId, $context->operationIds)) { + $this->_context->logger->warning('operationId must be unique. Duplicate value found: "' . $this->operationId . '"'); + $valid = false; + } + + $context->operationIds[] = $this->operationId; + } + + return $valid; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Options.php b/vendor/zircote/swagger-php/src/Annotations/Options.php new file mode 100644 index 0000000..312505e --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Options.php @@ -0,0 +1,25 @@ +Components::parameters or PathItem::parameters array. + * + * @var string + */ + public $parameter = Generator::UNDEFINED; + + /** + * The (case-sensitive) name of the parameter. + * + * If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object. + * + * If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored. + * For all other cases, the name corresponds to the parameter name used by the in property. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The location of the parameter. + * + * Possible values are "query", "header", "path" or "cookie". + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * A brief description of the parameter. + * + * This could contain examples of use. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Determines whether this parameter is mandatory. + * + * If the parameter location is "path", this property is required and its value must be true. + * Otherwise, the property may be included and its default value is false. + * + * @var bool + */ + public $required = Generator::UNDEFINED; + + /** + * Specifies that a parameter is deprecated and should be transitioned out of usage. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * Sets the ability to pass empty-valued parameters. + * + * This is valid only for query parameters and allows sending a parameter with an empty value. + * + * Default value is false. + * + * If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored. + * + * @var bool + */ + public $allowEmptyValue = Generator::UNDEFINED; + + /** + * Describes how the parameter value will be serialized depending on the type of the parameter value. + * + * Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form. + * + * @var string + */ + public $style = Generator::UNDEFINED; + + /** + * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. + * + * For other types of parameters this property has no effect. + * + * When style is form, the default value is true. + * For all other styles, the default value is false. + * + * @var bool + */ + public $explode = Generator::UNDEFINED; + + /** + * Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. + * + * This property only applies to parameters with an in value of query. + * + * The default value is false. + * + * @var bool + */ + public $allowReserved = Generator::UNDEFINED; + + /** + * The schema defining the type used for the parameter. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example should match the specified schema and encoding properties if present. + * The example object is mutually exclusive of the examples object. + * Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema. + * To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary. + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example should contain a value in the correct format as specified in the parameter encoding. + * The examples object is mutually exclusive of the example object. + * Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map containing the representations for the parameter. + * + * The key is the media type and the value describes it. + * The map must only contain one entry. + * + * @var MediaType[] + */ + public $content = Generator::UNDEFINED; + + /** + * Path-style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) + */ + public $matrix = Generator::UNDEFINED; + + /** + * Label style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.5) + */ + public $label = Generator::UNDEFINED; + + /** + * Form style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.8) + */ + public $form = Generator::UNDEFINED; + + /** + * Simple style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.2) + * + * @var array + */ + public $simple = Generator::UNDEFINED; + + /** + * Space separated array values. + * + * This option replaces collectionFormat equal to ssv from OpenAPI 2.0. + * + * @var array + */ + public $spaceDelimited = Generator::UNDEFINED; + + /** + * Pipe separated array values. + * + * This option replaces collectionFormat equal to pipes from OpenAPI 2.0. + * + * @var array + */ + public $pipeDelimited = Generator::UNDEFINED; + + /** + * Provides a simple way of rendering nested objects using form parameters. + */ + public $deepObject = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['name', 'in']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'in' => ['query', 'header', 'path', 'cookie'], + 'description' => 'string', + 'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'], + 'required' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + PathItem::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->ref)) { + if ($this->in === 'body') { + if (Generator::isDefault($this->schema)) { + $this->_context->logger->warning('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context); + $valid = false; + } + } + } + + return $valid; + } + + /** + * @inheritdoc + */ + public function identity(): string + { + return parent::_identity(['name', 'in']); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Patch.php b/vendor/zircote/swagger-php/src/Annotations/Patch.php new file mode 100644 index 0000000..7972f3b --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Patch.php @@ -0,0 +1,25 @@ +paths array). + * + * @var string + */ + public $path = Generator::UNDEFINED; + + /** + * An optional, string summary, intended to apply to all operations in this path. + * + * @var string + */ + public $summary = Generator::UNDEFINED; + + /** + * A definition of a GET operation on this path. + * + * @var Get + */ + public $get = Generator::UNDEFINED; + + /** + * A definition of a PUT operation on this path. + * + * @var Put + */ + public $put = Generator::UNDEFINED; + + /** + * A definition of a POST operation on this path. + * + * @var Post + */ + public $post = Generator::UNDEFINED; + + /** + * A definition of a DELETE operation on this path. + * + * @var Delete + */ + public $delete = Generator::UNDEFINED; + + /** + * A definition of a OPTIONS operation on this path. + * + * @var Options + */ + public $options = Generator::UNDEFINED; + + /** + * A definition of a HEAD operation on this path. + * + * @var Head + */ + public $head = Generator::UNDEFINED; + + /** + * A definition of a PATCH operation on this path. + * + * @var Patch + */ + public $patch = Generator::UNDEFINED; + + /** + * A definition of a TRACE operation on this path. + * + * @var Trace + */ + public $trace = Generator::UNDEFINED; + + /** + * An alternative server array to service all operations in this path. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * A list of parameters that are applicable for all the operations described under this path. + * + * These parameters can be overridden at the operation level, but cannot be removed there. + * The list must not include duplicated parameters. + * A unique parameter is defined by a combination of a name and location. + * The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'path' => 'string', + 'summary' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Get::class => 'get', + Post::class => 'post', + Put::class => 'put', + Delete::class => 'delete', + Patch::class => 'patch', + Trace::class => 'trace', + Head::class => 'head', + Options::class => 'options', + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Server::class => ['servers'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/PathParameter.php b/vendor/zircote/swagger-php/src/Annotations/PathParameter.php new file mode 100644 index 0000000..9e600b4 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/PathParameter.php @@ -0,0 +1,25 @@ +properties array. + * + * @var string + */ + public $property = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Property::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Put.php b/vendor/zircote/swagger-php/src/Annotations/Put.php new file mode 100644 index 0000000..a0a0303 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Put.php @@ -0,0 +1,25 @@ +|JsonContent|XmlContent + */ + public $content = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + 'required' => 'boolean', + 'request' => 'string', + ]; + + public static $_parents = [ + Components::class, + Delete::class, + Get::class, + Head::class, + Operation::class, + Options::class, + Patch::class, + Post::class, + Trace::class, + Put::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Response.php b/vendor/zircote/swagger-php/src/Annotations/Response.php new file mode 100644 index 0000000..5c8d304 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Response.php @@ -0,0 +1,128 @@ +responses array. + * + * A HTTP status code or default. + * + * @var string|int + */ + public $response = Generator::UNDEFINED; + + /** + * A short description of the response. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Maps a header name to its definition. + * + * RFC7230 states header names are case insensitive. + * + * If a response header is defined with the name "Content-Type", it shall be ignored. + * + * @see [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * A map containing descriptions of potential response payloads. + * + * The key is a media type or media type range and the value describes it. + * + * For responses that match multiple keys, only the most specific key is applicable; + * e.g. text/plain overrides text/*. + * + * @var MediaType|JsonContent|XmlContent|array + */ + public $content = Generator::UNDEFINED; + + /** + * A map of operations links that can be followed from the response. + * + * The key of the map is a short name for the link, following the naming constraints of the names for Component + * Objects. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Header::class => ['headers', 'header'], + Link::class => ['links', 'link'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Patch::class, + Delete::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->description) && Generator::isDefault($this->ref)) { + $this->_context->logger->warning($this->identity() . ' One of description or ref is required'); + $valid = false; + } + + return $valid; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Schema.php b/vendor/zircote/swagger-php/src/Annotations/Schema.php new file mode 100644 index 0000000..c7f960b --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Schema.php @@ -0,0 +1,440 @@ +schemas array. + * + * @var string + */ + public $schema = Generator::UNDEFINED; + + /** + * Can be used to decorate a user interface with information about the data produced by this user interface. + * + * Preferably short; use description for more details. + * + * @var string + */ + public $title = Generator::UNDEFINED; + + /** + * A description will provide explanation about the purpose of the instance described by this schema. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the + * value of this property. + * + * @var int + */ + public $maxProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to, + * the value of this property. + * + * @var int + */ + public $minProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against this property if its property set contains all elements in this property's + * array value. + * + * @var string[] + */ + public $required = Generator::UNDEFINED; + + /** + * @var Property[] + */ + public $properties = Generator::UNDEFINED; + + /** + * The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or + * "object". + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * The extending format for the previously mentioned type. See Data Type Formats for further details. + * + * @var string + */ + public $format = Generator::UNDEFINED; + + /** + * Required if type is "array". Describes the type of items in the array. + * + * @var Items + */ + public $items = Generator::UNDEFINED; + + /** + * Determines the format of the array if type array is used. + * Possible values are: + * - csv: comma separated values foo,bar. + * - ssv: space separated values foo bar. + * - tsv: tab separated values foo\tbar. + * - pipes: pipe separated values foo|bar. + * - multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz. + * This is valid only for parameters of type query or formData. + * Default value is csv. + * + * @var string + */ + public $collectionFormat = Generator::UNDEFINED; + + /** + * Sets a default value to the parameter. The type of the value depends on the defined type. + * + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor101) + */ + public $default = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var int|float + */ + public $maximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var bool + */ + public $exclusiveMaximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var int|float + */ + public $minimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var bool + */ + public $exclusiveMinimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor26) + * + * @var int + */ + public $maxLength = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor29) + * + * @var int + */ + public $minLength = Generator::UNDEFINED; + + /** + * A string instance is considered valid if the regular expression matches the instance successfully. + * + * @var string + */ + public $pattern = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor42) + * + * @var int + */ + public $maxItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor45) + * + * @var int + */ + public $minItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor49) + * + * @var bool + */ + public $uniqueItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor76) + * + * @var string[]|int[]|float[] + */ + public $enum = Generator::UNDEFINED; + + /** + * A numeric instance is valid against "multipleOf" if the result of the division of the instance by this + * property's value is an integer. + * + * @var int|float + */ + public $multipleOf = Generator::UNDEFINED; + + /** + * Adds support for polymorphism. + * + * The discriminator is an object name that is used to differentiate between other schemas which may satisfy the + * payload description. See Composition and Inheritance for more details. + * + * @var Discriminator + */ + public $discriminator = Generator::UNDEFINED; + + /** + * Declares the property as "read only". + * + * Relevant only for Schema "properties" definitions. + * + * This means that it may be sent as part of a response but should not be sent as part of the request. + * If the property is marked as readOnly being true and is in the required list, the required will take effect on + * the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $readOnly = Generator::UNDEFINED; + + /** + * Declares the property as "write only". + * + * Relevant only for Schema "properties" definitions. + * Therefore, it may be sent as part of a request but should not be sent as part of the response. + * If the property is marked as writeOnly being true and is in the required list, the required will take effect on + * the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $writeOnly = Generator::UNDEFINED; + + /** + * This may be used only on properties schemas. + * + * It has no effect on root schemas. + * Adds additional metadata to describe the XML representation of this property. + * + * @var Xml + */ + public $xml = Generator::UNDEFINED; + + /** + * Additional external documentation for this schema. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * A free-form property to include an example of an instance for this schema. + * + * To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to + * contain the example with escaping where necessary. + */ + public $example = Generator::UNDEFINED; + + /** + * Allows sending a null value for the defined schema. + * Default value is false. + * + * @var bool + */ + public $nullable = Generator::UNDEFINED; + + /** + * Specifies that a schema is deprecated and should be transitioned out of usage. + * Default value is false. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against all schemas + * defined by this property's value. + * + * @var array + */ + public $allOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against at least one + * schema defined by this property's value. + * + * @var array + */ + public $anyOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against exactly one schema + * defined by this property's value. + * + * @var array + */ + public $oneOf = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29. + */ + public $not = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#anchor64. + * + * @var bool|AdditionalProperties + */ + public $additionalProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10. + */ + public $additionalItems = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14. + */ + public $contains = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19. + */ + public $patternProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21. + */ + public $dependencies = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22. + */ + public $propertyNames = Generator::UNDEFINED; + + /** + * http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3. + * + * @var mixed + */ + public $const = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'title' => 'string', + 'description' => 'string', + 'required' => '[string]', + 'format' => 'string', + 'collectionFormat' => ['csv', 'ssv', 'tsv', 'pipes', 'multi'], + 'maximum' => 'number', + 'exclusiveMaximum' => 'boolean', + 'minimum' => 'number', + 'exclusiveMinimum' => 'boolean', + 'maxLength' => 'integer', + 'minLength' => 'integer', + 'pattern' => 'string', + 'maxItems' => 'integer', + 'minItems' => 'integer', + 'uniqueItems' => 'boolean', + 'multipleOf' => 'integer', + 'allOf' => '[' . Schema::class . ']', + 'oneOf' => '[' . Schema::class . ']', + 'anyOf' => '[' . Schema::class . ']', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + Header::class, + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if (isset($data->const)) { + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + $data->enum = [$data->const]; + unset($data->const); + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if ($this->type === 'array' && Generator::isDefault($this->items)) { + $this->_context->logger->warning('@OA\\Items() is required when ' . $this->identity() . ' has type "array" in ' . $this->_context); + + return false; + } + + return parent::validate($stack, $skip, $ref, $context); + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php b/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php new file mode 100644 index 0000000..13fa564 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php @@ -0,0 +1,136 @@ +security array. + * + * @var string + */ + public $securityScheme = Generator::UNDEFINED; + + /** + * The type of the security scheme. + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * A short description for security scheme. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * The name of the header or query parameter to be used. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * Required The location of the API key. + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * The flow used by the OAuth2 security scheme. + * + * @var Flow[] + */ + public $flows = Generator::UNDEFINED; + + /** + * A hint to the client to identify how the bearer token is formatted. + * + * Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes. + * + * @var string + */ + public $bearerFormat = Generator::UNDEFINED; + + /** + * The name of the HTTP Authorization scheme. + * + * @see [RFC7235](https://tools.ietf.org/html/rfc7235#section-5.1) + * + * @var string + */ + public $scheme = Generator::UNDEFINED; + + /** + * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL. + * + * @var string + */ + public $openIdConnectUrl = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['securityScheme', 'type']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'type' => ['http', 'apiKey', 'oauth2', 'openIdConnect'], + 'description' => 'string', + 'name' => 'string', + 'bearerFormat' => 'string', + 'in' => ['query', 'header', 'cookie'], + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Flow::class => ['flows', 'flow'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + ]; + + /** + * @inheritdoc + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = parent::merge($annotations, $ignore); + + if ($this->type === 'oauth2') { + $this->name = Generator::UNDEFINED; + } + + return $unmerged; + } +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Server.php b/vendor/zircote/swagger-php/src/Annotations/Server.php new file mode 100644 index 0000000..df0cb0d --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Server.php @@ -0,0 +1,87 @@ + ['variables', 'serverVariable'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'url' => 'string', + 'description' => 'string', + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php b/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php new file mode 100644 index 0000000..99423aa --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php @@ -0,0 +1,87 @@ +variables array. + * + * @var string + */ + public $serverVariable = Generator::UNDEFINED; + + /** + * An enumeration of values to be used if the substitution options are from a limited set. + * + * @var string[]|int[]|float[] + */ + public $enum = Generator::UNDEFINED; + + /** + * The default value to use for substitution, and to send, if an alternate value is not supplied. + * + * Unlike the Schema Object's default, this value must be provided by the consumer. + * + * @var string + */ + public $default = Generator::UNDEFINED; + + /** + * A map between a variable name and its value. + * + * The value is used for substitution in the server's URL template. + * + * @var array + */ + public $variables = Generator::UNDEFINED; + + /** + * An optional description for the server variable. + * + * CommonMark syntax MAY be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + Server::class, + ]; + + /** + * @inheritdoc + */ + public static $_required = ['default']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'default' => 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Tag.php b/vendor/zircote/swagger-php/src/Annotations/Tag.php new file mode 100644 index 0000000..670ac87 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Tag.php @@ -0,0 +1,66 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/Trace.php b/vendor/zircote/swagger-php/src/Annotations/Trace.php new file mode 100644 index 0000000..aac2820 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/Trace.php @@ -0,0 +1,25 @@ +true. + * + * If wrapped is false, it will be ignored. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The URL of the namespace definition. Value SHOULD be in the form of an URL. + * + * @var string + */ + public $namespace = Generator::UNDEFINED; + + /** + * The prefix to be used for the name. + * + * @var string + */ + public $prefix = Generator::UNDEFINED; + + /** + * Declares whether the property definition translates to an attribute instead of an element. + * + * Default value is false. + * + * @var bool + */ + public $attribute = Generator::UNDEFINED; + + /** + * MAY be used only for an array definition. + * + * Signifies whether the array is wrapped (for example <books><book/><book/></books>) + * or unwrapped (<book/><book/>). + * + * Default value is false. The definition takes effect only when defined alongside type being array (outside the items). + * + * @var bool + */ + public $wrapped = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'namespace' => 'string', + 'prefix' => 'string', + 'attribute' => 'boolean', + 'wrapped' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + Property::class, + Schema::class, + Items::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Annotations/XmlContent.php b/vendor/zircote/swagger-php/src/Annotations/XmlContent.php new file mode 100644 index 0000000..59f7651 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Annotations/XmlContent.php @@ -0,0 +1,43 @@ +`'application/xml'` will be generated. + * + * @Annotation + */ +class XmlContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php b/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php new file mode 100644 index 0000000..a6f28c8 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php @@ -0,0 +1,101 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Attachable.php b/vendor/zircote/swagger-php/src/Attributes/Attachable.php new file mode 100644 index 0000000..0fc6fa7 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Attachable.php @@ -0,0 +1,16 @@ +|null $schemas + * @param Response[]|null $responses + * @param Parameter[]|null $parameters + * @param RequestBody[]|null $requestBodies + * @param Examples[]|null $examples + * @param Header[]|null $headers + * @param SecurityScheme[]|null $securitySchemes + * @param Link[]|null $links + * @param callable[]|null $callbacks + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $schemas = null, + ?array $responses = null, + ?array $parameters = null, + ?array $requestBodies = null, + ?array $examples = null, + ?array $headers = null, + ?array $securitySchemes = null, + ?array $links = null, + ?array $callbacks = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($schemas, $responses, $parameters, $examples, $requestBodies, $headers, $securitySchemes, $links, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Contact.php b/vendor/zircote/swagger-php/src/Attributes/Contact.php new file mode 100644 index 0000000..332979e --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Contact.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $url = null, + ?string $email = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'email' => $email ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Delete.php b/vendor/zircote/swagger-php/src/Attributes/Delete.php new file mode 100644 index 0000000..d2f1c73 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Delete.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $propertyName = null, + ?array $mapping = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'propertyName' => $propertyName ?? Generator::UNDEFINED, + 'mapping' => $mapping ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Examples.php b/vendor/zircote/swagger-php/src/Attributes/Examples.php new file mode 100644 index 0000000..9e1a9a0 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Examples.php @@ -0,0 +1,42 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $example = null, + ?string $summary = null, + ?string $description = null, + int|string|array|null $value = null, + ?string $externalValue = null, + string|object|null $ref = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'example' => $example ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'value' => $value ?? Generator::UNDEFINED, + 'externalValue' => $externalValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + ]); + if ($attachables) { + $this->merge($attachables); + } + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php b/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php new file mode 100644 index 0000000..f9bfa94 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php @@ -0,0 +1,32 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $description = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'description' => $description ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Flow.php b/vendor/zircote/swagger-php/src/Attributes/Flow.php new file mode 100644 index 0000000..80e6ebc --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Flow.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $authorizationUrl = null, + ?string $tokenUrl = null, + ?string $refreshUrl = null, + ?string $flow = null, + ?array $scopes = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'authorizationUrl' => $authorizationUrl ?? Generator::UNDEFINED, + 'tokenUrl' => $tokenUrl ?? Generator::UNDEFINED, + 'refreshUrl' => $refreshUrl ?? Generator::UNDEFINED, + 'flow' => $flow ?? Generator::UNDEFINED, + 'scopes' => $scopes ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Get.php b/vendor/zircote/swagger-php/src/Attributes/Get.php new file mode 100644 index 0000000..81e5ad8 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Get.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $header = null, + ?string $description = null, + ?bool $required = null, + ?Schema $schema = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + // annotation4 + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'header' => $header ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables, $schema), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Info.php b/vendor/zircote/swagger-php/src/Attributes/Info.php new file mode 100644 index 0000000..39348f5 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Info.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $version = null, + ?string $description = null, + ?string $title = null, + ?string $termsOfService = null, + ?Contact $contact = null, + ?License $license = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'version' => $version ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'termsOfService' => $termsOfService ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($contact, $license, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Items.php b/vendor/zircote/swagger-php/src/Attributes/Items.php new file mode 100644 index 0000000..00d1d49 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Items.php @@ -0,0 +1,105 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/JsonContent.php b/vendor/zircote/swagger-php/src/Attributes/JsonContent.php new file mode 100644 index 0000000..5472064 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/JsonContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param Property[] $properties + * @param int|float $maximum + * @param int|float $minimum + * @param string[]|int[]|float[] $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/License.php b/vendor/zircote/swagger-php/src/Attributes/License.php new file mode 100644 index 0000000..b929237 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/License.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $identifier = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'identifier' => $identifier ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Link.php b/vendor/zircote/swagger-php/src/Attributes/Link.php new file mode 100644 index 0000000..58eeb0a --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Link.php @@ -0,0 +1,44 @@ + $parameters + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $link = null, + ?string $operationRef = null, + string|object|null $ref = null, + ?string $operationId = null, + ?array $parameters = null, + $requestBody = null, + ?string $description = null, + ?Server $server = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'link' => $link ?? Generator::UNDEFINED, + 'operationRef' => $operationRef ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'parameters' => $parameters ?? Generator::UNDEFINED, + 'requestBody' => $requestBody ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($server, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/MediaType.php b/vendor/zircote/swagger-php/src/Attributes/MediaType.php new file mode 100644 index 0000000..b351510 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/MediaType.php @@ -0,0 +1,38 @@ + $examples + * @param array $encoding + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $mediaType = null, + ?Schema $schema = null, + $example = Generator::UNDEFINED, + ?array $examples = null, + ?array $encoding = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'mediaType' => $mediaType ?? Generator::UNDEFINED, + 'example' => $example, + 'encoding' => $encoding ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/OpenApi.php b/vendor/zircote/swagger-php/src/Attributes/OpenApi.php new file mode 100644 index 0000000..ce625e2 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/OpenApi.php @@ -0,0 +1,41 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string $openapi = self::DEFAULT_VERSION, + ?Info $info = null, + ?array $servers = null, + ?array $security = null, + ?array $tags = null, + ?ExternalDocumentation $externalDocs = null, + ?array $paths = null, + ?Components $components = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'openapi' => $openapi, + 'security' => $security ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($info, $servers, $tags, $externalDocs, $paths, $components, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php b/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php new file mode 100644 index 0000000..7473f3f --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php @@ -0,0 +1,55 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $operationId = null, + ?string $description = null, + ?string $summary = null, + ?array $security = null, + ?array $servers = null, + ?RequestBody $requestBody = null, + ?array $tags = null, + ?array $parameters = null, + ?array $responses = null, + ?array $callbacks = null, + ?ExternalDocumentation $externalDocs = null, + ?bool $deprecated = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'security' => $security ?? Generator::UNDEFINED, + 'servers' => $servers ?? Generator::UNDEFINED, + 'tags' => $tags ?? Generator::UNDEFINED, + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($requestBody, $responses, $parameters, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Options.php b/vendor/zircote/swagger-php/src/Attributes/Options.php new file mode 100644 index 0000000..175b962 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Options.php @@ -0,0 +1,13 @@ + $examples + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $parameter = null, + ?string $name = null, + ?string $description = null, + ?string $in = null, + ?bool $required = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + string|object|null $ref = null, + ?Schema $schema = null, + $example = Generator::UNDEFINED, + ?array $examples = null, + ?string $style = null, + ?bool $explode = null, + ?bool $allowReserved = null, + ?array $spaceDelimited = null, + ?array $pipeDelimited = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'parameter' => $parameter ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'in' => Generator::isDefault($this->in) ? $in : $this->in, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'example' => $example, + 'style' => $style ?? Generator::UNDEFINED, + 'explode' => $explode ?? Generator::UNDEFINED, + 'allowReserved' => $allowReserved ?? Generator::UNDEFINED, + 'spaceDelimited' => $spaceDelimited ?? Generator::UNDEFINED, + 'pipeDelimited' => $pipeDelimited ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Patch.php b/vendor/zircote/swagger-php/src/Attributes/Patch.php new file mode 100644 index 0000000..1a0a3c8 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Patch.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $summary = null, + ?array $servers = null, + ?array $parameters = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($servers, $parameters, $attachables), + ]); + } +} + +//Missing parameters: get, put, post, delete, options, head, patch, trace, parameters diff --git a/vendor/zircote/swagger-php/src/Attributes/PathParameter.php b/vendor/zircote/swagger-php/src/Attributes/PathParameter.php new file mode 100644 index 0000000..70ccfd6 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/PathParameter.php @@ -0,0 +1,13 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $property = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'property' => $property ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Put.php b/vendor/zircote/swagger-php/src/Attributes/Put.php new file mode 100644 index 0000000..2133102 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Put.php @@ -0,0 +1,13 @@ +|JsonContent|XmlContent|null $content + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $request = null, + ?string $description = null, + ?bool $required = null, + array|JsonContent|XmlContent|null $content = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'request' => $request ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($content, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Response.php b/vendor/zircote/swagger-php/src/Attributes/Response.php new file mode 100644 index 0000000..9106141 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Response.php @@ -0,0 +1,43 @@ + $content + * @param Link[] $links + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + int|string $response = null, + ?string $description = null, + ?array $headers = null, + MediaType|JsonContent|XmlContent|array|null $content = null, + ?array $links = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'response' => $response ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($headers, $content, $links, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Schema.php b/vendor/zircote/swagger-php/src/Attributes/Schema.php new file mode 100644 index 0000000..5e4bfe5 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Schema.php @@ -0,0 +1,106 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param mixed $const + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + $const = Generator::UNDEFINED, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + 'const' => $const, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php b/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php new file mode 100644 index 0000000..f1d8bec --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php @@ -0,0 +1,48 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $securityScheme = null, + ?string $type = null, + ?string $description = null, + ?string $name = null, + ?string $in = null, + ?string $bearerFormat = null, + ?string $scheme = null, + ?string $openIdConnectUrl = null, + ?array $flows = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'securityScheme' => $securityScheme ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'in' => $in ?? Generator::UNDEFINED, + 'bearerFormat' => $bearerFormat ?? Generator::UNDEFINED, + 'scheme' => $scheme ?? Generator::UNDEFINED, + 'openIdConnectUrl' => $openIdConnectUrl ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($flows, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Server.php b/vendor/zircote/swagger-php/src/Attributes/Server.php new file mode 100644 index 0000000..337d595 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Server.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $url = null, + ?string $description = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'url' => $url ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($variables, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php b/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php new file mode 100644 index 0000000..e378812 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php @@ -0,0 +1,39 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $serverVariable = null, + ?string $description = null, + ?string $default = null, + ?array $enum = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'serverVariable' => $serverVariable ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'default' => $default ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'variables' => $variables ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Tag.php b/vendor/zircote/swagger-php/src/Attributes/Tag.php new file mode 100644 index 0000000..8ef0ef1 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Tag.php @@ -0,0 +1,33 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $description = null, + ?ExternalDocumentation $externalDocs = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/Trace.php b/vendor/zircote/swagger-php/src/Attributes/Trace.php new file mode 100644 index 0000000..aff7fe7 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/Trace.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $namespace = null, + ?string $prefix = null, + ?bool $attribute = null, + ?bool $wrapped = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'namespace' => $namespace ?? Generator::UNDEFINED, + 'prefix' => $prefix ?? Generator::UNDEFINED, + 'attribute' => $attribute ?? Generator::UNDEFINED, + 'wrapped' => $wrapped ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Attributes/XmlContent.php b/vendor/zircote/swagger-php/src/Attributes/XmlContent.php new file mode 100644 index 0000000..6126951 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Attributes/XmlContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param int|float $maximum + * @param int|float $minimum + * @param Property[] $properties + * @param string[]|int[]|float[] $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + ?array $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/vendor/zircote/swagger-php/src/Context.php b/vendor/zircote/swagger-php/src/Context.php new file mode 100644 index 0000000..30ab050 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Context.php @@ -0,0 +1,273 @@ + $value) { + $this->$property = $value; + } + $this->_parent = $parent; + + $this->logger = $this->logger ?: new DefaultLogger(); + } + + /** + * Check if a property is set directly on this context and not its parent context. + * + * Example: $c->is('method') or $c->is('class') + */ + public function is(string $type): bool + { + return property_exists($this, $type); + } + + /** + * Check if a property is NOT set directly on this context and but its parent context. + * + * Example: $c->not('method') or $c->not('class') + */ + public function not(string $type): bool + { + return property_exists($this, $type) === false; + } + + /** + * Return the context containing the specified property. + */ + public function with(string $property): ?Context + { + if (property_exists($this, $property)) { + return $this; + } + if ($this->_parent !== null) { + return $this->_parent->with($property); + } + + return null; + } + + /** + * Get the root context. + */ + public function root(): Context + { + if ($this->_parent !== null) { + return $this->_parent->root(); + } + + return $this; + } + + /** + * Check if one of the given version numbers matches the current OpenAPI version. + * + * @param string|array $versions One or more version numbers + */ + public function isVersion($versions): bool + { + if (!$this->version) { + throw new \RuntimeException('Version is only available reliably for validation and serialization'); + } + + $versions = (array) $versions; + $currentVersion = $this->version ?: OpenApi::DEFAULT_VERSION; + + return in_array($currentVersion, $versions); + } + + /** + * Export location for debugging. + * + * @return string Example: "file1.php on line 12" + */ + public function getDebugLocation(): string + { + $location = ''; + if ($this->class && ($this->method || $this->property)) { + $location .= $this->fullyQualifiedName($this->class); + if ($this->method) { + $location .= ($this->static ? '::' : '->') . $this->method . '()'; + } elseif ($this->property) { + $location .= ($this->static ? '::$' : '->') . $this->property; + } + } + if ($this->filename) { + if ($location !== '') { + $location .= ' in '; + } + $location .= $this->filename; + } + if ($this->line) { + if ($location !== '') { + $location .= ' on'; + } + $location .= ' line ' . $this->line; + if ($this->character) { + $location .= ':' . $this->character; + } + } + + return $location; + } + + /** + * Traverse the context tree to get the property value. + */ + public function __get(string $property) + { + if ($this->_parent !== null) { + return $this->_parent->$property; + } + + return null; + } + + public function __toString() + { + return $this->getDebugLocation(); + } + + public function __debugInfo() + { + return ['-' => $this->getDebugLocation()]; + } + + /** + * Create a Context based on the debug_backtrace. + * + * @deprecated + */ + public static function detect(int $index = 0): Context + { + $context = new Context(); + $backtrace = debug_backtrace(); + $position = $backtrace[$index]; + if (isset($position['file'])) { + $context->filename = $position['file']; + } + if (isset($position['line'])) { + $context->line = $position['line']; + } + $caller = isset($backtrace[$index + 1]) ? $backtrace[$index + 1] : null; + if (isset($caller['function'])) { + $context->method = $caller['function']; + if (isset($caller['type']) && $caller['type'] === '::') { + $context->static = true; + } + } + if (isset($caller['class'])) { + $fqn = explode('\\', $caller['class']); + $context->class = array_pop($fqn); + if (count($fqn)) { + $context->namespace = implode('\\', $fqn); + } + } + + // @todo extract namespaces and use statements + return $context; + } + + /** + * Resolve the fully qualified name. + */ + public function fullyQualifiedName(?string $source): string + { + if ($source === null) { + return ''; + } + + if ($this->namespace) { + $namespace = str_replace('\\\\', '\\', '\\' . $this->namespace . '\\'); + } else { + // global namespace + $namespace = '\\'; + } + + $thisSource = $this->class ?? $this->interface ?? $this->trait; + if ($thisSource && strcasecmp($source, $thisSource) === 0) { + return $namespace . $thisSource; + } + $pos = strpos($source, '\\'); + if ($pos !== false) { + if ($pos === 0) { + // Fully qualified name (\Foo\Bar) + return $source; + } + // Qualified name (Foo\Bar) + if ($this->uses) { + foreach ($this->uses as $alias => $aliasedNamespace) { + $alias .= '\\'; + if (strcasecmp(substr($source, 0, strlen($alias)), $alias) === 0) { + // Aliased namespace (use \Long\Namespace as Foo) + return '\\' . $aliasedNamespace . substr($source, strlen($alias) - 1); + } + } + } + } elseif ($this->uses) { + // Unqualified name (Foo) + foreach ($this->uses as $alias => $aliasedNamespace) { + if (strcasecmp($alias, $source) === 0) { + return '\\' . $aliasedNamespace; + } + } + } + + return $namespace . $source; + } +} diff --git a/vendor/zircote/swagger-php/src/Generator.php b/vendor/zircote/swagger-php/src/Generator.php new file mode 100644 index 0000000..e82d565 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Generator.php @@ -0,0 +1,438 @@ + */ + public const DEFAULT_ALIASES = ['oa' => 'OpenApi\\Annotations']; + /** @var array */ + public const DEFAULT_NAMESPACES = ['OpenApi\\Annotations\\']; + + /** @var array Map of namespace aliases to be supported by doctrine. */ + protected $aliases; + + /** @var array|null List of annotation namespaces to be autoloaded by doctrine. */ + protected $namespaces; + + /** @var AnalyserInterface|null The configured analyzer. */ + protected $analyser; + + /** @var array */ + protected $config = []; + + /** @var callable[]|null List of configured processors. */ + protected $processors = null; + + /** @var LoggerInterface|null PSR logger. */ + protected $logger = null; + + /** + * OpenApi version override. + * + * If set, it will override the version set in the `OpenApi` annotation. + * + * Due to the order of processing any conditional code using this (via `Context::$version`) + * must come only after the analysis is finished. + * + * @var string|null + */ + protected $version = null; + + private $configStack; + + public function __construct(?LoggerInterface $logger = null) + { + $this->logger = $logger; + + $this->setAliases(self::DEFAULT_ALIASES); + $this->setNamespaces(self::DEFAULT_NAMESPACES); + + // kinda config stack to stay BC... + $this->configStack = new class() { + protected $generator; + + public function push(Generator $generator): void + { + $this->generator = $generator; + if (class_exists(AnnotationRegistry::class, true)) { + // keeping track of &this->generator allows to 'disable' the loader after we are done; + // no unload, unfortunately :/ + $gref = &$this->generator; + AnnotationRegistry::registerLoader( + function (string $class) use (&$gref): bool { + if ($gref) { + foreach ($gref->getNamespaces() as $namespace) { + if (strtolower(substr($class, 0, strlen($namespace))) === strtolower($namespace)) { + $loaded = class_exists($class); + if (!$loaded && $namespace === 'OpenApi\\Annotations\\') { + if (in_array(strtolower(substr($class, 20)), ['definition', 'path'])) { + // Detected an 2.x annotation? + throw new \Exception('The annotation @SWG\\' . substr($class, 20) . '() is deprecated. Found in ' . Generator::$context . "\nFor more information read the migration guide: https://github.com/zircote/swagger-php/blob/master/docs/Migrating-to-v3.md"); + } + } + + return $loaded; + } + } + } + + return false; + } + ); + } + } + + public function pop(): void + { + $this->generator = null; + } + }; + } + + public static function isDefault($value): bool + { + return $value === Generator::UNDEFINED; + } + + public function getAliases(): array + { + return $this->aliases; + } + + public function addAlias(string $alias, string $namespace): Generator + { + $this->aliases[$alias] = $namespace; + + return $this; + } + + public function setAliases(array $aliases): Generator + { + $this->aliases = $aliases; + + return $this; + } + + public function getNamespaces(): ?array + { + return $this->namespaces; + } + + public function addNamespace(string $namespace): Generator + { + $namespaces = (array) $this->getNamespaces(); + $namespaces[] = $namespace; + + return $this->setNamespaces(array_unique($namespaces)); + } + + public function setNamespaces(?array $namespaces): Generator + { + $this->namespaces = $namespaces; + + return $this; + } + + public function getAnalyser(): AnalyserInterface + { + $this->analyser = $this->analyser ?: new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); + $this->analyser->setGenerator($this); + + return $this->analyser; + } + + public function setAnalyser(?AnalyserInterface $analyser): Generator + { + $this->analyser = $analyser; + + return $this; + } + + public function getDefaultConfig(): array + { + return [ + 'operationId' => [ + 'hash' => true, + ], + ]; + } + + public function getConfig(): array + { + return $this->config + $this->getDefaultConfig(); + } + + /** + * Set generator and/or processor config. + * + * @param array $config + */ + public function setConfig(array $config): Generator + { + $this->config = $config + $this->config; + + return $this; + } + + /** + * @return callable[] + */ + public function getProcessors(): array + { + if (null === $this->processors) { + $this->processors = [ + new Processors\DocBlockDescriptions(), + new Processors\MergeIntoOpenApi(), + new Processors\MergeIntoComponents(), + new Processors\ExpandClasses(), + new Processors\ExpandInterfaces(), + new Processors\ExpandTraits(), + new Processors\ExpandEnums(), + new Processors\AugmentSchemas(), + new Processors\AugmentProperties(), + new Processors\BuildPaths(), + new Processors\AugmentParameters(), + new Processors\AugmentRefs(), + new Processors\MergeJsonContent(), + new Processors\MergeXmlContent(), + new Processors\OperationId(), + new Processors\CleanUnmerged(), + ]; + } + + $config = $this->getConfig(); + foreach ($this->processors as $processor) { + $rc = new \ReflectionClass($processor); + + // apply config + $processorKey = lcfirst($rc->getShortName()); + if (array_key_exists($processorKey, $config)) { + foreach ($config[$processorKey] as $name => $value) { + $setter = 'set' . ucfirst($name); + if (method_exists($processor, $setter)) { + $processor->{$setter}($value); + } + } + } + } + + return $this->processors; + } + + /** + * @param null|callable[] $processors + */ + public function setProcessors(?array $processors): Generator + { + $this->processors = $processors; + + return $this; + } + + public function addProcessor(callable $processor): Generator + { + $processors = $this->getProcessors(); + $processors[] = $processor; + $this->setProcessors($processors); + + return $this; + } + + public function removeProcessor(callable $processor, bool $silent = false): Generator + { + $processors = $this->getProcessors(); + if (false === ($key = array_search($processor, $processors, true))) { + if ($silent) { + return $this; + } + throw new \InvalidArgumentException('Processor not found'); + } + unset($processors[$key]); + $this->setProcessors($processors); + + return $this; + } + + /** + * Update/replace an existing processor with a new one. + * + * @param callable $processor The new processor + * @param null|callable $matcher Optional matcher callable to identify the processor to replace. + * If none given, matching is based on the processors class. + */ + public function updateProcessor(callable $processor, ?callable $matcher = null): Generator + { + $matcher = $matcher ?: function ($other) use ($processor): bool { + $otherClass = get_class($other); + + return $processor instanceof $otherClass; + }; + + $processors = array_map(function ($other) use ($processor, $matcher) { + return $matcher($other) ? $processor : $other; + }, $this->getProcessors()); + $this->setProcessors($processors); + + return $this; + } + + public function getLogger(): ?LoggerInterface + { + return $this->logger ?: new DefaultLogger(); + } + + public function getVersion(): ?string + { + return $this->version; + } + + public function setVersion(?string $version): Generator + { + $this->version = $version; + + return $this; + } + + public static function scan(iterable $sources, array $options = []): ?OpenApi + { + // merge with defaults + $config = $options + [ + 'aliases' => self::DEFAULT_ALIASES, + 'namespaces' => self::DEFAULT_NAMESPACES, + 'analyser' => null, + 'analysis' => null, + 'processors' => null, + 'logger' => null, + 'validate' => true, + 'version' => null, + ]; + + return (new Generator($config['logger'])) + ->setVersion($config['version']) + ->setAliases($config['aliases']) + ->setNamespaces($config['namespaces']) + ->setAnalyser($config['analyser']) + ->setProcessors($config['processors']) + ->generate($sources, $config['analysis'], $config['validate']); + } + + /** + * Run code in the context of this generator. + * + * @param callable $callable Callable in the form of + * `function(Generator $generator, Analysis $analysis, Context $context): mixed` + * + * @return mixed the result of the `callable` + */ + public function withContext(callable $callable) + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + return $callable($this, $analysis, $rootContext); + } finally { + $this->configStack->pop(); + } + } + + /** + * Generate OpenAPI spec by scanning the given source files. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string - file / directory name + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param null|Analysis $analysis custom analysis instance + * @param bool $validate flag to enable/disable validation of the returned spec + */ + public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): ?OpenApi + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = $analysis ?: new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + $this->scanSources($sources, $analysis, $rootContext); + + // post processing + $analysis->process($this->getProcessors()); + + if ($analysis->openapi) { + $analysis->openapi->openapi = $this->version ?: $analysis->openapi->openapi; + $rootContext->version = $analysis->openapi->openapi; + } + + // validation + if ($validate) { + $analysis->validate(); + } + } finally { + $this->configStack->pop(); + } + + return $analysis->openapi; + } + + protected function scanSources(iterable $sources, Analysis $analysis, Context $rootContext): void + { + $analyser = $this->getAnalyser(); + + foreach ($sources as $source) { + if (is_iterable($source)) { + $this->scanSources($source, $analysis, $rootContext); + } else { + $resolvedSource = $source instanceof \SplFileInfo ? $source->getPathname() : realpath($source); + if (!$resolvedSource) { + $rootContext->logger->warning(sprintf('Skipping invalid source: %s', $source)); + continue; + } + if (is_dir($resolvedSource)) { + $this->scanSources(Util::finder($resolvedSource), $analysis, $rootContext); + } else { + $analysis->addAnalysis($analyser->fromFile($resolvedSource, $rootContext)); + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php b/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php new file mode 100644 index 0000000..94e9406 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php @@ -0,0 +1,95 @@ +debug = $debug; + } + + public function loggedMessageAboveNotice(): bool + { + return $this->loggedMessageAboveNotice; + } + + /** + * @param array $context additional details; supports custom `prefix` and `exception` + */ + public function log($level, $message, array $context = []): void + { + $prefix = ''; + $color = ''; + // level adjustments + switch ($level) { + case LogLevel::DEBUG: + if (!$this->debug) { + return; + } + // no break + case LogLevel::WARNING: + $prefix = $context['prefix'] ?? 'Warning: '; + $color = static::COLOR_WARNING; + break; + case LogLevel::ERROR: + $prefix = $context['prefix'] ?? 'Error: '; + $color = static::COLOR_ERROR; + break; + } + $stop = !empty($color) ? static::COLOR_STOP : ''; + + if (!in_array($level, self::LOG_LEVELS_UP_TO_NOTICE, true)) { + $this->loggedMessageAboveNotice = true; + } + + /** @var ?\Exception $exception */ + $exception = $context['exception'] ?? null; + if ($message instanceof \Exception) { + $exception = $message; + $message = $exception->getMessage(); + } + + $logLine = sprintf('%s%s%s%s', $color, $prefix, $message, $stop); + error_log($logLine); + + if ($this->debug) { + if ($exception) { + error_log($exception->getTraceAsString()); + } elseif (!empty($logLine)) { + $stack = explode(PHP_EOL, (new \Exception())->getTraceAsString()); + // self + array_shift($stack); + // AbstractLogger + array_shift($stack); + foreach ($stack as $line) { + error_log($line); + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php b/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php new file mode 100644 index 0000000..d4118f0 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php @@ -0,0 +1,33 @@ +getMessage(); + } + + if (in_array($level, [LogLevel::NOTICE, LogLevel::INFO])) { + $error_level = E_USER_NOTICE; + } else { + $error_level = E_USER_WARNING; + } + + trigger_error($message, $error_level); + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php b/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php new file mode 100644 index 0000000..2949702 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php @@ -0,0 +1,94 @@ +augmentOperationParameters = $augmentOperationParameters; + } + + public function isAugmentOperationParameters(): bool + { + return $this->augmentOperationParameters; + } + + public function setAugmentOperationParameters(bool $augmentOperationParameters): void + { + $this->augmentOperationParameters = $augmentOperationParameters; + } + + public function __invoke(Analysis $analysis) + { + $this->augmentSharedParameters($analysis); + if ($this->augmentOperationParameters) { + $this->augmentOperationParameters($analysis); + } + } + + /** + * Use the parameter->name as key field (parameter->parameter) when used as reusable component + * (openapi->components->parameters). + */ + protected function augmentSharedParameters(Analysis $analysis) + { + if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) { + $keys = []; + $parametersWithoutKey = []; + foreach ($analysis->openapi->components->parameters as $parameter) { + if (!Generator::isDefault($parameter->parameter)) { + $keys[$parameter->parameter] = $parameter; + } else { + $parametersWithoutKey[] = $parameter; + } + } + foreach ($parametersWithoutKey as $parameter) { + if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) { + $parameter->parameter = $parameter->name; + $keys[$parameter->parameter] = $parameter; + } + } + } + } + + protected function augmentOperationParameters(Analysis $analysis) + { + /** @var Operation[] $operations */ + $operations = $analysis->getAnnotationsOfType(Operation::class); + + foreach ($operations as $operation) { + if (!Generator::isDefault($operation->parameters)) { + $tags = []; + $this->extractContent($operation->_context->comment, $tags); + if (array_key_exists('param', $tags)) { + foreach ($tags['param'] as $name => $details) { + foreach ($operation->parameters as $parameter) { + if ($parameter->name == $name) { + if (Generator::isDefault($parameter->description) && $details['description']) { + $parameter->description = $details['description']; + } + } + } + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php b/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php new file mode 100644 index 0000000..9f3e7fc --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php @@ -0,0 +1,197 @@ +openapi->components) && !Generator::isDefault($analysis->openapi->components->schemas)) { + foreach ($analysis->openapi->components->schemas as $schema) { + if (!Generator::isDefault($schema->schema)) { + $refKey = $this->toRefKey($schema->_context, $schema->_context->class); + $refs[$refKey] = Components::ref($schema); + } + } + } + + /** @var Property[] $properties */ + $properties = $analysis->getAnnotationsOfType(Property::class); + + foreach ($properties as $property) { + $context = $property->_context; + + if (Generator::isDefault($property->property)) { + $property->property = $context->property; + } + + if (!Generator::isDefault($property->ref)) { + continue; + } + + $comment = str_replace("\r\n", "\n", (string) $context->comment); + preg_match('/@var\s+(?[^\s]+)([ \t])?(?.+)?$/im', $comment, $varMatches); + + if (Generator::isDefault($property->type)) { + $this->augmentType($analysis, $property, $context, $refs, $varMatches); + } else { + Util::mapNativeType($property, $property->type); + } + + if (Generator::isDefault($property->description) && isset($varMatches['description'])) { + $property->description = trim($varMatches['description']); + } + if (Generator::isDefault($property->description) && $this->isRoot($property)) { + $property->description = $this->extractContent($context->comment); + } + + if (Generator::isDefault($property->example) && preg_match('/@example\s+([ \t])?(?.+)?$/im', $comment, $varMatches)) { + $property->example = $varMatches['example']; + } + } + } + + protected function toRefKey(Context $context, ?string $name): string + { + $fqn = strtolower($context->fullyQualifiedName($name)); + + return ltrim($fqn, '\\'); + } + + protected function augmentType(Analysis $analysis, Property $property, Context $context, array $refs, array $varMatches): void + { + // docblock typehints + if (isset($varMatches['type'])) { + $allTypes = strtolower(trim($varMatches['type'])); + + if ($this->isNullable($allTypes) && Generator::isDefault($property->nullable)) { + $property->nullable = true; + } + + $allTypes = $this->stripNull($allTypes); + preg_match('/^([^\[]+)(.*$)/', $allTypes, $typeMatches); + $type = $typeMatches[1]; + + // finalise property type/ref + if (!Util::mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $property->ref = $refs[$refKey]; + } + } + + // ok, so we possibly have a type or ref + if (!Generator::isDefault($property->ref) && $typeMatches[2] === '' && $property->nullable) { + $refKey = $this->toRefKey($context, $type); + $property->oneOf = [ + $schema = new Schema([ + 'ref' => $refs[$refKey], + '_context' => $property->_context, + '_aux' => true, + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + $property->nullable = true; + } elseif ($typeMatches[2] === '[]') { + if (Generator::isDefault($property->items)) { + $property->items = $items = new Items( + [ + 'type' => $property->type, + '_context' => new Context(['generated' => true], $context), + '_aux' => true, + ] + ); + $analysis->addAnnotation($items, $items->_context); + if (!Generator::isDefault($property->ref)) { + $property->items->ref = $property->ref; + $property->ref = Generator::UNDEFINED; + } + $property->type = 'array'; + } + } + } + + // native typehints + if ($context->type && !Generator::isDefault($context->type)) { + if ($context->nullable === true) { + $property->nullable = true; + } + $type = strtolower($context->type); + if (!Util::mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $this->applyRef($analysis, $property, $refs[$refKey]); + } else { + if ($typeSchema = $analysis->getSchemaForSource($context->type)) { + if (Generator::isDefault($property->format)) { + $property->ref = Components::ref($typeSchema); + $property->type = Generator::UNDEFINED; + } + } + } + } + } + + if (!Generator::isDefault($property->const) && Generator::isDefault($property->type)) { + if (!Util::mapNativeType($property, gettype($property->const))) { + $property->type = Generator::UNDEFINED; + } + } + } + + protected function isNullable(string $typeDescription): bool + { + return in_array('null', explode('|', strtolower($typeDescription))); + } + + protected function stripNull(string $typeDescription): string + { + if (strpos($typeDescription, '|') === false) { + return $typeDescription; + } + $types = []; + foreach (explode('|', $typeDescription) as $type) { + if (strtolower($type) === 'null') { + continue; + } + $types[] = $type; + } + + return implode('|', $types); + } + + protected function applyRef(Analysis $analysis, Property $property, string $ref): void + { + if ($property->nullable === true) { + $property->oneOf = [ + $schema = new Schema([ + 'ref' => $ref, + '_context' => $property->_context, + '_aux' => true, + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + } else { + $property->ref = $ref; + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php b/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php new file mode 100644 index 0000000..adfb898 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php @@ -0,0 +1,50 @@ +getAnnotationsOfType(Schema::class); + + // ref rewriting + $updatedRefs = []; + foreach ($schemas as $schema) { + if ($schema->allOf!== Generator::UNDEFINED) { + // do we have to keep track of properties refs that need updating? + foreach ($schema->allOf as $ii => $allOfSchema) { + if ($allOfSchema->properties!== Generator::UNDEFINED) { + $updatedRefs[Components::ref($schema->schema . '/properties', false)] = Components::ref($schema->schema . '/allOf/' . $ii . '/properties', false); + break; + } + } + } + } + + if ($updatedRefs) { + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && $annotation->ref !== Generator::UNDEFINED && $annotation->ref !== null) { + foreach ($updatedRefs as $origRef => $updatedRef) { + if (0 === strpos($annotation->ref, $origRef)) { + $annotation->ref = str_replace($origRef, $updatedRef, $annotation->ref); + } + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php b/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php new file mode 100644 index 0000000..0e1186c --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php @@ -0,0 +1,137 @@ +getAnnotationsOfType(Schema::class); + + // Use the class names for @OA\Schema() + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->schema)) { + if ($schema->_context->is('class')) { + $schema->schema = $schema->_context->class; + } elseif ($schema->_context->is('interface')) { + $schema->schema = $schema->_context->interface; + } elseif ($schema->_context->is('trait')) { + $schema->schema = $schema->_context->trait; + } elseif ($schema->_context->is('enum')) { + $schema->schema = $schema->_context->enum; + } + } + } + + // Merge unmerged @OA\Property annotations into the @OA\Schema of the class + $unmergedProperties = $analysis->unmerged()->getAnnotationsOfType(Property::class); + foreach ($unmergedProperties as $property) { + if ($property->_context->nested) { + continue; + } + + $schemaContext = $property->_context->with('class') + ?: $property->_context->with('interface') + ?: $property->_context->with('trait') + ?: $property->_context->with('enum'); + if ($schemaContext->annotations) { + foreach ($schemaContext->annotations as $annotation) { + if ($annotation instanceof Schema) { + if ($annotation->_context->nested) { + // we shouldn't merge property into nested schemas + continue; + } + + if (!Generator::isDefault($annotation->allOf)) { + $schema = null; + foreach ($annotation->allOf as $nestedSchema) { + if (!Generator::isDefault($nestedSchema->ref)) { + continue; + } + + $schema = $nestedSchema; + } + + if ($schema === null) { + $schema = new Schema([ + '_context' => $annotation->_context, + '_aux' => true, + ]); + $analysis->addAnnotation($schema, $schema->_context); + $annotation->allOf[] = $schema; + } + + $schema->merge([$property], true); + break; + } + + $annotation->merge([$property], true); + break; + } + } + } + } + + // set schema type based on various properties + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->type)) { + if (is_array($schema->properties) && count($schema->properties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->additionalProperties) && count($schema->additionalProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->patternProperties) && count($schema->patternProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->propertyNames) && count($schema->propertyNames) > 0) { + $schema->type = 'object'; + } + } else { + if ($typeSchema = $analysis->getSchemaForSource($schema->type)) { + if (Generator::isDefault($schema->format)) { + $schema->ref = Components::ref($typeSchema); + $schema->type = Generator::UNDEFINED; + } + } + } + } + + // move schema properties into allOf if both exist + foreach ($schemas as $schema) { + if (!Generator::isDefault($schema->properties) && !Generator::isDefault($schema->allOf)) { + $allOfPropertiesSchema = null; + foreach ($schema->allOf as $allOfSchema) { + if (!Generator::isDefault($allOfSchema->properties)) { + $allOfPropertiesSchema = $allOfSchema; + break; + } + } + if (!$allOfPropertiesSchema) { + $allOfPropertiesSchema = new Schema([ + 'properties' => [], + '_context' => $schema->_context, + '_aux' => true, + ]); + $analysis->addAnnotation($allOfPropertiesSchema, $allOfPropertiesSchema->_context); + $schema->allOf[] = $allOfPropertiesSchema; + } + $allOfPropertiesSchema->properties = array_merge($allOfPropertiesSchema->properties, $schema->properties); + $schema->properties = Generator::UNDEFINED; + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/BuildPaths.php b/vendor/zircote/swagger-php/src/Processors/BuildPaths.php new file mode 100644 index 0000000..4688b96 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/BuildPaths.php @@ -0,0 +1,62 @@ +paths using the detected `@OA\PathItem` and `@OA\Operation` (`@OA\Get`, `@OA\Post`, etc). + */ +class BuildPaths +{ + public function __invoke(Analysis $analysis) + { + $paths = []; + // Merge @OA\PathItems with the same path. + if (!Generator::isDefault($analysis->openapi->paths)) { + foreach ($analysis->openapi->paths as $annotation) { + if (empty($annotation->path)) { + $annotation->_context->logger->warning($annotation->identity() . ' is missing required property "path" in ' . $annotation->_context); + } elseif (isset($paths[$annotation->path])) { + $paths[$annotation->path]->mergeProperties($annotation); + $analysis->annotations->detach($annotation); + } else { + $paths[$annotation->path] = $annotation; + } + } + } + + /** @var Operation[] $operations */ + $operations = $analysis->unmerged()->getAnnotationsOfType(Operation::class); + + // Merge @OA\Operations into existing @OA\PathItems or create a new one. + foreach ($operations as $operation) { + if ($operation->path) { + if (empty($paths[$operation->path])) { + $paths[$operation->path] = $pathItem = new PathItem( + [ + 'path' => $operation->path, + '_context' => new Context(['generated' => true], $operation->_context), + '_aux' => true, + ] + ); + $analysis->addAnnotation($pathItem, $pathItem->_context); + } + if ($paths[$operation->path]->merge([$operation])) { + $operation->_context->logger->warning('Unable to merge ' . $operation->identity() . ' in ' . $operation->_context); + } + } + } + if ($paths) { + $analysis->openapi->paths = array_values($paths); + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php b/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php new file mode 100644 index 0000000..20c12a6 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php @@ -0,0 +1,35 @@ +split(); + $merged = $split->merged->annotations; + $unmerged = $split->unmerged->annotations; + + /** @var AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, '_unmerged')) { + foreach ($annotation->_unmerged as $i => $item) { + if ($merged->contains($item)) { + unset($annotation->_unmerged[$i]); // Property was merged + } + } + } + } + $analysis->openapi->_unmerged = []; + foreach ($unmerged as $annotation) { + $analysis->openapi->_unmerged[] = $annotation; + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php b/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php new file mode 100644 index 0000000..adadf1b --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php @@ -0,0 +1,110 @@ +openapi->components)) { + return; + } + + // allow multiple runs to catch nested dependencies + for ($ii = 0; $ii < 10; ++$ii) { + if (!$this->cleanup($analysis)) { + break; + } + } + } + + protected function cleanup(Analysis $analysis): bool + { + $usedRefs = []; + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && !Generator::isDefault($annotation->ref) && $annotation->ref !== null) { + $usedRefs[$annotation->ref] = $annotation->ref; + } + foreach (['allOf', 'anyOf', 'oneOff'] as $sub) { + if (property_exists($annotation, $sub) && !Generator::isDefault($annotation->{$sub})) { + foreach ($annotation->{$sub} as $subElem) { + if (is_object($subElem) && property_exists($subElem, 'ref') && !Generator::isDefault($subElem->ref) && $subElem->ref !== null) { + $usedRefs[$subElem->ref] = $subElem->ref; + } + } + } + } + if ($annotation instanceof OpenApi || $annotation instanceof Operation) { + if (!Generator::isDefault($annotation->security)) { + foreach ($annotation->security as $security) { + foreach (array_keys($security) as $securityName) { + $ref = Components::COMPONENTS_PREFIX . 'securitySchemes/' . $securityName; + $usedRefs[$ref] = $ref; + } + } + } + } + } + + $unusedRefs = []; + foreach (Components::$_nested as $nested) { + if (2 == count($nested)) { + // $nested[1] is the name of the property that holds the component name + [$componentType, $nameProperty] = $nested; + if (!Generator::isDefault($analysis->openapi->components->{$componentType})) { + foreach ($analysis->openapi->components->{$componentType} as $component) { + $ref = Components::ref($component); + if (!in_array($ref, $usedRefs)) { + $unusedRefs[$ref] = [$ref, $nameProperty]; + } + } + } + } + } + + $detachNested = function (Analysis $analysis, AbstractAnnotation $annotation, callable $detachNested): void { + foreach ($annotation::$_nested as $nested) { + $nestedKey = ((array) $nested)[0]; + if (!Generator::isDefault($annotation->{$nestedKey})) { + if (is_array($annotation->{$nestedKey})) { + foreach ($annotation->{$nestedKey} as $elem) { + if ($elem instanceof AbstractAnnotation) { + $detachNested($analysis, $elem, $detachNested); + } + } + } elseif ($annotation->{$nestedKey} instanceof AbstractAnnotation) { + $analysis->annotations->detach($annotation->{$nestedKey}); + } + } + } + $analysis->annotations->detach($annotation); + }; + + // remove unused + foreach ($unusedRefs as $refDetails) { + [$ref, $nameProperty] = $refDetails; + [$hash, $components, $componentType, $name] = explode('/', $ref); + foreach ($analysis->openapi->components->{$componentType} as $ii => $component) { + if ($component->{$nameProperty} == $name) { + $annotation = $analysis->openapi->components->{$componentType}[$ii]; + $detachNested($analysis, $annotation, $detachNested); + unset($analysis->openapi->components->{$componentType}[$ii]); + } + } + } + + return 0 != count($unusedRefs); + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php b/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php new file mode 100644 index 0000000..7f4f845 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php @@ -0,0 +1,104 @@ +annotations as $annotation) { + if (property_exists($annotation, '_context') === false) { + // only annotations with context + continue; + } + + if (!$this->isRoot($annotation)) { + // only top-level annotations + continue; + } + + $hasSummary = property_exists($annotation, 'summary'); + $hasDescription = property_exists($annotation, 'description'); + if (!$hasSummary && !$hasDescription) { + continue; + } + + if ($hasSummary && $hasDescription) { + $this->summaryAndDescription($annotation); + } elseif ($hasDescription) { + $this->description($annotation); + } + } + } + + /** + * @param Operation|Property|Parameter|Schema $annotation + */ + protected function description(AbstractAnnotation $annotation): void + { + if (!Generator::isDefault($annotation->description)) { + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + } + + return; + } + + $annotation->description = $this->extractContent($annotation->_context->comment); + } + + /** + * @param Operation|Property|Parameter|Schema $annotation + */ + protected function summaryAndDescription(AbstractAnnotation $annotation): void + { + $ignoreSummary = !Generator::isDefault($annotation->summary); + $ignoreDescription = !Generator::isDefault($annotation->description); + if ($annotation->summary === null) { + $ignoreSummary = true; + $annotation->summary = Generator::UNDEFINED; + } + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + $ignoreDescription = true; + } + if ($ignoreSummary && $ignoreDescription) { + return; + } + if ($ignoreSummary) { + $annotation->description = $this->extractContent($annotation->_context->comment); + } elseif ($ignoreDescription) { + $annotation->summary = $this->extractContent($annotation->_context->comment); + } else { + $annotation->summary = $this->extractSummary($annotation->_context->comment); + $annotation->description = $this->extractDescription($annotation->_context->comment); + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php b/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php new file mode 100644 index 0000000..650b024 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php @@ -0,0 +1,170 @@ +_context) { + return true; + } + + if (1 == count($annotation->_context->annotations)) { + return true; + } + + // find best match + $matchPriorityMap = [ + Operation::class => false, + Property::class => false, + Parameter::class => false, + AnnotationSchema::class => true, + AttributeSchema::class => true, + ]; + foreach ($matchPriorityMap as $className => $strict) { + foreach ($annotation->_context->annotations as $contextAnnotation) { + if ($strict) { + if ($className == get_class($contextAnnotation)) { + return $annotation === $contextAnnotation; + } + } else { + if ($contextAnnotation instanceof $className) { + return $annotation === $contextAnnotation; + } + } + } + } + + return false; + } + + protected function handleTag(string $line, ?array &$tags = null): void + { + if (null === $tags) { + return; + } + + // split of tag name + $token = preg_split("@[\s+ ]@u", $line, 2); + if (2 == count($token)) { + $tag = substr($token[0], 1); + $tail = $token[1]; + if (!array_key_exists($tag, $tags)) { + $tags[$tag] = []; + } + + if (false !== ($dpos = strpos($tail, '$'))) { + $type = trim(substr($tail, 0, $dpos)); + $token = preg_split("@[\s+ ]@u", substr($tail, $dpos), 2); + $name = trim(substr($token[0], 1)); + $description = 2 == count($token) ? trim($token[1]) : null; + + $tags[$tag][$name] = [ + 'type' => $type, + 'description' => $description, + ]; + } + } + } + + /** + * The text contents of the phpdoc comment (excl. tags). + */ + public function extractContent(?string $docblock, ?array &$tags = null): string + { + if (Generator::isDefault($docblock)) { + return Generator::UNDEFINED; + } + + $comment = preg_split('/(\n|\r\n)/', (string) $docblock); + $comment[0] = preg_replace('/[ \t]*\\/\*\*/', '', $comment[0]); // strip '/**' + $i = count($comment) - 1; + $comment[$i] = preg_replace('/\*\/[ \t]*$/', '', $comment[$i]); // strip '*/' + $lines = []; + $append = false; + $skip = false; + foreach ($comment as $line) { + $line = ltrim($line, "\t *"); + if (substr($line, 0, 1) === '@') { + $this->handleTag($line, $tags); + $skip = true; + } + if ($skip) { + continue; + } + if ($append) { + $i = count($lines) - 1; + $lines[$i] = substr($lines[$i], 0, -1) . $line; + } else { + $lines[] = $line; + } + $append = (substr($line, -1) === '\\'); + } + $description = trim(implode("\n", $lines)); + if ($description === '') { + return Generator::UNDEFINED; + } + + return $description; + } + + /** + * A short piece of text, usually one line, providing the basic function of the associated element. + */ + public function extractSummary(?string $docblock): string + { + if (!$content = $this->extractContent($docblock)) { + return Generator::UNDEFINED; + } + $lines = preg_split('/(\n|\r\n)/', $content); + $summary = ''; + foreach ($lines as $line) { + $summary .= $line . "\n"; + if ($line === '' || substr($line, -1) === '.') { + return trim($summary); + } + } + $summary = trim($summary); + if ($summary === '') { + return Generator::UNDEFINED; + } + + return $summary; + } + + /** + * An optional longer piece of text providing more details on the associated element’s function. + * + * This is very useful when working with a complex element. + */ + public function extractDescription(?string $docblock): string + { + $summary = $this->extractSummary($docblock); + if (!$summary) { + return Generator::UNDEFINED; + } + + $description = ''; + if (false !== ($substr = substr($this->extractContent($docblock), strlen($summary)))) { + $description = trim($substr); + } + + return $description ?: Generator::UNDEFINED; + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php b/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php new file mode 100644 index 0000000..7e729de --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php @@ -0,0 +1,49 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); + $existing = []; + foreach ($ancestors as $ancestor) { + $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); + if ($ancestorSchema) { + $refPath = !Generator::isDefault($ancestorSchema->schema) ? $ancestorSchema->schema : $ancestor['class']; + $this->inheritFrom($analysis, $schema, $ancestorSchema, $refPath, $ancestor['context']); + + // one ancestor is enough + break; + } else { + $this->mergeAnnotations($schema, $ancestor, $existing); + $this->mergeMethods($schema, $ancestor, $existing); + $this->mergeProperties($schema, $ancestor, $existing); + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php b/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php new file mode 100644 index 0000000..e7cf895 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php @@ -0,0 +1,57 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('enum')) { + $source = $schema->_context->enum; + $re = new \ReflectionEnum($schema->_context->fullyQualifiedName($source)); + $schema->schema = !Generator::isDefault($schema->schema) ? $schema->schema : $re->getShortName(); + $type = 'string'; + $schemaType = 'string'; + if ($re->isBacked() && ($backingType = $re->getBackingType()) && method_exists($backingType, 'getName')) { + if (Generator::isDefault($schema->type)) { + $type = $backingType->getName(); + } else { + $type = $schema->type; + $schemaType = $schema->type; + } + } + $schema->enum = array_map(function ($case) use ($re, $schemaType, $type) { + if ($re->isBacked() && $type === $schemaType) { + return $case->getBackingValue(); + } + + return $case->name; + }, $re->getCases()); + Util::mapNativeType($schema, $type); + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php b/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php new file mode 100644 index 0000000..0c78f8d --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php @@ -0,0 +1,57 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $className = $schema->_context->fullyQualifiedName($schema->_context->class); + $interfaces = $analysis->getInterfacesOfClass($className, true); + + if (class_exists($className) && ($parent = get_parent_class($className)) && ($inherited = array_keys(class_implements($parent)))) { + // strip interfaces we inherit from ancestor + foreach (array_keys($interfaces) as $interface) { + if (in_array(ltrim($interface, '\\'), $inherited)) { + unset($interfaces[$interface]); + } + } + } + + $existing = []; + foreach ($interfaces as $interface) { + $interfaceName = $interface['context']->fullyQualifiedName($interface['interface']); + $interfaceSchema = $analysis->getSchemaForSource($interfaceName); + if ($interfaceSchema) { + $refPath = !Generator::isDefault($interfaceSchema->schema) ? $interfaceSchema->schema : $interface['interface']; + $this->inheritFrom($analysis, $schema, $interfaceSchema, $refPath, $interface['context']); + } else { + $this->mergeAnnotations($schema, $interface, $existing); + $this->mergeMethods($schema, $interface, $existing); + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php b/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php new file mode 100644 index 0000000..952ef0b --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php @@ -0,0 +1,49 @@ +getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class') || $schema->_context->is('trait')) { + $source = $schema->_context->class ?: $schema->_context->trait; + $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($source), true); + $existing = []; + foreach ($traits as $trait) { + $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); + if ($traitSchema) { + $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; + $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); + } else { + if ($schema->_context->is('class')) { + $this->mergeAnnotations($schema, $trait, $existing); + $this->mergeMethods($schema, $trait, $existing); + $this->mergeProperties($schema, $trait, $existing); + } + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php b/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php new file mode 100644 index 0000000..e84e9bf --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php @@ -0,0 +1,34 @@ +openapi->components; + if (Generator::isDefault($components)) { + $components = new Components(['_context' => new Context(['generated' => true], $analysis->context)]); + } + + foreach ($analysis->annotations as $annotation) { + if (Components::matchNested(get_class($annotation)) && $annotation->_context->is('nested') === false) { + // A top level annotation. + $components->merge([$annotation], true); + $analysis->openapi->components = $components; + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php b/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php new file mode 100644 index 0000000..a0d2279 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php @@ -0,0 +1,56 @@ +openapi) { + $context = new Context([], $analysis->context); + $analysis->addAnnotation(new OpenApi(['_context' => $context]), $context); + } + $openapi = $analysis->openapi; + $openapi->_analysis = $analysis; + + // Merge annotations into the target openapi + $merge = []; + /** @var AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if ($annotation === $openapi) { + continue; + } + if ($annotation instanceof OpenApi) { + $paths = $annotation->paths; + unset($annotation->paths); + $openapi->mergeProperties($annotation); + if (!Generator::isDefault($paths)) { + foreach ($paths as $path) { + if (Generator::isDefault($openapi->paths)) { + $openapi->paths = []; + } + $openapi->paths[] = $path; + } + } + } elseif (OpenApi::matchNested(get_class($annotation)) && property_exists($annotation, '_context') && $annotation->_context->is('nested') === false) { + // A top level annotation. + $merge[] = $annotation; + } + } + $openapi->merge($merge, true); + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php b/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php new file mode 100644 index 0000000..bf87bae --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php @@ -0,0 +1,61 @@ +getAnnotationsOfType(JsonContent::class); + + foreach ($annotations as $jsonContent) { + $parent = $jsonContent->_context->nested; + if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { + if ($parent) { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/json'] = $mediaType = new MediaType([ + 'schema' => $jsonContent, + 'example' => $jsonContent->example, + 'examples' => $jsonContent->examples, + '_context' => new Context(['generated' => true], $jsonContent->_context), + '_aux' => true, + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof Parameter) { + $parent->content['application/json']->mediaType = 'application/json'; + } + $jsonContent->example = Generator::UNDEFINED; + $jsonContent->examples = Generator::UNDEFINED; + + $index = array_search($jsonContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeTrait.php b/vendor/zircote/swagger-php/src/Processors/MergeTrait.php new file mode 100644 index 0000000..43eca14 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/MergeTrait.php @@ -0,0 +1,80 @@ + update all $ref that might reference a property merged. + */ +trait MergeTrait +{ + protected function inheritFrom(Analysis $analysis, Schema $schema, Schema $from, string $refPath, Context $context): void + { + if (Generator::isDefault($schema->allOf)) { + $schema->allOf = []; + } + // merging other properties into allOf is done in the AugmentSchemas processor + $schema->allOf[] = $refSchema = new Schema([ + 'ref' => Components::ref($refPath), + '_context' => $context, + '_aux' => true, + ]); + $analysis->addAnnotation($refSchema, $refSchema->_context); + } + + protected function mergeAnnotations(Schema $schema, array $from, array &$existing): void + { + if (is_iterable($from['context']->annotations)) { + foreach ($from['context']->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + + protected function mergeProperties(Schema $schema, array $from, array &$existing): void + { + foreach ($from['properties'] as $method) { + if (is_iterable($method->annotations)) { + foreach ($method->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } + + protected function mergeMethods(Schema $schema, array $from, array &$existing): void + { + foreach ($from['methods'] as $method) { + if (is_iterable($method->annotations)) { + foreach ($method->annotations as $annotation) { + if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php b/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php new file mode 100644 index 0000000..127b591 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php @@ -0,0 +1,61 @@ +getAnnotationsOfType(XmlContent::class); + + foreach ($annotations as $xmlContent) { + $parent = $xmlContent->_context->nested; + if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { + if ($parent) { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/xml'] = $mediaType = new MediaType([ + 'schema' => $xmlContent, + 'example' => $xmlContent->example, + 'examples' => $xmlContent->examples, + '_context' => new Context(['generated' => true], $xmlContent->_context), + '_aux' => true, + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof Parameter) { + $parent->content['application/xml']->mediaType = 'application/xml'; + } + $xmlContent->example = Generator::UNDEFINED; + $xmlContent->examples = Generator::UNDEFINED; + + $index = array_search($xmlContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Processors/OperationId.php b/vendor/zircote/swagger-php/src/Processors/OperationId.php new file mode 100644 index 0000000..e2e6924 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Processors/OperationId.php @@ -0,0 +1,72 @@ +hash = $hash; + } + + public function isHash(): bool + { + return $this->hash; + } + + public function setHash(bool $hash): OperationId + { + $this->hash = $hash; + + return $this; + } + + public function __invoke(Analysis $analysis) + { + $allOperations = $analysis->getAnnotationsOfType(Operation::class); + + /** @var Operation $operation */ + foreach ($allOperations as $operation) { + if (null === $operation->operationId) { + $operation->operationId = Generator::UNDEFINED; + } + + if (!Generator::isDefault($operation->operationId)) { + continue; + } + + $context = $operation->_context; + if ($context && $context->method) { + $source = $context->class ?? $context->interface ?? $context->trait; + $operationId = null; + if ($source) { + if ($context->namespace) { + $operationId = $context->namespace . '\\' . $source . '::' . $context->method; + } else { + $operationId = $source . '::' . $context->method; + } + } else { + $operationId = $context->method; + } + $operationId = strtoupper($operation->method) . '::' . $operation->path . '::' . $operationId; + $operation->operationId = $this->hash ? md5($operationId) : $operationId; + } + } + } +} diff --git a/vendor/zircote/swagger-php/src/Serializer.php b/vendor/zircote/swagger-php/src/Serializer.php new file mode 100644 index 0000000..003ad62 --- /dev/null +++ b/vendor/zircote/swagger-php/src/Serializer.php @@ -0,0 +1,205 @@ +isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not defined in OpenApi PHP Annotations'); + } + + return $this->doDeserialize(json_decode($jsonString), $className, new Context(['generated' => true])); + } + + /** + * Deserialize a file. + */ + public function deserializeFile(string $filename, string $format = 'json', string $className = OA\OpenApi::class): OA\AbstractAnnotation + { + if (!$this->isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not a valid OpenApi PHP Annotations'); + } + + $contents = file_get_contents($filename); + + $ext = pathinfo($filename, PATHINFO_EXTENSION); + if ('yaml' == $format || in_array($ext, ['yml', 'yaml'])) { + $contents = json_encode(Yaml::parse($contents)); + } + + return $this->doDeserialize(json_decode($contents), $className, new Context(['generated' => true])); + } + + /** + * Do deserialization. + */ + protected function doDeserialize(\stdClass $c, string $class, Context $context): OA\AbstractAnnotation + { + $annotation = new $class(['_context' => $context]); + foreach ((array) $c as $property => $value) { + if ($property === '$ref') { + $property = 'ref'; + } + + if (substr($property, 0, 2) === 'x-') { + if (Generator::isDefault($annotation->x)) { + $annotation->x = []; + } + $custom = substr($property, 2); + $annotation->x[$custom] = $value; + } else { + $annotation->$property = $this->doDeserializeProperty($annotation, $property, $value, $context); + } + } + + if ($annotation instanceof OA\OpenApi) { + $context->root()->version = $annotation->openapi; + } + + return $annotation; + } + + /** + * Deserialize the annotation's property. + */ + protected function doDeserializeProperty(OA\AbstractAnnotation $annotation, string $property, $value, Context $context) + { + // property is primitive type + if (array_key_exists($property, $annotation::$_types)) { + return $this->doDeserializeBaseProperty($annotation::$_types[$property], $value, $context); + } + + // property is embedded annotation + // note: this does not support custom nested annotation classes + foreach ($annotation::$_nested as $nestedClass => $declaration) { + // property is an annotation + if (is_string($declaration) && $declaration === $property) { + if (is_object($value)) { + return $this->doDeserialize($value, $nestedClass, $context); + } else { + return $value; + } + } + + // property is an annotation array + if (is_array($declaration) && count($declaration) === 1 && $declaration[0] === $property) { + $annotationArr = []; + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $nestedClass, $context); + } + + return $annotationArr; + } + + // property is an annotation hash map + if (is_array($declaration) && count($declaration) === 2 && $declaration[0] === $property) { + $key = $declaration[1]; + $annotationHash = []; + foreach ($value as $k => $v) { + $annotation = $this->doDeserialize($v, $nestedClass, $context); + $annotation->$key = $k; + $annotationHash[$k] = $annotation; + } + + return $annotationHash; + } + } + + return $value; + } + + /** + * Deserialize base annotation property. + * + * @param array|string $type The property type + * @param mixed $value The value to deserialization + * + * @return array|OA\AbstractAnnotation + */ + protected function doDeserializeBaseProperty($type, $value, Context $context) + { + $isAnnotationClass = is_string($type) && is_subclass_of(trim($type, '[]'), OA\AbstractAnnotation::class); + + if ($isAnnotationClass) { + $isArray = strpos($type, '[') === 0 && substr($type, -1) === ']'; + + if ($isArray) { + $annotationArr = []; + $class = trim($type, '[]'); + + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $class, $context); + } + + return $annotationArr; + } + + return $this->doDeserialize($value, $type, $context); + } + + return $value; + } +} diff --git a/vendor/zircote/swagger-php/src/Util.php b/vendor/zircote/swagger-php/src/Util.php new file mode 100644 index 0000000..085abac --- /dev/null +++ b/vendor/zircote/swagger-php/src/Util.php @@ -0,0 +1,197 @@ + 'array', + 'byte' => ['string', 'byte'], + 'boolean' => 'boolean', + 'bool' => 'boolean', + 'int' => 'integer', + 'integer' => 'integer', + 'long' => ['integer', 'long'], + 'float' => ['number', 'float'], + 'double' => ['number', 'double'], + 'string' => 'string', + 'date' => ['string', 'date'], + 'datetime' => ['string', 'date-time'], + '\\datetime' => ['string', 'date-time'], + 'datetimeimmutable' => ['string', 'date-time'], + '\\datetimeimmutable' => ['string', 'date-time'], + 'datetimeinterface' => ['string', 'date-time'], + '\\datetimeinterface' => ['string', 'date-time'], + 'number' => 'number', + 'object' => 'object', + ]; + + public static function mapNativeType(Schema $schema, string $type): bool + { + if (!array_key_exists($type, self::$NATIVE_TYPE_MAP)) { + return false; + } + + $type = self::$NATIVE_TYPE_MAP[$type]; + if (is_array($type)) { + if (Generator::isDefault($schema->format)) { + $schema->format = $type[1]; + } + $type = $type[0]; + } + + $schema->type = $type; + + return true; + } + + /** + * Turns the given $fullPath into a relative path based on $basePaths, which can either + * be a single string path, or a list of possible paths. If a list is given, the first + * matching basePath in the list will be used to compute the relative path. If no + * relative path could be computed, the original string will be returned because there + * is always a chance it was a valid relative path to begin with. + * + * It should be noted that these are "relative paths" primarily in Finder's sense of them, + * and conform specifically to what is expected by functions like `exclude()` and `notPath()`. + * In particular, leading and trailing slashes are removed. + * + * @param array|string $basePaths + */ + public static function getRelativePath(string $fullPath, $basePaths): string + { + $relativePath = null; + if (is_string($basePaths)) { // just a single path, not an array of possible paths + $relativePath = self::removePrefix($fullPath, $basePaths); + } else { // an array of paths + foreach ($basePaths as $basePath) { + $relativePath = self::removePrefix($fullPath, $basePath); + if (!empty($relativePath)) { + break; + } + } + } + + return !empty($relativePath) ? trim($relativePath, '/') : $fullPath; + } + + /** + * Removes a prefix from the start of a string if it exists, or null otherwise. + */ + private static function removePrefix(string $str, string $prefix): ?string + { + if (substr($str, 0, strlen($prefix)) == $prefix) { + return substr($str, strlen($prefix)); + } + + return null; + } + + /** + * Build a Symfony Finder object that scans the given $directory. + * + * @param array|Finder|string $directory The directory(s) or filename(s) + * @param null|array|string $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) + * @param null|string $pattern The pattern of the files to scan + * + * @throws InvalidArgumentException + */ + public static function finder($directory, $exclude = null, $pattern = null): Finder + { + if ($directory instanceof Finder) { + // Make sure that the provided Finder only finds files and follows symbolic links. + return $directory->files()->followLinks(); + } else { + $finder = new Finder(); + $finder->sortByName(); + } + if ($pattern === null) { + $pattern = '*.php'; + } + + $finder->files()->followLinks()->name($pattern); + if (is_string($directory)) { + if (is_file($directory)) { // Scan a single file? + $finder->append([$directory]); + } else { // Scan a directory + $finder->in($directory); + } + } elseif (is_array($directory)) { + foreach ($directory as $path) { + if (is_file($path)) { // Scan a file? + $finder->append([$path]); + } else { + $finder->in($path); + } + } + } else { + throw new InvalidArgumentException('Unexpected $directory value:' . gettype($directory)); + } + if ($exclude !== null) { + if (is_string($exclude)) { + $finder->notPath(Util::getRelativePath($exclude, $directory)); + } elseif (is_array($exclude)) { + foreach ($exclude as $path) { + $finder->notPath(Util::getRelativePath($path, $directory)); + } + } else { + throw new InvalidArgumentException('Unexpected $exclude value:' . gettype($exclude)); + } + } + + return $finder; + } + + /** + * Escapes the special characters "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refEncode(string $raw): string + { + return str_replace('/', '~1', str_replace('~', '~0', $raw)); + } + + /** + * Converted the escaped characters "~1" and "~" back to "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refDecode(string $encoded): string + { + return str_replace('~1', '/', str_replace('~0', '~', $encoded)); + } + + /** + * Shorten class name(s). + * + * @param array|object|string $classes Class(es) to shorten + * + * @return string|string[] One or more shortened class names + */ + public static function shorten($classes) + { + $short = []; + foreach ((array) $classes as $class) { + $short[] = '@' . str_replace([ + 'OpenApi\\Annotations\\', + 'OpenApi\\Attributes\\', + ], 'OA\\', $class); + } + + return is_array($classes) ? $short : array_pop($short); + } +} From 87a585cae94195901367d79a7c70911b6b5b3e79 Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Thu, 22 Sep 2022 12:34:01 +0100 Subject: [PATCH 2/6] Update README.md Added pecl installation guide --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e86740..1fd2a50 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,8 @@ This quickstart aims to help get PHP developers up and running with the PassKit You will need the following: - PHP 7.0 or higher [Installation Guide](https://grpc.io/docs/languages/php/quickstart/) -- PECL +- PEAR [Installation Guide](https://pear.php.net/manual/en/installation.php) +- PECL [Mac Installation Guide](https://blackdeerdev.com/install-pecl-pear-on-mac-osx/), [Windows Installation Guide](https://wiki.php.net/internals/windows/stepbystepbuild#building_pecl_extensions) - Composer [Download Here](https://getcomposer.org/) ([Installation Guide](https://getcomposer.org/download/) ) - A PassKit account (signup for free at [PassKit](https://app.passkit.com)) - Your PassKit SDK Credentials (available from the [Developer Tools Page](https://app.passkit.com/app/account/developer-tools)) From 393c9bb5e206da935b2f9ef3a61874de8120c1bd Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Thu, 29 Dec 2022 13:53:34 +0000 Subject: [PATCH 3/6] Updates to quickstart Added updates to the readMe, updated outputs to user on successful methods. Added updated sdk version --- .gitignore | 2 + README.md | 34 +- composer.json | 14 +- coupons/count-coupons.php | 20 +- coupons/create-campaign.php | 6 +- coupons/create-coupon.php | 12 +- coupons/create-offer.php | 31 +- coupons/delete-campaign.php | 5 +- coupons/get-single-coupon.php | 8 +- coupons/list-coupons.php | 7 +- coupons/redeem-coupon.php | 7 +- coupons/update-coupon.php | 7 +- coupons/void-coupon.php | 9 +- flights/create-airport.php | 6 +- flights/create-boarding-pass.php | 2 - flights/create-carrier.php | 4 +- flights/create-flight-designator.php | 4 +- flights/create-flight.php | 4 +- flights/create-template.php | 3 +- flights/delete-airport.php | 4 +- flights/delete-carrier.php | 4 +- flights/delete-flight-designator.php | 4 +- flights/delete-flight.php | 4 +- membership/burn-points.php | 8 +- membership/create-program.php | 4 +- membership/create-tier.php | 23 +- membership/delete-member.php | 5 +- membership/earn-points.php | 8 +- membership/enrol-member.php | 9 +- membership/list-members.php | 6 +- membership/set-points.php | 12 +- membership/update-member.php | 10 +- vendor/bin/openapi | 117 -- vendor/bin/yaml-lint | 117 -- vendor/composer/autoload_files.php | 10 - vendor/composer/autoload_psr4.php | 13 +- vendor/composer/autoload_real.php | 19 - vendor/composer/autoload_static.php | 69 +- vendor/composer/installed.json | 674 +------ vendor/composer/installed.php | 93 +- vendor/composer/platform_check.php | 4 +- vendor/doctrine/annotations/LICENSE | 19 - vendor/doctrine/annotations/README.md | 18 - vendor/doctrine/annotations/composer.json | 44 - .../annotations/docs/en/annotations.rst | 252 --- .../doctrine/annotations/docs/en/custom.rst | 443 ----- vendor/doctrine/annotations/docs/en/index.rst | 101 - .../doctrine/annotations/docs/en/sidebar.rst | 6 - .../Common/Annotations/Annotation.php | 59 - .../Annotations/Annotation/Attribute.php | 21 - .../Annotations/Annotation/Attributes.php | 15 - .../Common/Annotations/Annotation/Enum.php | 69 - .../Annotation/IgnoreAnnotation.php | 43 - .../Annotation/NamedArgumentConstructor.php | 13 - .../Annotations/Annotation/Required.php | 13 - .../Common/Annotations/Annotation/Target.php | 101 - .../Annotations/AnnotationException.php | 171 -- .../Common/Annotations/AnnotationReader.php | 389 ---- .../Common/Annotations/AnnotationRegistry.php | 190 -- .../Common/Annotations/CachedReader.php | 268 --- .../Doctrine/Common/Annotations/DocLexer.php | 129 -- .../Doctrine/Common/Annotations/DocParser.php | 1459 --------------- .../Common/Annotations/FileCacheReader.php | 315 ---- .../ImplicitlyIgnoredAnnotationNames.php | 177 -- .../Common/Annotations/IndexedReader.php | 100 - .../NamedArgumentConstructorAnnotation.php | 14 - .../Doctrine/Common/Annotations/PhpParser.php | 92 - .../Common/Annotations/PsrCachedReader.php | 232 --- .../Doctrine/Common/Annotations/Reader.php | 80 - .../Annotations/SimpleAnnotationReader.php | 114 -- .../Common/Annotations/TokenParser.php | 208 --- vendor/doctrine/lexer/LICENSE | 19 - vendor/doctrine/lexer/README.md | 9 - vendor/doctrine/lexer/composer.json | 41 - .../Doctrine/Common/Lexer/AbstractLexer.php | 337 ---- vendor/doctrine/lexer/psalm.xml | 15 - .../src/Google/Protobuf/FieldDescriptor.php | 35 +- .../Google/Protobuf/Internal/Descriptor.php | 16 +- .../Protobuf/Internal/DescriptorPool.php | 1 + .../Protobuf/Internal/EnumDescriptor.php | 3 +- .../Protobuf/Internal/FieldDescriptor.php | 38 +- .../src/Google/Protobuf/Internal/GPBUtil.php | 58 +- .../Protobuf/Internal/OneofDescriptor.php | 9 + .../src/Google/Protobuf/OneofDescriptor.php | 9 +- vendor/protobuf-php/protobuf/.gitignore | 34 - vendor/protobuf-php/protobuf/.travis.yml | 37 - vendor/protobuf-php/protobuf/LICENSE | 19 - vendor/protobuf-php/protobuf/Makefile | 56 - vendor/protobuf-php/protobuf/README.md | 404 ---- vendor/protobuf-php/protobuf/composer.json | 50 - .../examples/addressbook-add-person.php | 78 - .../protobuf/examples/addressbook.proto | 28 - .../protobuf/examples/src/.gitignore | 2 - vendor/protobuf-php/protobuf/phpunit.xml.dist | 35 - vendor/protobuf-php/protobuf/ruleset.xml | 14 - .../protobuf/src/AbstractMessage.php | 50 - .../src/Binary/Platform/BcNegativeEncoder.php | 67 - .../src/Binary/Platform/BigEndian.php | 53 - .../Binary/Platform/GmpNegativeEncoder.php | 92 - .../Platform/InvalidNegativeEncoder.php | 29 - .../src/Binary/Platform/NegativeEncoder.php | 29 - .../src/Binary/Platform/PlatformFactory.php | 58 - .../protobuf/src/Binary/SizeCalculator.php | 212 --- .../protobuf/src/Binary/StreamReader.php | 329 ---- .../protobuf/src/Binary/StreamWriter.php | 301 --- .../protobuf-php/protobuf/src/Collection.php | 16 - .../protobuf/src/ComputeSizeContext.php | 34 - .../protobuf/src/Configuration.php | 195 -- vendor/protobuf-php/protobuf/src/Enum.php | 63 - .../protobuf/src/EnumCollection.php | 48 - .../protobuf-php/protobuf/src/Exception.php | 13 - .../protobuf-php/protobuf/src/Extension.php | 17 - .../protobuf/src/Extension/ExtensionField.php | 133 -- .../src/Extension/ExtensionFieldMap.php | 117 -- .../src/Extension/ExtensionRegistry.php | 60 - vendor/protobuf-php/protobuf/src/Field.php | 129 -- vendor/protobuf-php/protobuf/src/Message.php | 86 - .../protobuf/src/MessageCollection.php | 48 - .../protobuf/src/MessageSerializer.php | 57 - .../protobuf-php/protobuf/src/ReadContext.php | 93 - .../protobuf/src/ScalarCollection.php | 56 - .../protobuf-php/protobuf/src/Serializer.php | 30 - vendor/protobuf-php/protobuf/src/Stream.php | 304 --- .../protobuf/src/StreamCollection.php | 48 - .../protobuf-php/protobuf/src/TextFormat.php | 117 -- vendor/protobuf-php/protobuf/src/Unknown.php | 39 - .../protobuf/src/UnknownFieldSet.php | 23 - .../protobuf-php/protobuf/src/WireFormat.php | 122 -- .../protobuf/src/WriteContext.php | 71 - .../Binary/Platform/BcNegativeEncoderTest.php | 44 - .../tests/Binary/Platform/BigEndianTest.php | 18 - .../Platform/GmpNegativeEncoderTest.php | 77 - .../Platform/InvalidNegativeEncoderTest.php | 31 - .../Binary/Platform/PlatformFactoryTest.php | 63 - .../tests/Binary/SizeCalculatorTest.php | 333 ---- .../tests/Binary/StreamReaderTest.php | 97 - .../tests/Binary/StreamWriterTest.php | 80 - .../protobuf/tests/ConfigurationTest.php | 43 - .../protobuf/tests/EnumCollectionTest.php | 63 - .../protobuf-php/protobuf/tests/EnumTest.php | 20 - .../tests/Extension/ExtensionFieldMapTest.php | 62 - .../tests/Extension/ExtensionRegistryTest.php | 28 - .../protobuf-php/protobuf/tests/FieldTest.php | 93 - .../protobuf/tests/MessageCollectionTest.php | 63 - .../protobuf/tests/MessageSerializerTest.php | 115 -- .../tests/ProtocSerializeMessageTest.php | 235 --- .../protobuf/tests/Protos/.gitignore | 2 - .../protobuf/tests/Resources/addressbook.bin | Bin 127 -> 0 bytes .../tests/Resources/addressbook.proto | 40 - .../protobuf/tests/Resources/addressbook.txt | 22 - .../protobuf/tests/Resources/complex.proto | 19 - .../tests/Resources/extension-animal-cat.bin | 1 - .../Resources/extension-command-version.bin | Bin 15 -> 0 bytes .../protobuf/tests/Resources/extension.bin | 2 - .../protobuf/tests/Resources/extension.proto | 93 - .../protobuf/tests/Resources/php_options.bin | 1 - .../tests/Resources/php_options.proto | 30 - .../tests/Resources/repeated-bytes.bin | 1 - .../tests/Resources/repeated-enum.bin | Bin 4 -> 0 bytes .../tests/Resources/repeated-int32.bin | 1 - .../tests/Resources/repeated-int32.txt | 3 - .../tests/Resources/repeated-nested.bin | 1 - .../tests/Resources/repeated-nested.txt | 9 - .../tests/Resources/repeated-packed-enum.bin | Bin 4 -> 0 bytes .../tests/Resources/repeated-packed.bin | 1 - .../tests/Resources/repeated-string.bin | 4 - .../tests/Resources/repeated-string.txt | 3 - .../protobuf/tests/Resources/repeated.proto | 23 - .../protobuf/tests/Resources/service.proto | 24 - .../protobuf/tests/Resources/simple.bin | 1 - .../protobuf/tests/Resources/simple.proto | 21 - .../protobuf/tests/Resources/simple.txt | 15 - .../protobuf/tests/Resources/tree.bin | 6 - .../protobuf/tests/Resources/tree.proto | 9 - .../protobuf/tests/Resources/tree.txt | 13 - .../protobuf/tests/Resources/unknown.bin | 1 - .../protobuf/tests/Resources/unknown.proto | 7 - .../protobuf/tests/ScalarCollectionTest.php | 65 - .../protobuf/tests/SerializeMessageTest.php | 612 ------ .../protobuf/tests/StreamCollectionTest.php | 63 - .../protobuf/tests/StreamTest.php | 202 -- .../protobuf-php/protobuf/tests/TestCase.php | 76 - .../protobuf/tests/TextFormatTest.php | 185 -- .../protobuf/tests/travis/install-protobuf.sh | 32 - vendor/psr/cache/CHANGELOG.md | 16 - vendor/psr/cache/LICENSE.txt | 19 - vendor/psr/cache/README.md | 12 - vendor/psr/cache/composer.json | 25 - vendor/psr/cache/src/CacheException.php | 10 - vendor/psr/cache/src/CacheItemInterface.php | 105 -- .../psr/cache/src/CacheItemPoolInterface.php | 138 -- .../cache/src/InvalidArgumentException.php | 13 - vendor/psr/log/LICENSE | 19 - vendor/psr/log/README.md | 58 - vendor/psr/log/composer.json | 26 - vendor/psr/log/src/AbstractLogger.php | 15 - .../psr/log/src/InvalidArgumentException.php | 7 - vendor/psr/log/src/LogLevel.php | 18 - vendor/psr/log/src/LoggerAwareInterface.php | 18 - vendor/psr/log/src/LoggerAwareTrait.php | 26 - vendor/psr/log/src/LoggerInterface.php | 125 -- vendor/psr/log/src/LoggerTrait.php | 142 -- vendor/psr/log/src/NullLogger.php | 30 - vendor/symfony/finder/CHANGELOG.md | 92 - .../symfony/finder/Comparator/Comparator.php | 62 - .../finder/Comparator/DateComparator.php | 50 - .../finder/Comparator/NumberComparator.php | 78 - .../Exception/AccessDeniedException.php | 19 - .../Exception/DirectoryNotFoundException.php | 19 - vendor/symfony/finder/Finder.php | 798 -------- vendor/symfony/finder/Gitignore.php | 93 - vendor/symfony/finder/Glob.php | 109 -- .../finder/Iterator/CustomFilterIterator.php | 61 - .../Iterator/DateRangeFilterIterator.php | 58 - .../Iterator/DepthRangeFilterIterator.php | 48 - .../ExcludeDirectoryFilterIterator.php | 88 - .../Iterator/FileTypeFilterIterator.php | 53 - .../Iterator/FilecontentFilterIterator.php | 58 - .../Iterator/FilenameFilterIterator.php | 45 - .../symfony/finder/Iterator/LazyIterator.php | 32 - .../Iterator/MultiplePcreFilterIterator.php | 111 -- .../finder/Iterator/PathFilterIterator.php | 56 - .../Iterator/RecursiveDirectoryIterator.php | 146 -- .../Iterator/SizeRangeFilterIterator.php | 57 - .../finder/Iterator/SortableIterator.php | 101 - .../Iterator/VcsIgnoredFilterIterator.php | 178 -- vendor/symfony/finder/LICENSE | 19 - vendor/symfony/finder/README.md | 14 - vendor/symfony/finder/SplFileInfo.php | 82 - vendor/symfony/finder/composer.json | 31 - vendor/symfony/polyfill-ctype/Ctype.php | 232 --- vendor/symfony/polyfill-ctype/LICENSE | 19 - vendor/symfony/polyfill-ctype/README.md | 12 - vendor/symfony/polyfill-ctype/bootstrap.php | 50 - vendor/symfony/polyfill-ctype/bootstrap80.php | 46 - vendor/symfony/polyfill-ctype/composer.json | 41 - vendor/symfony/yaml/CHANGELOG.md | 242 --- vendor/symfony/yaml/Command/LintCommand.php | 279 --- vendor/symfony/yaml/Dumper.php | 138 -- vendor/symfony/yaml/Escaper.php | 95 - .../symfony/yaml/Exception/DumpException.php | 21 - .../yaml/Exception/ExceptionInterface.php | 21 - .../symfony/yaml/Exception/ParseException.php | 126 -- .../yaml/Exception/RuntimeException.php | 21 - vendor/symfony/yaml/Inline.php | 779 -------- vendor/symfony/yaml/LICENSE | 19 - vendor/symfony/yaml/Parser.php | 1255 ------------- vendor/symfony/yaml/README.md | 13 - vendor/symfony/yaml/Resources/bin/yaml-lint | 45 - vendor/symfony/yaml/Tag/TaggedValue.php | 38 - vendor/symfony/yaml/Unescaper.php | 110 -- vendor/symfony/yaml/Yaml.php | 96 - vendor/symfony/yaml/composer.json | 41 - vendor/zircote/swagger-php/Changelog.md | 3 - vendor/zircote/swagger-php/Examples/Readme.md | 71 - .../Examples/example-object/OpenApiSpec.php | 117 -- .../example-object/example-object.yaml | 90 - .../swagger-php/Examples/misc/OpenApiSpec.php | 107 -- .../swagger-php/Examples/misc/misc.yaml | 100 - .../swagger-php/Examples/misc/sideeffect.php | 5 - .../Examples/nesting/ActualModel.php | 16 - .../Examples/nesting/AlmostModel.php | 16 - .../Examples/nesting/ApiController.php | 49 - .../Examples/nesting/BaseModel.php | 16 - .../Examples/nesting/IntermediateModel.php | 16 - .../Examples/nesting/SoCloseModel.php | 16 - .../swagger-php/Examples/nesting/nesting.yaml | 66 - .../Examples/petstore-3.0/Controllers/Pet.php | 327 ---- .../petstore-3.0/Controllers/Store.php | 137 -- .../petstore-3.0/Controllers/User.php | 231 --- .../petstore-3.0/Models/ApiResponse.php | 51 - .../Examples/petstore-3.0/Models/Category.php | 43 - .../Examples/petstore-3.0/Models/Order.php | 93 - .../Examples/petstore-3.0/Models/Pet.php | 88 - .../petstore-3.0/Models/PetRequestBody.php | 23 - .../Examples/petstore-3.0/Models/Tag.php | 43 - .../Examples/petstore-3.0/Models/User.php | 106 -- .../Models/UserArrayRequestBody.php | 22 - .../Examples/petstore-3.0/Petstore.php | 57 - .../Examples/petstore-3.0/Security.php | 32 - .../Examples/petstore-3.0/petstore-3.0.yaml | 734 -------- .../petstore.swagger.io/ApiResponse.php | 31 - .../Controllers/PetController.php | 342 ---- .../Controllers/StoreController.php | 111 -- .../Controllers/UserController.php | 218 --- .../petstore.swagger.io/Models/Category.php | 26 - .../petstore.swagger.io/Models/Order.php | 52 - .../petstore.swagger.io/Models/Pet.php | 50 - .../petstore.swagger.io/Models/Tag.php | 26 - .../petstore.swagger.io/Models/User.php | 64 - .../petstore.swagger.io/OpenApiSpec.php | 32 - .../petstore.swagger.io/OpenApiTags.php | 29 - .../petstore.swagger.io/PetstoreAuth.php | 27 - .../petstore.swagger.io.json | 980 ---------- .../petstore.swagger.io.yaml | 669 ------- .../polymorphism/AbstractResponsible.php | 38 - .../Examples/polymorphism/Controller.php | 40 - .../Examples/polymorphism/Employee.php | 23 - .../swagger-php/Examples/polymorphism/Fl.php | 20 - .../Examples/polymorphism/Request.php | 20 - .../polymorphism/polymorphism-3.1.0.yaml | 76 - .../Examples/polymorphism/polymorphism.yaml | 78 - .../SchemaQueryParameter.php | 82 - .../schema-query-parameter/app/OpenApi.php | 17 - .../schema-query-parameter/app/Product.php | 27 - .../app/ProductController.php | 49 - .../schema-query-parameter/scan.php | 33 - .../schema-query-parameter.yaml | 62 - .../sort-components/SortComponents.php | 20 - .../petstore-simple/OpenApiSpec.php | 46 - .../petstore-simple/SimplePet.php | 41 - .../petstore-simple/SimplePetsController.php | 196 -- .../petstore-simple-3.1.0.yaml | 209 --- .../petstore-simple/petstore-simple.yaml | 208 --- .../Controllers/PetWithDocsController.php | 197 -- .../Models/ErrorModel.php | 22 - .../Models/Pet.php | 40 - .../OpenApiSpec.php | 38 - .../petstore-with-external-docs.yaml | 217 --- .../swagger-spec/petstore/OpenApiSpec.php | 50 - .../Examples/swagger-spec/petstore/Pet.php | 29 - .../swagger-spec/petstore/PetsController.php | 88 - .../swagger-spec/petstore/petstore.yaml | 95 - .../using-interfaces/ColorInterface.php | 16 - .../using-interfaces/GreenProduct.php | 17 - .../Examples/using-interfaces/OpenApiSpec.php | 29 - .../Examples/using-interfaces/Product.php | 26 - .../using-interfaces/ProductController.php | 58 - .../using-interfaces/ProductInterface.php | 16 - .../using-interfaces/using-interfaces.yaml | 89 - .../using-links-php81/MyAttribute.php | 8 - .../using-links-php81/OpenApiSpec.php | 10 - .../using-links-php81/PullRequest.php | 38 - .../RepositoriesController.php | 108 -- .../Examples/using-links-php81/Repository.php | 19 - .../Examples/using-links-php81/State.php | 13 - .../Examples/using-links-php81/User.php | 27 - .../using-links-php81/UsersController.php | 16 - .../using-links-php81/using-links-php81.yaml | 217 --- .../Examples/using-links/OpenApiSpec.php | 15 - .../Examples/using-links/PullRequest.php | 40 - .../using-links/RepositoriesController.php | 168 -- .../Examples/using-links/Repository.php | 26 - .../swagger-php/Examples/using-links/User.php | 26 - .../Examples/using-links/UsersController.php | 30 - .../Examples/using-links/using-links.yaml | 212 --- .../swagger-php/Examples/using-refs/Model.php | 12 - .../Examples/using-refs/OpenApiSpec.php | 91 - .../Examples/using-refs/Product.php | 36 - .../Examples/using-refs/ProductController.php | 41 - .../using-refs/PropertyRefController.php | 21 - .../Examples/using-refs/StockLevel.php | 13 - .../Examples/using-refs/using-refs.yaml | 97 - .../using-traits/BellsAndWhistles.php | 21 - .../Examples/using-traits/Blink.php | 17 - .../Examples/using-traits/Colour.php | 17 - .../using-traits/Decoration/Bells.php | 17 - .../Decoration/UndocumentedBell.php | 8 - .../using-traits/Decoration/Whistles.php | 16 - .../Examples/using-traits/DeleteEntity.php | 30 - .../Examples/using-traits/OpenApiSpec.php | 21 - .../Examples/using-traits/Product.php | 27 - .../using-traits/ProductController.php | 43 - .../Examples/using-traits/SimpleProduct.php | 21 - .../Examples/using-traits/TrickyProduct.php | 21 - .../Examples/using-traits/using-traits.yaml | 127 -- vendor/zircote/swagger-php/LICENSE | 202 -- vendor/zircote/swagger-php/README.md | 150 -- vendor/zircote/swagger-php/bin/openapi | 234 --- vendor/zircote/swagger-php/composer.json | 112 -- .../swagger-php/docs/.vitepress/config.js | 82 - .../.vitepress/theme/components/Codeblock.vue | 31 - .../docs/.vitepress/theme/custom.css | 30 - .../docs/.vitepress/theme/index.js | 14 - .../docs/.vitepress/theme/tabs.css | 80 - .../swagger-php/docs/guide/annotations.md | 141 -- .../swagger-php/docs/guide/attributes.md | 41 - .../docs/guide/common-techniques.md | 190 -- .../swagger-php/docs/guide/cookbook.md | 690 ------- vendor/zircote/swagger-php/docs/guide/faq.md | 80 - .../guide/generating-openapi-documents.md | 60 - .../zircote/swagger-php/docs/guide/index.md | 20 - .../swagger-php/docs/guide/installation.md | 20 - .../swagger-php/docs/guide/migrating-to-v3.md | 58 - .../swagger-php/docs/guide/migrating-to-v4.md | 138 -- .../docs/guide/required-elements.md | 41 - .../swagger-php/docs/guide/under-the-hood.md | 50 - vendor/zircote/swagger-php/docs/index.md | 56 - vendor/zircote/swagger-php/docs/package.json | 14 - .../swagger-php/docs/reference/annotations.md | 1212 ------------ .../swagger-php/docs/reference/attributes.md | 1664 ----------------- .../swagger-php/docs/reference/generator.md | 161 -- .../swagger-php/docs/reference/index.md | 23 - .../swagger-php/docs/reference/processors.md | 6 - .../swagger-php/docs/related-projects.md | 35 - .../docs/snippets/example_annotations.php | 21 - .../docs/snippets/minimal_api.yaml | 11 - .../docs/snippets/minimal_api_annotations.php | 27 - .../docs/snippets/minimal_api_attributes.php | 15 - .../src/Analysers/AnalyserInterface.php | 18 - .../Analysers/AnnotationFactoryInterface.php | 21 - .../Analysers/AttributeAnnotationFactory.php | 132 -- .../Analysers/ComposerAutoloaderScanner.php | 49 - .../Analysers/DocBlockAnnotationFactory.php | 58 - .../src/Analysers/DocBlockParser.php | 76 - .../src/Analysers/ReflectionAnalyser.php | 186 -- .../src/Analysers/TokenAnalyser.php | 639 ------- .../src/Analysers/TokenScanner.php | 356 ---- vendor/zircote/swagger-php/src/Analysis.php | 440 ----- .../src/Annotations/AbstractAnnotation.php | 714 ------- .../src/Annotations/AdditionalProperties.php | 38 - .../src/Annotations/Attachable.php | 73 - .../src/Annotations/Components.php | 146 -- .../swagger-php/src/Annotations/Contact.php | 63 - .../swagger-php/src/Annotations/Delete.php | 25 - .../src/Annotations/Discriminator.php | 69 - .../swagger-php/src/Annotations/Examples.php | 96 - .../src/Annotations/ExternalDocumentation.php | 76 - .../swagger-php/src/Annotations/Flow.php | 106 -- .../swagger-php/src/Annotations/Get.php | 25 - .../swagger-php/src/Annotations/Head.php | 25 - .../swagger-php/src/Annotations/Header.php | 99 - .../swagger-php/src/Annotations/Info.php | 98 - .../swagger-php/src/Annotations/Items.php | 62 - .../src/Annotations/JsonContent.php | 42 - .../swagger-php/src/Annotations/License.php | 102 - .../swagger-php/src/Annotations/Link.php | 113 -- .../swagger-php/src/Annotations/MediaType.php | 87 - .../swagger-php/src/Annotations/OpenApi.php | 236 --- .../swagger-php/src/Annotations/Operation.php | 248 --- .../swagger-php/src/Annotations/Options.php | 25 - .../swagger-php/src/Annotations/Parameter.php | 297 --- .../swagger-php/src/Annotations/Patch.php | 25 - .../swagger-php/src/Annotations/PathItem.php | 151 -- .../src/Annotations/PathParameter.php | 25 - .../swagger-php/src/Annotations/Post.php | 25 - .../swagger-php/src/Annotations/Property.php | 47 - .../swagger-php/src/Annotations/Put.php | 25 - .../src/Annotations/RequestBody.php | 94 - .../swagger-php/src/Annotations/Response.php | 128 -- .../swagger-php/src/Annotations/Schema.php | 440 ----- .../src/Annotations/SecurityScheme.php | 136 -- .../swagger-php/src/Annotations/Server.php | 87 - .../src/Annotations/ServerVariable.php | 87 - .../swagger-php/src/Annotations/Tag.php | 66 - .../swagger-php/src/Annotations/Trace.php | 25 - .../swagger-php/src/Annotations/Xml.php | 95 - .../src/Annotations/XmlContent.php | 43 - .../src/Attributes/AdditionalProperties.php | 101 - .../swagger-php/src/Attributes/Attachable.php | 16 - .../swagger-php/src/Attributes/Components.php | 48 - .../swagger-php/src/Attributes/Contact.php | 34 - .../swagger-php/src/Attributes/Delete.php | 13 - .../src/Attributes/Discriminator.php | 33 - .../swagger-php/src/Attributes/Examples.php | 42 - .../src/Attributes/ExternalDocumentation.php | 32 - .../swagger-php/src/Attributes/Flow.php | 38 - .../swagger-php/src/Attributes/Get.php | 13 - .../swagger-php/src/Attributes/Head.php | 13 - .../swagger-php/src/Attributes/Header.php | 40 - .../swagger-php/src/Attributes/Info.php | 38 - .../swagger-php/src/Attributes/Items.php | 105 -- .../src/Attributes/JsonContent.php | 108 -- .../swagger-php/src/Attributes/License.php | 34 - .../swagger-php/src/Attributes/Link.php | 44 - .../swagger-php/src/Attributes/MediaType.php | 38 - .../swagger-php/src/Attributes/OpenApi.php | 41 - .../src/Attributes/OperationTrait.php | 55 - .../swagger-php/src/Attributes/Options.php | 13 - .../swagger-php/src/Attributes/Parameter.php | 13 - .../src/Attributes/ParameterTrait.php | 58 - .../swagger-php/src/Attributes/Patch.php | 13 - .../swagger-php/src/Attributes/PathItem.php | 38 - .../src/Attributes/PathParameter.php | 13 - .../swagger-php/src/Attributes/Post.php | 13 - .../swagger-php/src/Attributes/Property.php | 107 -- .../swagger-php/src/Attributes/Put.php | 13 - .../src/Attributes/RequestBody.php | 38 - .../swagger-php/src/Attributes/Response.php | 43 - .../swagger-php/src/Attributes/Schema.php | 106 -- .../src/Attributes/SecurityScheme.php | 48 - .../swagger-php/src/Attributes/Server.php | 34 - .../src/Attributes/ServerVariable.php | 39 - .../swagger-php/src/Attributes/Tag.php | 33 - .../swagger-php/src/Attributes/Trace.php | 13 - .../swagger-php/src/Attributes/Xml.php | 38 - .../swagger-php/src/Attributes/XmlContent.php | 108 -- vendor/zircote/swagger-php/src/Context.php | 273 --- vendor/zircote/swagger-php/src/Generator.php | 438 ----- .../swagger-php/src/Loggers/ConsoleLogger.php | 95 - .../swagger-php/src/Loggers/DefaultLogger.php | 33 - .../src/Processors/AugmentParameters.php | 94 - .../src/Processors/AugmentProperties.php | 197 -- .../src/Processors/AugmentRefs.php | 50 - .../src/Processors/AugmentSchemas.php | 137 -- .../swagger-php/src/Processors/BuildPaths.php | 62 - .../src/Processors/CleanUnmerged.php | 35 - .../src/Processors/CleanUnusedComponents.php | 110 -- .../src/Processors/DocBlockDescriptions.php | 104 -- .../src/Processors/DocblockTrait.php | 170 -- .../src/Processors/ExpandClasses.php | 49 - .../src/Processors/ExpandEnums.php | 57 - .../src/Processors/ExpandInterfaces.php | 57 - .../src/Processors/ExpandTraits.php | 49 - .../src/Processors/MergeIntoComponents.php | 34 - .../src/Processors/MergeIntoOpenApi.php | 56 - .../src/Processors/MergeJsonContent.php | 61 - .../swagger-php/src/Processors/MergeTrait.php | 80 - .../src/Processors/MergeXmlContent.php | 61 - .../src/Processors/OperationId.php | 72 - vendor/zircote/swagger-php/src/Serializer.php | 205 -- vendor/zircote/swagger-php/src/Util.php | 197 -- 512 files changed, 337 insertions(+), 46683 deletions(-) create mode 100644 .gitignore delete mode 100755 vendor/bin/openapi delete mode 100755 vendor/bin/yaml-lint delete mode 100644 vendor/composer/autoload_files.php delete mode 100644 vendor/doctrine/annotations/LICENSE delete mode 100644 vendor/doctrine/annotations/README.md delete mode 100644 vendor/doctrine/annotations/composer.json delete mode 100644 vendor/doctrine/annotations/docs/en/annotations.rst delete mode 100644 vendor/doctrine/annotations/docs/en/custom.rst delete mode 100644 vendor/doctrine/annotations/docs/en/index.rst delete mode 100644 vendor/doctrine/annotations/docs/en/sidebar.rst delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php delete mode 100644 vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php delete mode 100644 vendor/doctrine/lexer/LICENSE delete mode 100644 vendor/doctrine/lexer/README.md delete mode 100644 vendor/doctrine/lexer/composer.json delete mode 100644 vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php delete mode 100644 vendor/doctrine/lexer/psalm.xml delete mode 100644 vendor/protobuf-php/protobuf/.gitignore delete mode 100644 vendor/protobuf-php/protobuf/.travis.yml delete mode 100644 vendor/protobuf-php/protobuf/LICENSE delete mode 100644 vendor/protobuf-php/protobuf/Makefile delete mode 100644 vendor/protobuf-php/protobuf/README.md delete mode 100644 vendor/protobuf-php/protobuf/composer.json delete mode 100755 vendor/protobuf-php/protobuf/examples/addressbook-add-person.php delete mode 100644 vendor/protobuf-php/protobuf/examples/addressbook.proto delete mode 100644 vendor/protobuf-php/protobuf/examples/src/.gitignore delete mode 100644 vendor/protobuf-php/protobuf/phpunit.xml.dist delete mode 100644 vendor/protobuf-php/protobuf/ruleset.xml delete mode 100644 vendor/protobuf-php/protobuf/src/AbstractMessage.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/StreamReader.php delete mode 100644 vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php delete mode 100644 vendor/protobuf-php/protobuf/src/Collection.php delete mode 100644 vendor/protobuf-php/protobuf/src/ComputeSizeContext.php delete mode 100644 vendor/protobuf-php/protobuf/src/Configuration.php delete mode 100644 vendor/protobuf-php/protobuf/src/Enum.php delete mode 100644 vendor/protobuf-php/protobuf/src/EnumCollection.php delete mode 100644 vendor/protobuf-php/protobuf/src/Exception.php delete mode 100644 vendor/protobuf-php/protobuf/src/Extension.php delete mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php delete mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php delete mode 100644 vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php delete mode 100644 vendor/protobuf-php/protobuf/src/Field.php delete mode 100644 vendor/protobuf-php/protobuf/src/Message.php delete mode 100644 vendor/protobuf-php/protobuf/src/MessageCollection.php delete mode 100644 vendor/protobuf-php/protobuf/src/MessageSerializer.php delete mode 100644 vendor/protobuf-php/protobuf/src/ReadContext.php delete mode 100644 vendor/protobuf-php/protobuf/src/ScalarCollection.php delete mode 100644 vendor/protobuf-php/protobuf/src/Serializer.php delete mode 100644 vendor/protobuf-php/protobuf/src/Stream.php delete mode 100644 vendor/protobuf-php/protobuf/src/StreamCollection.php delete mode 100644 vendor/protobuf-php/protobuf/src/TextFormat.php delete mode 100644 vendor/protobuf-php/protobuf/src/Unknown.php delete mode 100644 vendor/protobuf-php/protobuf/src/UnknownFieldSet.php delete mode 100644 vendor/protobuf-php/protobuf/src/WireFormat.php delete mode 100644 vendor/protobuf-php/protobuf/src/WriteContext.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/ConfigurationTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/EnumTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/FieldTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/Protos/.gitignore delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/addressbook.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/complex.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension-animal-cat.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension-command-version.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/extension.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/php_options.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/php_options.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/repeated.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/service.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/simple.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/tree.txt delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/unknown.bin delete mode 100644 vendor/protobuf-php/protobuf/tests/Resources/unknown.proto delete mode 100644 vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/StreamTest.php delete mode 100644 vendor/protobuf-php/protobuf/tests/TestCase.php delete mode 100644 vendor/protobuf-php/protobuf/tests/TextFormatTest.php delete mode 100755 vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh delete mode 100644 vendor/psr/cache/CHANGELOG.md delete mode 100644 vendor/psr/cache/LICENSE.txt delete mode 100644 vendor/psr/cache/README.md delete mode 100644 vendor/psr/cache/composer.json delete mode 100644 vendor/psr/cache/src/CacheException.php delete mode 100644 vendor/psr/cache/src/CacheItemInterface.php delete mode 100644 vendor/psr/cache/src/CacheItemPoolInterface.php delete mode 100644 vendor/psr/cache/src/InvalidArgumentException.php delete mode 100644 vendor/psr/log/LICENSE delete mode 100644 vendor/psr/log/README.md delete mode 100644 vendor/psr/log/composer.json delete mode 100644 vendor/psr/log/src/AbstractLogger.php delete mode 100644 vendor/psr/log/src/InvalidArgumentException.php delete mode 100644 vendor/psr/log/src/LogLevel.php delete mode 100644 vendor/psr/log/src/LoggerAwareInterface.php delete mode 100644 vendor/psr/log/src/LoggerAwareTrait.php delete mode 100644 vendor/psr/log/src/LoggerInterface.php delete mode 100644 vendor/psr/log/src/LoggerTrait.php delete mode 100644 vendor/psr/log/src/NullLogger.php delete mode 100644 vendor/symfony/finder/CHANGELOG.md delete mode 100644 vendor/symfony/finder/Comparator/Comparator.php delete mode 100644 vendor/symfony/finder/Comparator/DateComparator.php delete mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php delete mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php delete mode 100644 vendor/symfony/finder/Exception/DirectoryNotFoundException.php delete mode 100644 vendor/symfony/finder/Finder.php delete mode 100644 vendor/symfony/finder/Gitignore.php delete mode 100644 vendor/symfony/finder/Glob.php delete mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php delete mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php delete mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php delete mode 100644 vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php delete mode 100644 vendor/symfony/finder/LICENSE delete mode 100644 vendor/symfony/finder/README.md delete mode 100644 vendor/symfony/finder/SplFileInfo.php delete mode 100644 vendor/symfony/finder/composer.json delete mode 100644 vendor/symfony/polyfill-ctype/Ctype.php delete mode 100644 vendor/symfony/polyfill-ctype/LICENSE delete mode 100644 vendor/symfony/polyfill-ctype/README.md delete mode 100644 vendor/symfony/polyfill-ctype/bootstrap.php delete mode 100644 vendor/symfony/polyfill-ctype/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-ctype/composer.json delete mode 100644 vendor/symfony/yaml/CHANGELOG.md delete mode 100644 vendor/symfony/yaml/Command/LintCommand.php delete mode 100644 vendor/symfony/yaml/Dumper.php delete mode 100644 vendor/symfony/yaml/Escaper.php delete mode 100644 vendor/symfony/yaml/Exception/DumpException.php delete mode 100644 vendor/symfony/yaml/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/yaml/Exception/ParseException.php delete mode 100644 vendor/symfony/yaml/Exception/RuntimeException.php delete mode 100644 vendor/symfony/yaml/Inline.php delete mode 100644 vendor/symfony/yaml/LICENSE delete mode 100644 vendor/symfony/yaml/Parser.php delete mode 100644 vendor/symfony/yaml/README.md delete mode 100755 vendor/symfony/yaml/Resources/bin/yaml-lint delete mode 100644 vendor/symfony/yaml/Tag/TaggedValue.php delete mode 100644 vendor/symfony/yaml/Unescaper.php delete mode 100644 vendor/symfony/yaml/Yaml.php delete mode 100644 vendor/symfony/yaml/composer.json delete mode 100644 vendor/zircote/swagger-php/Changelog.md delete mode 100644 vendor/zircote/swagger-php/Examples/Readme.md delete mode 100644 vendor/zircote/swagger-php/Examples/example-object/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/example-object/example-object.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/misc/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/misc/misc.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/misc/sideeffect.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/ActualModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/AlmostModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/ApiController.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/BaseModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/IntermediateModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/SoCloseModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/nesting/nesting.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Pet.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Tag.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Petstore.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/Security.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore-3.0/petstore-3.0.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/PetController.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/StoreController.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Category.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Order.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Pet.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Tag.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/User.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiTags.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/PetstoreAuth.php delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.json delete mode 100644 vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Controller.php delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Employee.php delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Fl.php delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/Request.php delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/polymorphism-3.1.0.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/polymorphism/polymorphism.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/SchemaQueryParameter.php delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/Product.php delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/ProductController.php delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/scan.php delete mode 100644 vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePet.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePetsController.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple-3.1.0.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Controllers/PetWithDocsController.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/ErrorModel.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/Pet.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/Pet.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/PetsController.php delete mode 100644 vendor/zircote/swagger-php/Examples/swagger-spec/petstore/petstore.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ColorInterface.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/GreenProduct.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/Product.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ProductController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/ProductInterface.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-interfaces/using-interfaces.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/MyAttribute.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/PullRequest.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/RepositoriesController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/State.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/User.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links-php81/using-links-php81.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/PullRequest.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/RepositoriesController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/Repository.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/User.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/UsersController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-links/using-links.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/Model.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/Product.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/ProductController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/PropertyRefController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/StockLevel.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-refs/using-refs.yaml delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/BellsAndWhistles.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Blink.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Colour.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/Bells.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/UndocumentedBell.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Decoration/Whistles.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/DeleteEntity.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/OpenApiSpec.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/Product.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/ProductController.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/SimpleProduct.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/TrickyProduct.php delete mode 100644 vendor/zircote/swagger-php/Examples/using-traits/using-traits.yaml delete mode 100644 vendor/zircote/swagger-php/LICENSE delete mode 100644 vendor/zircote/swagger-php/README.md delete mode 100755 vendor/zircote/swagger-php/bin/openapi delete mode 100644 vendor/zircote/swagger-php/composer.json delete mode 100644 vendor/zircote/swagger-php/docs/.vitepress/config.js delete mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue delete mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css delete mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/index.js delete mode 100644 vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css delete mode 100644 vendor/zircote/swagger-php/docs/guide/annotations.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/attributes.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/common-techniques.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/cookbook.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/faq.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/index.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/installation.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/required-elements.md delete mode 100644 vendor/zircote/swagger-php/docs/guide/under-the-hood.md delete mode 100644 vendor/zircote/swagger-php/docs/index.md delete mode 100644 vendor/zircote/swagger-php/docs/package.json delete mode 100644 vendor/zircote/swagger-php/docs/reference/annotations.md delete mode 100644 vendor/zircote/swagger-php/docs/reference/attributes.md delete mode 100644 vendor/zircote/swagger-php/docs/reference/generator.md delete mode 100644 vendor/zircote/swagger-php/docs/reference/index.md delete mode 100644 vendor/zircote/swagger-php/docs/reference/processors.md delete mode 100644 vendor/zircote/swagger-php/docs/related-projects.md delete mode 100644 vendor/zircote/swagger-php/docs/snippets/example_annotations.php delete mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api.yaml delete mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api_annotations.php delete mode 100644 vendor/zircote/swagger-php/docs/snippets/minimal_api_attributes.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/AnnotationFactoryInterface.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php delete mode 100644 vendor/zircote/swagger-php/src/Analysers/TokenScanner.php delete mode 100644 vendor/zircote/swagger-php/src/Analysis.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Attachable.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Components.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Contact.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Delete.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Discriminator.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Examples.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Flow.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Get.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Head.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Header.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Info.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Items.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/JsonContent.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/License.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Link.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/MediaType.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/OpenApi.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Operation.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Options.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Parameter.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Patch.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/PathItem.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/PathParameter.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Post.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Property.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Put.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/RequestBody.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Response.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Schema.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Server.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/ServerVariable.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Tag.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Trace.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/Xml.php delete mode 100644 vendor/zircote/swagger-php/src/Annotations/XmlContent.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Attachable.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Components.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Contact.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Delete.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Discriminator.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Examples.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Flow.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Get.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Head.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Header.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Info.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Items.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/JsonContent.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/License.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Link.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/MediaType.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/OpenApi.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/OperationTrait.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Options.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Parameter.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/ParameterTrait.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Patch.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/PathItem.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/PathParameter.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Post.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Property.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Put.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/RequestBody.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Response.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Schema.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Server.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/ServerVariable.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Tag.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Trace.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/Xml.php delete mode 100644 vendor/zircote/swagger-php/src/Attributes/XmlContent.php delete mode 100644 vendor/zircote/swagger-php/src/Context.php delete mode 100644 vendor/zircote/swagger-php/src/Generator.php delete mode 100644 vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php delete mode 100644 vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentParameters.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentProperties.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentRefs.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/BuildPaths.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/DocblockTrait.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandClasses.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandEnums.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/ExpandTraits.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/MergeTrait.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php delete mode 100644 vendor/zircote/swagger-php/src/Processors/OperationId.php delete mode 100644 vendor/zircote/swagger-php/src/Serializer.php delete mode 100644 vendor/zircote/swagger-php/src/Util.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4177bb4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +*.pem diff --git a/README.md b/README.md index 1fd2a50..9ee6d02 100644 --- a/README.md +++ b/README.md @@ -31,14 +31,40 @@ Make sure that the file has `extension="grpc.so"` and add the line if it doesn' For detailed steps visit the [gRPC PHP quickstart](https://grpc.io/docs/languages/php/quickstart/). -2. In the certs folder of the repository add the following three PassKit credential files: +2. Add bindings to composer +To install the bindings via [Composer](http://getcomposer.org/), add the following to `composer.json`: + +```json +{ + "repositories": [ + { + "type": "git", + "url": "https://github.com/passkit/passkit-php-grpc-sdk.git" + } + ], + "require": { + "passkit/passkit-php-grpc-sdk": "1.1.70" + } +} +``` + +Then run `composer install` + +Manual Installation +Clone the repo and include `autoload.php`: + +```php +require_once('/path/to/passkit-php-grpc-sdk/vendor/autoload.php'); +``` + +3. In the certs folder of the repository add the following three PassKit credential files: - certificate.pem - ca-chain.pem - key.pem You can disregard the key-java.pem credentials file as it is not compatible with PHP. -3. Now we need to decrypt your `key.pem`. At your project root directory, run `cd ./certs` `openssl ec -in key.pem -out key.pem`. +4. Now we need to decrypt your `key.pem`. At your project root directory, run `cd ./certs` `openssl ec -in key.pem -out key.pem`. ![ScreenShot](images/decrypt-key.png) For the password use the one-time password that you used for generating the SDK credentials. @@ -46,10 +72,10 @@ Your `key.pem` file should look like below. ![ScreenShot](images/decrypted-key.png) If you do not see `Proc-Type: 4,ENCEYPTED` on line 2, you have successfully decrypted `key.pem`. -4. Modify the variables with the values for your programs or campaigns in each of the membership, coupons and flights methods. The variables to modify will be at the top of each method. +5. Modify the variables with the values for your programs or campaigns in each of the membership, coupons and flights methods. The variables to modify will be at the top of each method. ![ScreenShot](images/variables.png) -5. To run each method go into the directory, for members `cd membership`, for coupons `cd coupons` and for flights `cd flights`. Then run php plus the name of the method e.g. `php enrol-member.php` to run that method. +6. To run each method go into the directory, for members `cd membership`, for coupons `cd coupons` and for flights `cd flights`. Then run php plus the name of the method e.g. `php enrol-member.php` to run that method. ## Examples ### Membership Cards diff --git a/composer.json b/composer.json index 493474f..9e439cb 100644 --- a/composer.json +++ b/composer.json @@ -21,29 +21,27 @@ { "type": "git", "url": "https://github.com/passkit/passkit-php-grpc-sdk.git" - }, - { - "type": "vcs", - "url": "https://github.com/stanley-cheung/Protobuf-PHP" } ], "require": { "grpc/grpc": "^v1.42.0", - "google/protobuf": "^v3.13.0", - "passkit/passkit-php-grpc-sdk": "1.0.0", - "zircote/swagger-php": "^4.4", - "protobuf-php/protobuf": "^0.1.3" + "google/protobuf": "^v3.21.7", + "passkit/passkit-php-grpc-sdk": "1.1.70" }, "autoload": { "psr-4": { "Analytics\\": "lib/Analytics", "Cabin_codes\\": "lib/Cabin_codes", + "Ct\\": "lib/Ct", "Event_tickets\\": "lib/Event_tickets", "Flights\\": "lib/Flights", "Io\\": "lib/Io", "Members\\": "lib/Members", + "Raw\\": "lib/Raw", + "Scheduler\\": "lib/Scheduler", "Single_use_coupons\\": "lib/Single_use_coupons", "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Ct\\": "lib/GPBMetadata/Ct", "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", "Google\\Api\\": "lib/extra/google/api" } diff --git a/coupons/count-coupons.php b/coupons/count-coupons.php index 63d0419..9387164 100644 --- a/coupons/count-coupons.php +++ b/coupons/count-coupons.php @@ -1,14 +1,11 @@ setCouponCampaignId($campaignId); - $filter = new Io\Filter(); + $filter = new Io\FieldFilter(); $filter->setFilterField("offerId"); $filter->setFilterValue($offerId); $filter->setFilterOperator("eq"); - $listRequest->setFilters($filter); + $filterGroup = new Io\FilterGroup(); + $filterGroup->setFieldFilters([$filter]); + $filters = new Io\Filters(); + $filters->setFilterGroups([$filterGroup]); + $listRequest->setFilters($filters); - list($id, $status) = $client->countCouponsByCouponCampaign($listRequest)->wait(); + list($result, $status) = $client->countCouponsByCouponCampaign($listRequest)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - - echo $result->getId() . "/n"; + echo "Number of coupons " . $result->getTotal() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/create-campaign.php b/coupons/create-campaign.php index 3259658..594b662 100644 --- a/coupons/create-campaign.php +++ b/coupons/create-campaign.php @@ -1,6 +1,4 @@ setName("Quickstart Campaign"); - $campaign->setStatus(1, 4); + $campaign->setStatus([1, 4]); list($id, $status) = $client->createCouponCampaign($campaign)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } //You can use the campaignId displayed below for other coupon methods - echo "CampaignId" . $campaign->getId() . "\n"; + echo "CampaignId " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/create-coupon.php b/coupons/create-coupon.php index e62c1ca..60489e8 100644 --- a/coupons/create-coupon.php +++ b/coupons/create-coupon.php @@ -1,15 +1,12 @@ code, $status->details, var_dump($status->metadata))); } //You can use the couponId displayed below for other coupon methods - echo "https://pub1.pskt.io/" . $id->getId() . "\n"; - echo "CouponId" . $coupon->getId() . "\n"; + echo "Coupon URL: https://pub1.pskt.io/" . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/create-offer.php b/coupons/create-offer.php index acfa430..1371928 100644 --- a/coupons/create-offer.php +++ b/coupons/create-offer.php @@ -1,11 +1,13 @@ setProtocol(101); $defaultTemplateRequest->setRevision(1); - $defaultPassTemplate = new Io\PassTemplate(); - - $defaultPassTemplate->$templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); + list($defaultPassTemplate, $status) = $templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - // If you use the default template, you need to set name, description and timezone because these fields are mandatory. $defaultPassTemplate->setName("Quickstart"); $defaultPassTemplate->setDescription("quick start sample template"); $defaultPassTemplate->setTimezone("America/New_York"); - list($id, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); + list($template, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - // Set the offer body $offer = new Single_use_coupons\CouponOffer(); $offer->setId("base"); - $offer->setBeforeRedeemPassTemplateId($defaultPassTemplate->getId()); + $offer->setCampaignId($campaignId); + $offer->setBeforeRedeemPassTemplateId($template->getId()); $offer->setOfferTitle("BaseOffer"); $offer->setOfferShortTitle("BaseOffer"); $offer->setOfferDetails("Base offer"); - $startdate = new DateTime(); - $enddate = new DateTime(); - $enddate->setDate(2022, 6, 28); - $offer->setIssueStartDate($startdate->getTimestamp()); - $offer->setIssueEndDate($enddate->getTimestamp()); + $date = new DateTime(); + $date->setDate(2023, 6, 24); + $startdate = new Timestamp(); + $startdate->setSeconds($date->getTimestamp()); + $enddate = new Timestamp(); + $date->setDate(2023, 6, 28); + $enddate->setSeconds($date->getTimestamp()); + $offer->setIssueStartDate($startdate); + $offer->setIssueEndDate($enddate); list($id, $status) = $client->createCouponOffer($offer)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } //You can use the offerId displayed below for other coupon methods - echo "OfferId" . $offer->getId() . "\n"; + echo "Offer created: " . $offer->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/delete-campaign.php b/coupons/delete-campaign.php index b5ccbe1..08e7c09 100644 --- a/coupons/delete-campaign.php +++ b/coupons/delete-campaign.php @@ -1,12 +1,10 @@ code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } + echo "Campaign deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/get-single-coupon.php b/coupons/get-single-coupon.php index 4225f94..630ce02 100644 --- a/coupons/get-single-coupon.php +++ b/coupons/get-single-coupon.php @@ -1,13 +1,11 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Coupon Status: " . $id->getStatus() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/list-coupons.php b/coupons/list-coupons.php index 9dd5e38..91e0c04 100644 --- a/coupons/list-coupons.php +++ b/coupons/list-coupons.php @@ -1,13 +1,10 @@ getId() . "\n"; } - echo $result->getId() . "/n"; + echo "/n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/redeem-coupon.php b/coupons/redeem-coupon.php index 5b6b22b..89d128e 100644 --- a/coupons/redeem-coupon.php +++ b/coupons/redeem-coupon.php @@ -1,13 +1,10 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Coupon: " . $id->getId() . " has been redeemed. \n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/update-coupon.php b/coupons/update-coupon.php index 1b3ea9b..6b06bcf 100644 --- a/coupons/update-coupon.php +++ b/coupons/update-coupon.php @@ -1,13 +1,10 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Coupon: " . $id->getId() . " has been updated. \n"; } catch (Exception $e) { echo $e; } diff --git a/coupons/void-coupon.php b/coupons/void-coupon.php index 5fe52e4..90661e8 100644 --- a/coupons/void-coupon.php +++ b/coupons/void-coupon.php @@ -1,14 +1,11 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Coupon has been voided. \n"; } catch (Exception $e) { echo $e; } diff --git a/flights/create-airport.php b/flights/create-airport.php index d668c5f..e7fdca1 100644 --- a/flights/create-airport.php +++ b/flights/create-airport.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo $id->getId() . "/n"; // Set the arrival airport body if does not currently exist $airport = new Flights\Port(); $airport->setIataAirportCode("ADP"); @@ -54,7 +52,7 @@ throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Airport created with code " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/flights/create-boarding-pass.php b/flights/create-boarding-pass.php index 436f097..763679a 100644 --- a/flights/create-boarding-pass.php +++ b/flights/create-boarding-pass.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Carrier created with code: " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/flights/create-flight-designator.php b/flights/create-flight-designator.php index dea1dcd..12708ef 100644 --- a/flights/create-flight-designator.php +++ b/flights/create-flight-designator.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Flight designator created with code: " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/flights/create-flight.php b/flights/create-flight.php index 4cf9f1c..3744fe4 100644 --- a/flights/create-flight.php +++ b/flights/create-flight.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Flight created with code: " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/flights/create-template.php b/flights/create-template.php index 6c08814..2caf426 100644 --- a/flights/create-template.php +++ b/flights/create-template.php @@ -1,5 +1,4 @@ getId() . "\n"; + echo "TemplateId: " . $defaultPassTemplate->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/flights/delete-airport.php b/flights/delete-airport.php index 9ce7214..162574d 100644 --- a/flights/delete-airport.php +++ b/flights/delete-airport.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Airport deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/flights/delete-carrier.php b/flights/delete-carrier.php index bbf6715..4ab8560 100644 --- a/flights/delete-carrier.php +++ b/flights/delete-carrier.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Carrier deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/flights/delete-flight-designator.php b/flights/delete-flight-designator.php index 601a9ce..290e7cf 100644 --- a/flights/delete-flight-designator.php +++ b/flights/delete-flight-designator.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Flight designator deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/flights/delete-flight.php b/flights/delete-flight.php index d2ad9e0..104f503 100644 --- a/flights/delete-flight.php +++ b/flights/delete-flight.php @@ -1,6 +1,4 @@ code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Flight deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/membership/burn-points.php b/membership/burn-points.php index 0ca1499..ab7587e 100644 --- a/membership/burn-points.php +++ b/membership/burn-points.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND MEMBER -$memberId = "memberId"; -$programId = "programId"; -$tierId = "tierId"; +$memberId = ""; +$programId = ""; +$tierId = ""; // burn-points takes a programId of an existing program and memberId of existing member to use points from a chosen member. try { $ca_filename = "ca-chain.pem"; @@ -37,7 +37,7 @@ throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Burned points of member: " . $result->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/membership/create-program.php b/membership/create-program.php index 8b8c73b..f8a88af 100644 --- a/membership/create-program.php +++ b/membership/create-program.php @@ -22,7 +22,7 @@ // Set the program body $program = new Members\Program(); $program->setName("Quickstart Program"); - $program->setStatus(1, 4); + $program->setStatus([1, 4]); list($id, $status) = $client->createProgram($program)->wait(); if ($status->code !== 0) { @@ -30,7 +30,7 @@ } //You can use the programId displayed below for other membership methods - echo "ProgramId" . $program->getId() . "\n"; + echo "ProgramId " . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/membership/create-tier.php b/membership/create-tier.php index 205e9e9..e86f6db 100644 --- a/membership/create-tier.php +++ b/membership/create-tier.php @@ -1,11 +1,13 @@ setProtocol(100); $defaultTemplateRequest->setRevision(1); - $defaultPassTemplate = new Io\PassTemplate(); - - $defaultPassTemplate->$templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); + list($defaultPassTemplate, $status) = $templatesclient->getDefaultTemplate($defaultTemplateRequest)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - // If you use the default template, you need to set name, description and timezone because these fields are mandatory. $defaultPassTemplate->setName("Quickstart"); $defaultPassTemplate->setDescription("quick start sample template"); $defaultPassTemplate->setTimezone("America/New_York"); - list($id, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); + list($template, $status) = $templatesclient->createTemplate($defaultPassTemplate)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - // Set the tier body $tier = new Members\Tier(); - $tier->setName("Base Tier"); - $tier->setPassTemplateId($defaultPassTemplate->getId()); + $tier->setId("silver"); + $tier->setName("Base Tier2"); + $tier->setPassTemplateId($template->getId()); $tier->setProgramId($programId); - $tier->setTierIndex(1); - $tier->setTimezone("UTC"); + $tier->setTierIndex(2); + $tier->setTimezone("Europe/London"); list($id, $status) = $client->createTier($tier)->wait(); @@ -67,7 +66,7 @@ throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } //You can use the tierId displayed below for other membership methods - echo "TierId" . $tier->getId() . "\n"; + echo "Tier created: " . $tier->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/membership/delete-member.php b/membership/delete-member.php index 904c522..e552436 100644 --- a/membership/delete-member.php +++ b/membership/delete-member.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND MEMBER -$memberId = "memberId"; +$memberId = ""; -// delete-member takes programId, tierId, memberId and memberDetails, deletes an existing member record. +// delete-member takes memberId and deletes an existing member record. try { $ca_filename = "ca-chain.pem"; $key_filename = "key.pem"; @@ -31,6 +31,7 @@ if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } + echo "Member deleted. \n"; } catch (Exception $e) { echo $e; } diff --git a/membership/earn-points.php b/membership/earn-points.php index 7a34b2c..0205475 100644 --- a/membership/earn-points.php +++ b/membership/earn-points.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND MEMBER -$memberId = "memberId"; -$programId = "programId"; -$tierId = "tierId"; +$memberId = ""; +$programId = ""; +$tierId = ""; // earn-points takes a programId of an existing program and memberId of existing member to add points to chosen member. try { $ca_filename = "ca-chain.pem"; @@ -39,7 +39,7 @@ throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Member: " . $result->getId() . " has " . $result->getPoints() . " points. \n"; } catch (Exception $e) { echo $e; } diff --git a/membership/enrol-member.php b/membership/enrol-member.php index 0a10878..837f456 100644 --- a/membership/enrol-member.php +++ b/membership/enrol-member.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND EMAIL -$programId = "05faUsEvatLifOwxKWmS0Q"; -$tierId = "Base Tier"; -$email = "claudia@passkit.com"; +$programId = ""; +$tierId = ""; +$email = ""; // enrol-member takes programId, tierId and memberDetails, creates a new member record, and sends a welcome email to deliver membership card url. // The method returns the member id. Member id is a part of card url. try { @@ -45,8 +45,7 @@ throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } //You can use the memberId displayed below for other membership methods - echo "https://pub1.pskt.io/" . $id->getId() . "\n"; - echo "MemberId" . $member->getId() . "\n"; + echo "Pass URL: " . "https://pub1.pskt.io/" . $id->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/membership/list-members.php b/membership/list-members.php index 60c1101..e3b3d20 100644 --- a/membership/list-members.php +++ b/membership/list-members.php @@ -4,7 +4,7 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM AND TIER -$programId = "programId"; +$programId = "0VN5ScGpcuW3j639qFPNa1"; // list-members takes search conditions as pagination object and returns list of member records which match with the conditions. try { $ca_filename = "ca-chain.pem"; @@ -17,7 +17,7 @@ file_get_contents($path . $key_filename), file_get_contents($path . $cert_filename) ); - // Generate a members module client + // Generate a members module client $client = new Members\MembersClient('grpc.pub1.passkit.io:443', [ 'credentials' => $credentials ]); @@ -26,7 +26,7 @@ $listRequest = new Members\ListRequest(); $listRequest->setProgramId($programId); - $call= $client->listMembers($listRequest); + $call = $client->listMembers($listRequest); $members = $call->responses(); foreach ($members as $member) { echo $member->getId() . "\n"; diff --git a/membership/set-points.php b/membership/set-points.php index 7ac44bd..f29e58b 100644 --- a/membership/set-points.php +++ b/membership/set-points.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND MEMBER -$memberId = "memberId"; -$programId = "programId"; -$tierId = "tierId"; +$memberId = ""; +$programId = ""; +$tierId = ""; // set-points takes a memberId of existing member to set points of a chosen member. try { $ca_filename = "ca-chain.pem"; @@ -28,15 +28,15 @@ $memberPointsRequest = new \Members\SetPointsRequest(); $memberPointsRequest->setId($memberId); $memberPointsRequest->setPoints(2000); - $memberPointsRequest->setSecondaryPoints(1000); - $memberPointsRequest->setTierPoints(100); + //$memberPointsRequest->setSecondaryPoints(1000); + //$memberPointsRequest->setTierPoints(100); list($result, $status) = $client->setPoints($memberPointsRequest)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Set points of member " . $result->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/membership/update-member.php b/membership/update-member.php index c4523f7..302fa11 100644 --- a/membership/update-member.php +++ b/membership/update-member.php @@ -4,9 +4,9 @@ putenv("GRPC_SSL_CIPHER_SUITES=HIGH+ECDSA"); // MODIFY WITH THE VARIABLES OF YOUR PROGRAM, TIER AND MEMBER -$memberId = "memberId"; -$programId = "programId"; -$tierId = "tierId"; +$memberId = "4PwOoxn6LAV6wQyM9bEiou"; +$programId = "0VN5ScGpcuW3j639qFPNa1"; +$tierId = "bronze"; // update-member takes memberId and memberDetails, and updates existing member record. try { $ca_filename = "ca-chain.pem"; @@ -29,14 +29,14 @@ $member->setId($memberId); $member->setProgramId($programId); $member->setTierId($tierId); - $member->setPoints(2000); + $member->setPoints(2001); list($result, $status) = $client->updateMember($member)->wait(); if ($status->code !== 0) { throw new Exception(sprintf('Status Code: %s, Details: %s, Meta: %s', $status->code, $status->details, var_dump($status->metadata))); } - echo $result->getId() . "/n"; + echo "Updated member " . $result->getId() . "\n"; } catch (Exception $e) { echo $e; } diff --git a/vendor/bin/openapi b/vendor/bin/openapi deleted file mode 100755 index 630b009..0000000 --- a/vendor/bin/openapi +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env php -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'); - exit(0); - } -} - -include __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'; diff --git a/vendor/bin/yaml-lint b/vendor/bin/yaml-lint deleted file mode 100755 index 9e7a09c..0000000 --- a/vendor/bin/yaml-lint +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env php -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); - exit(0); - } -} - -include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php deleted file mode 100644 index 3f9c14a..0000000 --- a/vendor/composer/autoload_files.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', -); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 368c21b..6fe0344 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,14 +6,9 @@ $baseDir = dirname($vendorDir); return array( - 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), - 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Single_use_coupons\\' => array($baseDir . '/lib/Single_use_coupons', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), - 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), - 'Protobuf\\' => array($vendorDir . '/protobuf-php/protobuf/src'), - 'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'), + 'Scheduler\\' => array($baseDir . '/lib/Scheduler', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Scheduler'), + 'Raw\\' => array($baseDir . '/lib/Raw', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Raw'), 'Members\\' => array($baseDir . '/lib/Members', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Members'), 'Io\\' => array($baseDir . '/lib/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Io'), 'Grpc\\' => array($vendorDir . '/grpc/grpc/src/lib'), @@ -22,10 +17,10 @@ 'GPBMetadata\\Io\\' => array($baseDir . '/lib/GPBMetadata/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Io'), 'GPBMetadata\\Google\\Protobuf\\' => array($vendorDir . '/google/protobuf/src/GPBMetadata/Google/Protobuf'), 'GPBMetadata\\Google\\' => array($baseDir . '/lib/extra/GPBMetadata/Google', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google'), + 'GPBMetadata\\Ct\\' => array($baseDir . '/lib/GPBMetadata/Ct', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Ct'), 'Flights\\' => array($baseDir . '/lib/Flights', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Flights'), 'Event_tickets\\' => array($baseDir . '/lib/Event_tickets', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets'), - 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), - 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), + 'Ct\\' => array($baseDir . '/lib/Ct', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Ct'), 'Cabin_codes\\' => array($baseDir . '/lib/Cabin_codes', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Cabin_codes'), 'Analytics\\' => array($baseDir . '/lib/Analytics', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Analytics'), ); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 2cc5ea7..b0e6242 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -33,25 +33,6 @@ public static function getLoader() $loader->register(true); - $includeFiles = \Composer\Autoload\ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$files; - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire34096ee264e58ad06d3d18f45eda2b68($fileIdentifier, $file); - } - return $loader; } } - -/** - * @param string $fileIdentifier - * @param string $file - * @return void - */ -function composerRequire34096ee264e58ad06d3d18f45eda2b68($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 80c9df2..14a6e9e 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -6,27 +6,15 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 { - public static $files = array ( - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - ); - public static $prefixLengthsPsr4 = array ( 'S' => array ( - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Component\\Yaml\\' => 23, - 'Symfony\\Component\\Finder\\' => 25, 'Single_use_coupons\\' => 19, + 'Scheduler\\' => 10, ), - 'P' => + 'R' => array ( - 'Psr\\Log\\' => 8, - 'Psr\\Cache\\' => 10, - 'Protobuf\\' => 9, - ), - 'O' => - array ( - 'OpenApi\\' => 8, + 'Raw\\' => 4, ), 'M' => array ( @@ -44,6 +32,7 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 'GPBMetadata\\Io\\' => 15, 'GPBMetadata\\Google\\Protobuf\\' => 28, 'GPBMetadata\\Google\\' => 19, + 'GPBMetadata\\Ct\\' => 15, ), 'F' => array ( @@ -53,13 +42,9 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 array ( 'Event_tickets\\' => 14, ), - 'D' => - array ( - 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Annotations\\' => 28, - ), 'C' => array ( + 'Ct\\' => 3, 'Cabin_codes\\' => 12, ), 'A' => @@ -69,38 +54,20 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 ); public static $prefixDirsPsr4 = array ( - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Component\\Yaml\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/yaml', - ), - 'Symfony\\Component\\Finder\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/finder', - ), 'Single_use_coupons\\' => array ( 0 => __DIR__ . '/../..' . '/lib/Single_use_coupons', 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons', ), - 'Psr\\Log\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/log/src', - ), - 'Psr\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/cache/src', - ), - 'Protobuf\\' => + 'Scheduler\\' => array ( - 0 => __DIR__ . '/..' . '/protobuf-php/protobuf/src', + 0 => __DIR__ . '/../..' . '/lib/Scheduler', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Scheduler', ), - 'OpenApi\\' => + 'Raw\\' => array ( - 0 => __DIR__ . '/..' . '/zircote/swagger-php/src', + 0 => __DIR__ . '/../..' . '/lib/Raw', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Raw', ), 'Members\\' => array ( @@ -139,6 +106,11 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 0 => __DIR__ . '/../..' . '/lib/extra/GPBMetadata/Google', 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google', ), + 'GPBMetadata\\Ct\\' => + array ( + 0 => __DIR__ . '/../..' . '/lib/GPBMetadata/Ct', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Ct', + ), 'Flights\\' => array ( 0 => __DIR__ . '/../..' . '/lib/Flights', @@ -149,13 +121,10 @@ class ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68 0 => __DIR__ . '/../..' . '/lib/Event_tickets', 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets', ), - 'Doctrine\\Common\\Lexer\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', - ), - 'Doctrine\\Common\\Annotations\\' => + 'Ct\\' => array ( - 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', + 0 => __DIR__ . '/../..' . '/lib/Ct', + 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Ct', ), 'Cabin_codes\\' => array ( diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 0043877..75f38f0 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,172 +1,18 @@ { "packages": [ - { - "name": "doctrine/annotations", - "version": "1.13.2", - "version_normalized": "1.13.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "time": "2021-08-05T19:00:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" - }, - "install-path": "../doctrine/annotations" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "version_normalized": "1.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "time": "2022-02-28T11:07:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "install-path": "../doctrine/lexer" - }, { "name": "google/protobuf", - "version": "v3.21.1", - "version_normalized": "3.21.1.0", + "version": "v3.21.11", + "version_normalized": "3.21.11.0", "source": { "type": "git", "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "68f71264d8816f001177d68ce99d25b28e212d4c" + "reference": "8f8dc48540aed2c96eb3febcc4816f1321f66b85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/68f71264d8816f001177d68ce99d25b28e212d4c", - "reference": "68f71264d8816f001177d68ce99d25b28e212d4c", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/8f8dc48540aed2c96eb3febcc4816f1321f66b85", + "reference": "8f8dc48540aed2c96eb3febcc4816f1321f66b85", "shasum": "" }, "require": { @@ -178,7 +24,7 @@ "suggest": { "ext-bcmath": "Need to support JSON deserialization" }, - "time": "2022-05-27T22:57:31+00:00", + "time": "2022-12-08T06:36:59+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -197,8 +43,7 @@ "proto" ], "support": { - "issues": "https://github.com/protocolbuffers/protobuf-php/issues", - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.1" + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.11" }, "install-path": "../google/protobuf" }, @@ -251,30 +96,34 @@ }, { "name": "passkit/passkit-php-grpc-sdk", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "version": "v1.1.70", + "version_normalized": "1.1.70.0", "source": { "type": "git", "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", - "reference": "b03c1020c50d27d5fd51ed20267ba10da73be94e" + "reference": "aa4501206dbf2f80131c492892c5de8626a79039" }, "require": { - "google/protobuf": "^v3.13.0", - "grpc/grpc": "^v1.30.0" + "google/protobuf": "^v3.21.7", + "grpc/grpc": "^v1.42.0" }, - "time": "2020-10-15T09:16:03+00:00", + "time": "2022-10-06T08:27:41+00:00", "type": "library", "installation-source": "source", "autoload": { "psr-4": { "Analytics\\": "lib/Analytics", "Cabin_codes\\": "lib/Cabin_codes", + "Ct\\": "lib/Ct", "Event_tickets\\": "lib/Event_tickets", "Flights\\": "lib/Flights", "Io\\": "lib/Io", "Members\\": "lib/Members", + "Raw\\": "lib/Raw", + "Scheduler\\": "lib/Scheduler", "Single_use_coupons\\": "lib/Single_use_coupons", "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Ct\\": "lib/GPBMetadata/Ct", "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", "Google\\Api\\": "lib/extra/google/api" } @@ -293,496 +142,13 @@ "keywords": [ "api", "grpc", + "mobile-wallet", "passkit", "php", - "sdk" + "sdk", + "wallet" ], "install-path": "../passkit/passkit-php-grpc-sdk" - }, - { - "name": "protobuf-php/protobuf", - "version": "v0.1.3", - "version_normalized": "0.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/protobuf-php/protobuf.git", - "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/protobuf-php/protobuf/zipball/c0da95f75ea418b39b02ff4528ca9926cc246a8c", - "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "instaclick/coding-standard": "^1.1", - "instaclick/object-calisthenics-sniffs": "dev-master", - "instaclick/symfony2-coding-standard": "dev-remaster", - "php-mock/php-mock-phpunit": "^0.2", - "phpunit/phpunit": "^4", - "protobuf-php/protobuf-plugin": ">=0.1", - "satooshi/php-coveralls": "^0.6", - "squizlabs/php_codesniffer": "^1.5" - }, - "time": "2016-09-21T23:47:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Protobuf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabio B. Silva", - "email": "fabio.bat.silva@gmail.com", - "homepage": "https://github.com/FabioBatSilva" - }, - { - "name": "Iván -DrSlump- Montes", - "email": "drslump@pollinimini.net", - "homepage": "https://github.com/drslump" - } - ], - "description": "PHP implementation of Google's Protocol Buffers", - "homepage": "https://github.com/protobuf-php/protobuf", - "keywords": [ - "protobuf", - "protocol buffer", - "serializing" - ], - "support": { - "issues": "https://github.com/protobuf-php/protobuf/issues", - "source": "https://github.com/protobuf-php/protobuf/tree/master" - }, - "install-path": "../protobuf-php/protobuf" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-02-03T23:26:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "install-path": "../psr/cache" - }, - { - "name": "psr/log", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-07-14T16:46:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "install-path": "../psr/log" - }, - { - "name": "symfony/finder", - "version": "v6.1.0", - "version_normalized": "6.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "time": "2022-04-15T08:08:08+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/finder" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", - "version_normalized": "1.26.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2022-05-24T11:49:31+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-ctype" - }, - { - "name": "symfony/yaml", - "version": "v6.1.0", - "version_normalized": "6.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2022-04-15T14:25:02+00:00", - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/yaml" - }, - { - "name": "zircote/swagger-php", - "version": "4.4.5", - "version_normalized": "4.4.5.0", - "source": { - "type": "git", - "url": "https://github.com/zircote/swagger-php.git", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.7", - "ext-json": "*", - "php": ">=7.2", - "psr/log": "^1.1 || ^2.0 || 3.0", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "time": "2022-06-02T21:05:02+00:00", - "bin": [ - "bin/openapi" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", - "keywords": [ - "api", - "json", - "rest", - "service discovery" - ], - "support": { - "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.4.5" - }, - "install-path": "../zircote/swagger-php" } ], "dev": true, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index e2322b4..b0c1930 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -10,31 +10,13 @@ 'dev' => true, ), 'versions' => array( - 'doctrine/annotations' => array( - 'pretty_version' => '1.13.2', - 'version' => '1.13.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/annotations', - 'aliases' => array(), - 'reference' => '5b668aef16090008790395c02c893b1ba13f7e08', - 'dev_requirement' => false, - ), - 'doctrine/lexer' => array( - 'pretty_version' => '1.2.3', - 'version' => '1.2.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/lexer', - 'aliases' => array(), - 'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229', - 'dev_requirement' => false, - ), 'google/protobuf' => array( - 'pretty_version' => 'v3.21.1', - 'version' => '3.21.1.0', + 'pretty_version' => 'v3.21.11', + 'version' => '3.21.11.0', 'type' => 'library', 'install_path' => __DIR__ . '/../google/protobuf', 'aliases' => array(), - 'reference' => '68f71264d8816f001177d68ce99d25b28e212d4c', + 'reference' => '8f8dc48540aed2c96eb3febcc4816f1321f66b85', 'dev_requirement' => false, ), 'grpc/grpc' => array( @@ -47,12 +29,12 @@ 'dev_requirement' => false, ), 'passkit/passkit-php-grpc-sdk' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', + 'pretty_version' => 'v1.1.70', + 'version' => '1.1.70.0', 'type' => 'library', 'install_path' => __DIR__ . '/../passkit/passkit-php-grpc-sdk', 'aliases' => array(), - 'reference' => 'b03c1020c50d27d5fd51ed20267ba10da73be94e', + 'reference' => 'aa4501206dbf2f80131c492892c5de8626a79039', 'dev_requirement' => false, ), 'passkit/passkit-php-quickstart' => array( @@ -64,68 +46,5 @@ 'reference' => NULL, 'dev_requirement' => false, ), - 'protobuf-php/protobuf' => array( - 'pretty_version' => 'v0.1.3', - 'version' => '0.1.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../protobuf-php/protobuf', - 'aliases' => array(), - 'reference' => 'c0da95f75ea418b39b02ff4528ca9926cc246a8c', - 'dev_requirement' => false, - ), - 'psr/cache' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/cache', - 'aliases' => array(), - 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', - 'dev_requirement' => false, - ), - 'psr/log' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/log', - 'aliases' => array(), - 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', - 'dev_requirement' => false, - ), - 'symfony/finder' => array( - 'pretty_version' => 'v6.1.0', - 'version' => '6.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/finder', - 'aliases' => array(), - 'reference' => '45b8beb69d6eb3b05a65689ebfd4222326773f8f', - 'dev_requirement' => false, - ), - 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', - 'aliases' => array(), - 'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4', - 'dev_requirement' => false, - ), - 'symfony/yaml' => array( - 'pretty_version' => 'v6.1.0', - 'version' => '6.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/yaml', - 'aliases' => array(), - 'reference' => '84ce4f9d2d68f306f971a39d949d8f4b5550dba2', - 'dev_requirement' => false, - ), - 'zircote/swagger-php' => array( - 'pretty_version' => '4.4.5', - 'version' => '4.4.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../zircote/swagger-php', - 'aliases' => array(), - 'reference' => 'fd8f1eb8d0165c7a668f307fbccbf3adf33f4017', - 'dev_requirement' => false, - ), ), ); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index 4c3a5d6..f79e574 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 80100)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 70000)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.0.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/vendor/doctrine/annotations/LICENSE b/vendor/doctrine/annotations/LICENSE deleted file mode 100644 index 5e781fc..0000000 --- a/vendor/doctrine/annotations/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2013 Doctrine Project - -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/vendor/doctrine/annotations/README.md b/vendor/doctrine/annotations/README.md deleted file mode 100644 index c2c7eb7..0000000 --- a/vendor/doctrine/annotations/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Doctrine Annotations - -[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) -[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) -[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) -[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) -[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) - -Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). - -## Documentation - -See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). - -## Contributing - -When making a pull request, make sure your changes follow the -[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/vendor/doctrine/annotations/composer.json b/vendor/doctrine/annotations/composer.json deleted file mode 100644 index 00d0231..0000000 --- a/vendor/doctrine/annotations/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "doctrine/annotations", - "type": "library", - "description": "Docblock Annotations Parser", - "keywords": ["annotations", "docblock", "parser"], - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "^7.1 || ^8.0", - "ext-tokenizer": "*", - "doctrine/lexer": "1.*", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "config": { - "sort-packages": true - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", - "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" - }, - "files": [ - "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", - "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" - ] - } -} diff --git a/vendor/doctrine/annotations/docs/en/annotations.rst b/vendor/doctrine/annotations/docs/en/annotations.rst deleted file mode 100644 index 2c3c428..0000000 --- a/vendor/doctrine/annotations/docs/en/annotations.rst +++ /dev/null @@ -1,252 +0,0 @@ -Handling Annotations -==================== - -There are several different approaches to handling annotations in PHP. -Doctrine Annotations maps docblock annotations to PHP classes. Because -not all docblock annotations are used for metadata purposes a filter is -applied to ignore or skip classes that are not Doctrine annotations. - -Take a look at the following code snippet: - -.. code-block:: php - - namespace MyProject\Entities; - - use Doctrine\ORM\Mapping AS ORM; - use Symfony\Component\Validator\Constraints AS Assert; - - /** - * @author Benjamin Eberlei - * @ORM\Entity - * @MyProject\Annotations\Foobarable - */ - class User - { - /** - * @ORM\Id @ORM\Column @ORM\GeneratedValue - * @dummy - * @var int - */ - private $id; - - /** - * @ORM\Column(type="string") - * @Assert\NotEmpty - * @Assert\Email - * @var string - */ - private $email; - } - -In this snippet you can see a variety of different docblock annotations: - -- Documentation annotations such as ``@var`` and ``@author``. These - annotations are ignored and never considered for throwing an - exception due to wrongly used annotations. -- Annotations imported through use statements. The statement ``use - Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace - available as ``@ORM\ClassName``. Same goes for the import of - ``@Assert``. -- The ``@dummy`` annotation. It is not a documentation annotation and - not ignored. For Doctrine Annotations it is not entirely clear how - to handle this annotation. Depending on the configuration an exception - (unknown annotation) will be thrown when parsing this annotation. -- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. - This is transformed directly into the given class name. - -How are these annotations loaded? From looking at the code you could -guess that the ORM Mapping, Assert Validation and the fully qualified -annotation can just be loaded using -the defined PHP autoloaders. This is not the case however: For error -handling reasons every check for class existence inside the -``AnnotationReader`` sets the second parameter $autoload -of ``class_exists($name, $autoload)`` to false. To work flawlessly the -``AnnotationReader`` requires silent autoloaders which many autoloaders are -not. Silent autoloading is NOT part of the `PSR-0 specification -`_ -for autoloading. - -This is why Doctrine Annotations uses its own autoloading mechanism -through a global registry. If you are wondering about the annotation -registry being global, there is no other way to solve the architectural -problems of autoloading annotation classes in a straightforward fashion. -Additionally if you think about PHP autoloading then you recognize it is -a global as well. - -To anticipate the configuration section, making the above PHP class work -with Doctrine Annotations requires this setup: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); - AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); - AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); - - $reader = new AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('dummy'); - -The second block with the annotation registry calls registers all the -three different annotation namespaces that are used. -Doctrine Annotations saves all its annotations in a single file, that is -why ``AnnotationRegistry#registerFile`` is used in contrast to -``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 -compatible loading mechanism for class to file names. - -In the third block, we create the actual ``AnnotationReader`` instance. -Note that we also add ``dummy`` to the global list of ignored -annotations for which we do not throw exceptions. Setting this is -necessary in our example case, otherwise ``@dummy`` would trigger an -exception to be thrown during the parsing of the docblock of -``MyProject\Entities\User#id``. - -Setup and Configuration ------------------------ - -To use the annotations library is simple, you just need to create a new -``AnnotationReader`` instance: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - -This creates a simple annotation reader with no caching other than in -memory (in php arrays). Since parsing docblocks can be expensive you -should cache this process by using a caching reader. - -To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. -This reader decorates the original reader and stores all annotations in a PSR-6 -cache: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\PsrCachedReader; - - $cache = ... // instantiate a PSR-6 Cache pool - - $reader = new PsrCachedReader( - new AnnotationReader(), - $cache, - $debug = true - ); - -The ``debug`` flag is used here as well to invalidate the cache files -when the PHP class with annotations changed and should be used during -development. - -.. warning :: - - The ``AnnotationReader`` works and caches under the - assumption that all annotations of a doc-block are processed at - once. That means that annotation classes that do not exist and - aren't loaded and cannot be autoloaded (using the - AnnotationRegistry) would never be visible and not accessible if a - cache is used unless the cache is cleared and the annotations - requested again, this time with all annotations defined. - -By default the annotation reader returns a list of annotations with -numeric indexes. If you want your annotations to be indexed by their -class name you can wrap the reader in an ``IndexedReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\IndexedReader; - - $reader = new IndexedReader(new AnnotationReader()); - -.. warning:: - - You should never wrap the indexed reader inside a cached reader, - only the other way around. This way you can re-use the cache with - indexed or numeric keys, otherwise your code may experience failures - due to caching in a numerical or indexed format. - -Registering Annotations -~~~~~~~~~~~~~~~~~~~~~~~ - -As explained in the introduction, Doctrine Annotations uses its own -autoloading mechanism to determine if a given annotation has a -corresponding PHP class that can be autoloaded. For annotation -autoloading you have to configure the -``Doctrine\Common\Annotations\AnnotationRegistry``. There are three -different mechanisms to configure annotation autoloading: - -- Calling ``AnnotationRegistry#registerFile($file)`` to register a file - that contains one or more annotation classes. -- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = - null)`` to register that the given namespace contains annotations and - that their base directory is located at the given $dirs or in the - include path if ``NULL`` is passed. The given directories should *NOT* - be the directory where classes of the namespace are in, but the base - directory of the root namespace. The AnnotationRegistry uses a - namespace to directory separator approach to resolve the correct path. -- Calling ``AnnotationRegistry#registerLoader($callable)`` to register - an autoloader callback. The callback accepts the class as first and - only parameter and has to return ``true`` if the corresponding file - was found and included. - -.. note:: - - Loaders have to fail silently, if a class is not found even if it - matches for example the namespace prefix of that loader. Never is a - loader to throw a warning or exception if the loading failed - otherwise parsing doc block annotations will become a huge pain. - -A sample loader callback could look like: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationRegistry; - use Symfony\Component\ClassLoader\UniversalClassLoader; - - AnnotationRegistry::registerLoader(function($class) { - $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; - - if (file_exists("/my/base/path/" . $file)) { - // file_exists() makes sure that the loader fails silently - require "/my/base/path/" . $file; - } - }); - - $loader = new UniversalClassLoader(); - AnnotationRegistry::registerLoader(array($loader, "loadClass")); - - -Ignoring missing exceptions -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default an exception is thrown from the ``AnnotationReader`` if an -annotation was found that: - -- is not part of the list of ignored "documentation annotations"; -- was not imported through a use statement; -- is not a fully qualified class that exists. - -You can disable this behavior for specific names if your docblocks do -not follow strict requirements: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('foo'); - -PHP Imports -~~~~~~~~~~~ - -By default the annotation reader parses the use-statement of a php file -to gain access to the import rules and register them for the annotation -processing. Only if you are using PHP Imports can you validate the -correct usage of annotations and throw exceptions if you misspelled an -annotation. This mechanism is enabled by default. - -To ease the upgrade path, we still allow you to disable this mechanism. -Note however that we will remove this in future versions: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setEnabledPhpImports(false); diff --git a/vendor/doctrine/annotations/docs/en/custom.rst b/vendor/doctrine/annotations/docs/en/custom.rst deleted file mode 100644 index 11fbe1a..0000000 --- a/vendor/doctrine/annotations/docs/en/custom.rst +++ /dev/null @@ -1,443 +0,0 @@ -Custom Annotation Classes -========================= - -If you want to define your own annotations, you just have to group them -in a namespace and register this namespace in the ``AnnotationRegistry``. -Annotation classes have to contain a class-level docblock with the text -``@Annotation``: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** @Annotation */ - class Bar - { - // some code - } - -Inject annotation values ------------------------- - -The annotation parser checks if the annotation constructor has arguments, -if so then it will pass the value array, otherwise it will try to inject -values into public properties directly: - - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * - * Some Annotation using a constructor - */ - class Bar - { - private $foo; - - public function __construct(array $values) - { - $this->foo = $values['foo']; - } - } - - /** - * @Annotation - * - * Some Annotation without a constructor - */ - class Foo - { - public $bar; - } - -Optional: Constructors with Named Parameters --------------------------------------------- - -Starting with Annotations v1.11 a new annotation instantiation strategy -is available that aims at compatibility of Annotation classes with the PHP 8 -attribute feature. You need to declare a constructor with regular parameter -names that match the named arguments in the annotation syntax. - -To enable this feature, you can tag your annotation class with -``@NamedArgumentConstructor`` (available from v1.12) or implement the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface -(available from v1.11 and deprecated as of v1.12). -When using the ``@NamedArgumentConstructor`` tag, the first argument of the -constructor is considered as the default one. - - -Usage with the ``@NamedArgumentContrustor`` tag - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(string $foo) - { - $this->foo = $foo; - } - } - - /** Usable with @Bar(foo="baz") */ - /** Usable with @Bar("baz") */ - -In combination with PHP 8's constructor property promotion feature -you can simplify this to: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - public function __construct(private string $foo) {} - } - - -Usage with the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` -interface (v1.11, deprecated as of v1.12): -.. code-block:: php - - namespace MyCompany\Annotations; - - use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; - - /** @Annotation */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(private string $foo) {} - } - - /** Usable with @Bar(foo="baz") */ - -Annotation Target ------------------ - -``@Target`` indicates the kinds of class elements to which an annotation -type is applicable. Then you could define one or more targets: - -- ``CLASS`` Allowed in class docblocks -- ``PROPERTY`` Allowed in property docblocks -- ``METHOD`` Allowed in the method docblocks -- ``FUNCTION`` Allowed in function dockblocks -- ``ALL`` Allowed in class, property, method and function docblocks -- ``ANNOTATION`` Allowed inside other annotations - -If the annotations is not allowed in the current context, an -``AnnotationException`` is thrown. - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - // some code - } - - /** - * @Annotation - * @Target("CLASS") - */ - class Foo - { - // some code - } - -Attribute types ---------------- - -The annotation parser checks the given parameters using the phpdoc -annotation ``@var``, The data type could be validated using the ``@var`` -annotation on the annotation properties or using the ``@Attributes`` and -``@Attribute`` annotations. - -If the data type does not match you get an ``AnnotationException`` - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - /** @var mixed */ - public $mixed; - - /** @var boolean */ - public $boolean; - - /** @var bool */ - public $bool; - - /** @var float */ - public $float; - - /** @var string */ - public $string; - - /** @var integer */ - public $integer; - - /** @var array */ - public $array; - - /** @var SomeAnnotationClass */ - public $annotation; - - /** @var array */ - public $arrayOfIntegers; - - /** @var array */ - public $arrayOfAnnotations; - } - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - * @Attributes({ - * @Attribute("stringProperty", type = "string"), - * @Attribute("annotProperty", type = "SomeAnnotationClass"), - * }) - */ - class Foo - { - public function __construct(array $values) - { - $this->stringProperty = $values['stringProperty']; - $this->annotProperty = $values['annotProperty']; - } - - // some code - } - -Annotation Required -------------------- - -``@Required`` indicates that the field must be specified when the -annotation is used. If it is not used you get an ``AnnotationException`` -stating that this value can not be null. - -Declaring a required field: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Foo - { - /** @Required */ - public $requiredField; - } - -Usage: - -.. code-block:: php - - /** @Foo(requiredField="value") */ - public $direction; // Valid - - /** @Foo */ - public $direction; // Required field missing, throws an AnnotationException - - -Enumerated values ------------------ - -- An annotation property marked with ``@Enum`` is a field that accepts a - fixed set of scalar values. -- You should use ``@Enum`` fields any time you need to represent fixed - values. -- The annotation parser checks the given value and throws an - ``AnnotationException`` if the value does not match. - - -Declaring an enumerated property: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Direction - { - /** - * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) - */ - public $value; - } - -Annotation usage: - -.. code-block:: php - - /** @Direction("NORTH") */ - public $direction; // Valid value - - /** @Direction("NORTHEAST") */ - public $direction; // Invalid value, throws an AnnotationException - - -Constants ---------- - -The use of constants and class constants is available on the annotations -parser. - -The following usages are allowed: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - use MyCompany\Entity\SomeClass; - - /** - * @Foo(PHP_EOL) - * @Bar(Bar::FOO) - * @Foo({SomeClass::FOO, SomeClass::BAR}) - * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) - */ - class User - { - } - - -Be careful with constants and the cache ! - -.. note:: - - The cached reader will not re-evaluate each time an annotation is - loaded from cache. When a constant is changed the cache must be - cleaned. - - -Usage ------ - -Using the library API is simple. Using the annotations described in the -previous section, you can now annotate other classes with your -annotations: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - - /** - * @Foo(bar="foo") - * @Bar(foo="bar") - */ - class User - { - } - -Now we can write a script to get the annotations above: - -.. code-block:: php - - $reflClass = new ReflectionClass('MyCompany\Entity\User'); - $classAnnotations = $reader->getClassAnnotations($reflClass); - - foreach ($classAnnotations AS $annot) { - if ($annot instanceof \MyCompany\Annotations\Foo) { - echo $annot->bar; // prints "foo"; - } else if ($annot instanceof \MyCompany\Annotations\Bar) { - echo $annot->foo; // prints "bar"; - } - } - -You have a complete API for retrieving annotation class instances from a -class, property or method docblock: - - -Reader API -~~~~~~~~~~ - -Access all annotations of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotations(\ReflectionClass $class); - -Access one annotation of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotation(\ReflectionClass $class, $annotationName); - -Access all annotations of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotations(\ReflectionMethod $method); - -Access one annotation of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); - -Access all annotations of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotations(\ReflectionProperty $property); - -Access one annotation of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); - -Access all annotations of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotations(\ReflectionFunction $property); - -Access one annotation of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/vendor/doctrine/annotations/docs/en/index.rst b/vendor/doctrine/annotations/docs/en/index.rst deleted file mode 100644 index 95476c3..0000000 --- a/vendor/doctrine/annotations/docs/en/index.rst +++ /dev/null @@ -1,101 +0,0 @@ -Introduction -============ - -Doctrine Annotations allows to implement custom annotation -functionality for PHP classes and functions. - -.. code-block:: php - - class Foo - { - /** - * @MyAnnotation(myProperty="value") - */ - private $bar; - } - -Annotations aren't implemented in PHP itself which is why this component -offers a way to use the PHP doc-blocks as a place for the well known -annotation syntax using the ``@`` char. - -Annotations in Doctrine are used for the ORM configuration to build the -class mapping, but it can be used in other projects for other purposes -too. - -Installation -============ - -You can install the Annotation component with composer: - -.. code-block:: - -   $ composer require doctrine/annotations - -Create an annotation class -========================== - -An annotation class is a representation of the later used annotation -configuration in classes. The annotation class of the previous example -looks like this: - -.. code-block:: php - - /** - * @Annotation - */ - final class MyAnnotation - { - public $myProperty; - } - -The annotation class is declared as an annotation by ``@Annotation``. - -:ref:`Read more about custom annotations. ` - -Reading annotations -=================== - -The access to the annotations happens by reflection of the class or function -containing them. There are multiple reader-classes implementing the -``Doctrine\Common\Annotations\Reader`` interface, that can access the -annotations of a class. A common one is -``Doctrine\Common\Annotations\AnnotationReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - // Deprecated and will be removed in 2.0 but currently needed - AnnotationRegistry::registerLoader('class_exists'); - - $reflectionClass = new ReflectionClass(Foo::class); - $property = $reflectionClass->getProperty('bar'); - - $reader = new AnnotationReader(); - $myAnnotation = $reader->getPropertyAnnotation( - $property, - MyAnnotation::class - ); - - echo $myAnnotation->myProperty; // result: "value" - -Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works -if you already have an autoloader configured (i.e. composer autoloader). -Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. - -A reader has multiple methods to access the annotations of a class or -function. - -:ref:`Read more about handling annotations. ` - -IDE Support ------------ - -Some IDEs already provide support for annotations: - -- Eclipse via the `Symfony2 Plugin `_ -- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ - -.. _Read more about handling annotations.: annotations -.. _Read more about custom annotations.: custom diff --git a/vendor/doctrine/annotations/docs/en/sidebar.rst b/vendor/doctrine/annotations/docs/en/sidebar.rst deleted file mode 100644 index 6f5d13c..0000000 --- a/vendor/doctrine/annotations/docs/en/sidebar.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. toctree:: - :depth: 3 - - index - annotations - custom diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php deleted file mode 100644 index 750270e..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php +++ /dev/null @@ -1,59 +0,0 @@ - $data Key-value for properties to be defined in this class. - */ - final public function __construct(array $data) - { - foreach ($data as $key => $value) { - $this->$key = $value; - } - } - - /** - * Error handler for unknown property accessor in Annotation class. - * - * @param string $name Unknown property name. - * - * @throws BadMethodCallException - */ - public function __get($name) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } - - /** - * Error handler for unknown property mutator in Annotation class. - * - * @param string $name Unknown property name. - * @param mixed $value Property value. - * - * @throws BadMethodCallException - */ - public function __set($name, $value) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php deleted file mode 100644 index b1f8514..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php +++ /dev/null @@ -1,21 +0,0 @@ - */ - public $value; -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php deleted file mode 100644 index 35d6410..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php +++ /dev/null @@ -1,69 +0,0 @@ - */ - public $value; - - /** - * Literal target declaration. - * - * @var mixed[] - */ - public $literal; - - /** - * @throws InvalidArgumentException - * - * @phpstan-param array{literal?: mixed[], value: list} $values - */ - public function __construct(array $values) - { - if (! isset($values['literal'])) { - $values['literal'] = []; - } - - foreach ($values['value'] as $var) { - if (! is_scalar($var)) { - throw new InvalidArgumentException(sprintf( - '@Enum supports only scalar values "%s" given.', - is_object($var) ? get_class($var) : gettype($var) - )); - } - } - - foreach ($values['literal'] as $key => $var) { - if (! in_array($key, $values['value'])) { - throw new InvalidArgumentException(sprintf( - 'Undefined enumerator value "%s" for literal "%s".', - $key, - $var - )); - } - } - - $this->value = $values['value']; - $this->literal = $values['literal']; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php deleted file mode 100644 index ae60f7d..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php +++ /dev/null @@ -1,43 +0,0 @@ - */ - public $names; - - /** - * @throws RuntimeException - * - * @phpstan-param array{value: string|list} $values - */ - public function __construct(array $values) - { - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new RuntimeException(sprintf( - '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', - json_encode($values['value']) - )); - } - - $this->names = $values['value']; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php deleted file mode 100644 index 1690601..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php +++ /dev/null @@ -1,13 +0,0 @@ - */ - private static $map = [ - 'ALL' => self::TARGET_ALL, - 'CLASS' => self::TARGET_CLASS, - 'METHOD' => self::TARGET_METHOD, - 'PROPERTY' => self::TARGET_PROPERTY, - 'FUNCTION' => self::TARGET_FUNCTION, - 'ANNOTATION' => self::TARGET_ANNOTATION, - ]; - - /** @phpstan-var list */ - public $value; - - /** - * Targets as bitmask. - * - * @var int - */ - public $targets; - - /** - * Literal target declaration. - * - * @var string - */ - public $literal; - - /** - * @throws InvalidArgumentException - * - * @phpstan-param array{value?: string|list} $values - */ - public function __construct(array $values) - { - if (! isset($values['value'])) { - $values['value'] = null; - } - - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new InvalidArgumentException( - sprintf( - '@Target expects either a string value, or an array of strings, "%s" given.', - is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) - ) - ); - } - - $bitmask = 0; - foreach ($values['value'] as $literal) { - if (! isset(self::$map[$literal])) { - throw new InvalidArgumentException( - sprintf( - 'Invalid Target "%s". Available targets: [%s]', - $literal, - implode(', ', array_keys(self::$map)) - ) - ); - } - - $bitmask |= self::$map[$literal]; - } - - $this->targets = $bitmask; - $this->value = $values['value']; - $this->literal = implode(', ', $this->value); - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php deleted file mode 100644 index b1ea64e..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php +++ /dev/null @@ -1,171 +0,0 @@ - $available - */ - public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) - { - return new self(sprintf( - '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', - $attributeName, - $annotationName, - $context, - implode(', ', $available), - is_object($given) ? get_class($given) : $given - )); - } - - /** - * @return AnnotationException - */ - public static function optimizerPlusSaveComments() - { - return new self( - 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' - ); - } - - /** - * @return AnnotationException - */ - public static function optimizerPlusLoadComments() - { - return new self( - 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' - ); - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php deleted file mode 100644 index 1f538ee..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php +++ /dev/null @@ -1,389 +0,0 @@ - - */ - private static $globalImports = [ - 'ignoreannotation' => Annotation\IgnoreAnnotation::class, - ]; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNamespaces = []; - - /** - * Add a new annotation to the globally ignored annotation names with regard to exception handling. - * - * @param string $name - */ - public static function addGlobalIgnoredName($name) - { - self::$globalIgnoredNames[$name] = true; - } - - /** - * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. - * - * @param string $namespace - */ - public static function addGlobalIgnoredNamespace($namespace) - { - self::$globalIgnoredNamespaces[$namespace] = true; - } - - /** - * Annotations parser. - * - * @var DocParser - */ - private $parser; - - /** - * Annotations parser used to collect parsing metadata. - * - * @var DocParser - */ - private $preParser; - - /** - * PHP parser used to collect imports. - * - * @var PhpParser - */ - private $phpParser; - - /** - * In-memory cache mechanism to store imported annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $imports = []; - - /** - * In-memory cache mechanism to store ignored annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $ignoredAnnotationNames = []; - - /** - * Initializes a new AnnotationReader. - * - * @throws AnnotationException - */ - public function __construct(?DocParser $parser = null) - { - if ( - extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || - ini_get('opcache.save_comments') === '0') - ) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - // Make sure that the IgnoreAnnotation annotation is loaded - class_exists(IgnoreAnnotation::class); - - $this->parser = $parser ?: new DocParser(); - - $this->preParser = new DocParser(); - - $this->preParser->setImports(self::$globalImports); - $this->preParser->setIgnoreNotImportedAnnotations(true); - $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); - - $this->phpParser = new PhpParser(); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $this->parser->setTarget(Target::TARGET_CLASS); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $context = 'property ' . $class->getName() . '::$' . $property->getName(); - - $this->parser->setTarget(Target::TARGET_PROPERTY); - $this->parser->setImports($this->getPropertyImports($property)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($property->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - - $this->parser->setTarget(Target::TARGET_METHOD); - $this->parser->setImports($this->getMethodImports($method)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($method->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets the annotations applied to a function. - * - * @phpstan-return list An array of Annotations. - */ - public function getFunctionAnnotations(ReflectionFunction $function): array - { - $context = 'function ' . $function->getName(); - - $this->parser->setTarget(Target::TARGET_FUNCTION); - $this->parser->setImports($this->getImports($function)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($function->getDocComment(), $context); - } - - /** - * Gets a function annotation. - * - * @return object|null The Annotation or NULL, if the requested annotation does not exist. - */ - public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) - { - $annotations = $this->getFunctionAnnotations($function); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Returns the ignored annotations for the given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getIgnoredAnnotationNames($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->ignoredAnnotationNames[$type][$name])) { - return $this->ignoredAnnotationNames[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->ignoredAnnotationNames[$type][$name]; - } - - /** - * Retrieves imports for a class or a function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getImports($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->imports[$type][$name])) { - return $this->imports[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->imports[$type][$name]; - } - - /** - * Retrieves imports for methods. - * - * @return array - */ - private function getMethodImports(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if ( - ! $trait->hasMethod($method->getName()) - || $trait->getFileName() !== $method->getFileName() - ) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Retrieves imports for properties. - * - * @return array - */ - private function getPropertyImports(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if (! $trait->hasProperty($property->getName())) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Collects parsing metadata for a given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - */ - private function collectParsingMetadata($reflection): void - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - $ignoredAnnotationNames = self::$globalIgnoredNames; - $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); - - foreach ($annotations as $annotation) { - if (! ($annotation instanceof IgnoreAnnotation)) { - continue; - } - - foreach ($annotation->names as $annot) { - $ignoredAnnotationNames[$annot] = true; - } - } - - $this->imports[$type][$name] = array_merge( - self::$globalImports, - $this->phpParser->parseUseStatements($reflection), - [ - '__NAMESPACE__' => $reflection->getNamespaceName(), - 'self' => $name, - ] - ); - - $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php deleted file mode 100644 index 259d497..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php +++ /dev/null @@ -1,190 +0,0 @@ -|null $dirs - */ - public static function registerAutoloadNamespace(string $namespace, $dirs = null): void - { - self::$autoloadNamespaces[$namespace] = $dirs; - } - - /** - * Registers multiple namespaces. - * - * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - * - * @param string[][]|string[]|null[] $namespaces indexed by namespace name - */ - public static function registerAutoloadNamespaces(array $namespaces): void - { - self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); - } - - /** - * Registers an autoloading callable for annotations, much like spl_autoload_register(). - * - * NOTE: These class loaders HAVE to be silent when a class was not found! - * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerLoader(callable $callable): void - { - // Reset our static cache now that we have a new loader to work with - self::$failedToAutoload = []; - self::$loaders[] = $callable; - } - - /** - * Registers an autoloading callable for annotations, if it is not already registered - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerUniqueLoader(callable $callable): void - { - if (in_array($callable, self::$loaders, true)) { - return; - } - - self::registerLoader($callable); - } - - /** - * Autoloads an annotation class silently. - */ - public static function loadAnnotationClass(string $class): bool - { - if (class_exists($class, false)) { - return true; - } - - if (array_key_exists($class, self::$failedToAutoload)) { - return false; - } - - foreach (self::$autoloadNamespaces as $namespace => $dirs) { - if (strpos($class, $namespace) !== 0) { - continue; - } - - $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; - - if ($dirs === null) { - $path = stream_resolve_include_path($file); - if ($path) { - require $path; - - return true; - } - } else { - foreach ((array) $dirs as $dir) { - if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { - require $dir . DIRECTORY_SEPARATOR . $file; - - return true; - } - } - } - } - - foreach (self::$loaders as $loader) { - if ($loader($class) === true) { - return true; - } - } - - if ( - self::$loaders === [] && - self::$autoloadNamespaces === [] && - self::$registerFileUsed === false && - class_exists($class) - ) { - return true; - } - - self::$failedToAutoload[$class] = null; - - return false; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php deleted file mode 100644 index c036b2d..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php +++ /dev/null @@ -1,268 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - /** - * @param bool $debug - */ - public function __construct(Reader $reader, Cache $cache, $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getClassAnnotations($class); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getPropertyAnnotations($property); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getMethodAnnotations($method); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** - * Fetches a value from the cache. - * - * @param string $cacheKey The cache key. - * - * @return mixed The cached value or false when the value is not in cache. - */ - private function fetchFromCache($cacheKey, ReflectionClass $class) - { - $data = $this->cache->fetch($cacheKey); - if ($data !== false) { - if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { - return $data; - } - } - - return false; - } - - /** - * Saves a value to the cache. - * - * @param string $cacheKey The cache key. - * @param mixed $value The value. - * - * @return void - */ - private function saveToCache($cacheKey, $value) - { - $this->cache->save($cacheKey, $value); - if (! $this->debug) { - return; - } - - $this->cache->save('[C]' . $cacheKey, time()); - } - - /** - * Checks if the cache is fresh. - * - * @param string $cacheKey - * - * @return bool - */ - private function isCacheFresh($cacheKey, ReflectionClass $class) - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php deleted file mode 100644 index f6567c5..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php +++ /dev/null @@ -1,129 +0,0 @@ -= 100 - public const T_IDENTIFIER = 100; - public const T_AT = 101; - public const T_CLOSE_CURLY_BRACES = 102; - public const T_CLOSE_PARENTHESIS = 103; - public const T_COMMA = 104; - public const T_EQUALS = 105; - public const T_FALSE = 106; - public const T_NAMESPACE_SEPARATOR = 107; - public const T_OPEN_CURLY_BRACES = 108; - public const T_OPEN_PARENTHESIS = 109; - public const T_TRUE = 110; - public const T_NULL = 111; - public const T_COLON = 112; - public const T_MINUS = 113; - - /** @var array */ - protected $noCase = [ - '@' => self::T_AT, - ',' => self::T_COMMA, - '(' => self::T_OPEN_PARENTHESIS, - ')' => self::T_CLOSE_PARENTHESIS, - '{' => self::T_OPEN_CURLY_BRACES, - '}' => self::T_CLOSE_CURLY_BRACES, - '=' => self::T_EQUALS, - ':' => self::T_COLON, - '-' => self::T_MINUS, - '\\' => self::T_NAMESPACE_SEPARATOR, - ]; - - /** @var array */ - protected $withCase = [ - 'true' => self::T_TRUE, - 'false' => self::T_FALSE, - 'null' => self::T_NULL, - ]; - - /** - * Whether the next token starts immediately, or if there were - * non-captured symbols before that - */ - public function nextTokenIsAdjacent(): bool - { - return $this->token === null - || ($this->lookahead !== null - && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); - } - - /** - * {@inheritdoc} - */ - protected function getCatchablePatterns() - { - return [ - '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', - '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', - '"(?:""|[^"])*+"', - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNonCatchablePatterns() - { - return ['\s+', '\*+', '(.)']; - } - - /** - * {@inheritdoc} - */ - protected function getType(&$value) - { - $type = self::T_NONE; - - if ($value[0] === '"') { - $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); - - return self::T_STRING; - } - - if (isset($this->noCase[$value])) { - return $this->noCase[$value]; - } - - if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { - return self::T_IDENTIFIER; - } - - $lowerValue = strtolower($value); - - if (isset($this->withCase[$lowerValue])) { - return $this->withCase[$lowerValue]; - } - - // Checking numeric value - if (is_numeric($value)) { - return strpos($value, '.') !== false || stripos($value, 'e') !== false - ? self::T_FLOAT : self::T_INTEGER; - } - - return $type; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php deleted file mode 100644 index ae530c5..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php +++ /dev/null @@ -1,1459 +0,0 @@ - - */ - private static $classIdentifiers = [ - DocLexer::T_IDENTIFIER, - DocLexer::T_TRUE, - DocLexer::T_FALSE, - DocLexer::T_NULL, - ]; - - /** - * The lexer. - * - * @var DocLexer - */ - private $lexer; - - /** - * Current target context. - * - * @var int - */ - private $target; - - /** - * Doc parser used to collect annotation target. - * - * @var DocParser - */ - private static $metadataParser; - - /** - * Flag to control if the current annotation is nested or not. - * - * @var bool - */ - private $isNestedAnnotation = false; - - /** - * Hashmap containing all use-statements that are to be used when parsing - * the given doc block. - * - * @var array - */ - private $imports = []; - - /** - * This hashmap is used internally to cache results of class_exists() - * look-ups. - * - * @var array - */ - private $classExists = []; - - /** - * Whether annotations that have not been imported should be ignored. - * - * @var bool - */ - private $ignoreNotImportedAnnotations = false; - - /** - * An array of default namespaces if operating in simple mode. - * - * @var string[] - */ - private $namespaces = []; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names must be the raw names as used in the class, not the fully qualified - * - * @var bool[] indexed by annotation name - */ - private $ignoredAnnotationNames = []; - - /** - * A list with annotations in namespaced format - * that are not causing exceptions when not resolved to an annotation class. - * - * @var bool[] indexed by namespace name - */ - private $ignoredAnnotationNamespaces = []; - - /** @var string */ - private $context = ''; - - /** - * Hash-map for caching annotation metadata. - * - * @var array - */ - private static $annotationMetadata = [ - Annotation\Target::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'properties' => [], - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'attribute_types' => [ - 'value' => [ - 'required' => false, - 'type' => 'array', - 'array_type' => 'string', - 'value' => 'array', - ], - ], - ], - Annotation\Attribute::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_ANNOTATION', - 'targets' => Target::TARGET_ANNOTATION, - 'default_property' => 'name', - 'properties' => [ - 'name' => 'name', - 'type' => 'type', - 'required' => 'required', - ], - 'attribute_types' => [ - 'value' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'type' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'required' => [ - 'required' => false, - 'type' => 'boolean', - 'value' => 'boolean', - ], - ], - ], - Annotation\Attributes::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - 'array_type' => Annotation\Attribute::class, - 'value' => 'array<' . Annotation\Attribute::class . '>', - ], - ], - ], - Annotation\Enum::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_PROPERTY', - 'targets' => Target::TARGET_PROPERTY, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - ], - 'literal' => [ - 'type' => 'array', - 'required' => false, - ], - ], - ], - Annotation\NamedArgumentConstructor::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => null, - 'properties' => [], - 'attribute_types' => [], - ], - ]; - - /** - * Hash-map for handle types declaration. - * - * @var array - */ - private static $typeMap = [ - 'float' => 'double', - 'bool' => 'boolean', - // allow uppercase Boolean in honor of George Boole - 'Boolean' => 'boolean', - 'int' => 'integer', - ]; - - /** - * Constructs a new DocParser. - */ - public function __construct() - { - $this->lexer = new DocLexer(); - } - - /** - * Sets the annotation names that are ignored during the parsing process. - * - * The names are supposed to be the raw names as used in the class, not the - * fully qualified class names. - * - * @param bool[] $names indexed by annotation name - * - * @return void - */ - public function setIgnoredAnnotationNames(array $names) - { - $this->ignoredAnnotationNames = $names; - } - - /** - * Sets the annotation namespaces that are ignored during the parsing process. - * - * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name - * - * @return void - */ - public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) - { - $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; - } - - /** - * Sets ignore on not-imported annotations. - * - * @param bool $bool - * - * @return void - */ - public function setIgnoreNotImportedAnnotations($bool) - { - $this->ignoreNotImportedAnnotations = (bool) $bool; - } - - /** - * Sets the default namespaces. - * - * @param string $namespace - * - * @return void - * - * @throws RuntimeException - */ - public function addNamespace($namespace) - { - if ($this->imports) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->namespaces[] = $namespace; - } - - /** - * Sets the imports. - * - * @param array $imports - * - * @return void - * - * @throws RuntimeException - */ - public function setImports(array $imports) - { - if ($this->namespaces) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->imports = $imports; - } - - /** - * Sets current target context as bitmask. - * - * @param int $target - * - * @return void - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Parses the given docblock string for annotations. - * - * @param string $input The docblock string to parse. - * @param string $context The parsing context. - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. - */ - public function parse($input, $context = '') - { - $pos = $this->findInitialTokenPosition($input); - if ($pos === null) { - return []; - } - - $this->context = $context; - - $this->lexer->setInput(trim(substr($input, $pos), '* /')); - $this->lexer->moveNext(); - - return $this->Annotations(); - } - - /** - * Finds the first valid annotation - * - * @param string $input The docblock string to parse - */ - private function findInitialTokenPosition($input): ?int - { - $pos = 0; - - // search for first valid annotation - while (($pos = strpos($input, '@', $pos)) !== false) { - $preceding = substr($input, $pos - 1, 1); - - // if the @ is preceded by a space, a tab or * it is valid - if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { - return $pos; - } - - $pos++; - } - - return null; - } - - /** - * Attempts to match the given token with the current lookahead token. - * If they match, updates the lookahead token; otherwise raises a syntax error. - * - * @param int $token Type of token. - * - * @return bool True if tokens match; false otherwise. - * - * @throws AnnotationException - */ - private function match(int $token): bool - { - if (! $this->lexer->isNextToken($token)) { - throw $this->syntaxError($this->lexer->getLiteral($token)); - } - - return $this->lexer->moveNext(); - } - - /** - * Attempts to match the current lookahead token with any of the given tokens. - * - * If any of them matches, this method updates the lookahead token; otherwise - * a syntax error is raised. - * - * @throws AnnotationException - * - * @phpstan-param list $tokens - */ - private function matchAny(array $tokens): bool - { - if (! $this->lexer->isNextTokenAny($tokens)) { - throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); - } - - return $this->lexer->moveNext(); - } - - /** - * Generates a new syntax error. - * - * @param string $expected Expected string. - * @param mixed[]|null $token Optional token. - */ - private function syntaxError(string $expected, ?array $token = null): AnnotationException - { - if ($token === null) { - $token = $this->lexer->lookahead; - } - - $message = sprintf('Expected %s, got ', $expected); - $message .= $this->lexer->lookahead === null - ? 'end of string' - : sprintf("'%s' at position %s", $token['value'], $token['position']); - - if (strlen($this->context)) { - $message .= ' in ' . $this->context; - } - - $message .= '.'; - - return AnnotationException::syntaxError($message); - } - - /** - * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism - * but uses the {@link AnnotationRegistry} to load classes. - * - * @param class-string $fqcn - */ - private function classExists(string $fqcn): bool - { - if (isset($this->classExists[$fqcn])) { - return $this->classExists[$fqcn]; - } - - // first check if the class already exists, maybe loaded through another AnnotationReader - if (class_exists($fqcn, false)) { - return $this->classExists[$fqcn] = true; - } - - // final check, does this class exist? - return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); - } - - /** - * Collects parsing metadata for a given annotation class - * - * @param class-string $name The annotation name - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function collectAnnotationMetadata(string $name): void - { - if (self::$metadataParser === null) { - self::$metadataParser = new self(); - - self::$metadataParser->setIgnoreNotImportedAnnotations(true); - self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); - self::$metadataParser->setImports([ - 'enum' => Enum::class, - 'target' => Target::class, - 'attribute' => Attribute::class, - 'attributes' => Attributes::class, - 'namedargumentconstructor' => NamedArgumentConstructor::class, - ]); - - // Make sure that annotations from metadata are loaded - class_exists(Enum::class); - class_exists(Target::class); - class_exists(Attribute::class); - class_exists(Attributes::class); - class_exists(NamedArgumentConstructor::class); - } - - $class = new ReflectionClass($name); - $docComment = $class->getDocComment(); - - // Sets default values for annotation metadata - $constructor = $class->getConstructor(); - $metadata = [ - 'default_property' => null, - 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, - 'constructor_args' => [], - 'properties' => [], - 'property_types' => [], - 'attribute_types' => [], - 'targets_literal' => null, - 'targets' => Target::TARGET_ALL, - 'is_annotation' => strpos($docComment, '@Annotation') !== false, - ]; - - $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] - && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); - - // verify that the class is really meant to be an annotation - if ($metadata['is_annotation']) { - self::$metadataParser->setTarget(Target::TARGET_CLASS); - - foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { - if ($annotation instanceof Target) { - $metadata['targets'] = $annotation->targets; - $metadata['targets_literal'] = $annotation->literal; - - continue; - } - - if ($annotation instanceof NamedArgumentConstructor) { - $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; - if ($metadata['has_named_argument_constructor']) { - // choose the first argument as the default property - $metadata['default_property'] = $constructor->getParameters()[0]->getName(); - } - } - - if (! ($annotation instanceof Attributes)) { - continue; - } - - foreach ($annotation->value as $attribute) { - $this->collectAttributeTypeMetadata($metadata, $attribute); - } - } - - // if not has a constructor will inject values into public properties - if ($metadata['has_constructor'] === false) { - // collect all public properties - foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { - $metadata['properties'][$property->name] = $property->name; - - $propertyComment = $property->getDocComment(); - if ($propertyComment === false) { - continue; - } - - $attribute = new Attribute(); - - $attribute->required = (strpos($propertyComment, '@Required') !== false); - $attribute->name = $property->name; - $attribute->type = (strpos($propertyComment, '@var') !== false && - preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) - ? $matches[1] - : 'mixed'; - - $this->collectAttributeTypeMetadata($metadata, $attribute); - - // checks if the property has @Enum - if (strpos($propertyComment, '@Enum') === false) { - continue; - } - - $context = 'property ' . $class->name . '::$' . $property->name; - - self::$metadataParser->setTarget(Target::TARGET_PROPERTY); - - foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { - if (! $annotation instanceof Enum) { - continue; - } - - $metadata['enum'][$property->name]['value'] = $annotation->value; - $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) - ? $annotation->literal - : $annotation->value; - } - } - - // choose the first property as default property - $metadata['default_property'] = reset($metadata['properties']); - } elseif ($metadata['has_named_argument_constructor']) { - foreach ($constructor->getParameters() as $parameter) { - $metadata['constructor_args'][$parameter->getName()] = [ - 'position' => $parameter->getPosition(), - 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, - ]; - } - } - } - - self::$annotationMetadata[$name] = $metadata; - } - - /** - * Collects parsing metadata for a given attribute. - * - * @param mixed[] $metadata - */ - private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void - { - // handle internal type declaration - $type = self::$typeMap[$attribute->type] ?? $attribute->type; - - // handle the case if the property type is mixed - if ($type === 'mixed') { - return; - } - - // Evaluate type - $pos = strpos($type, '<'); - if ($pos !== false) { - // Checks if the property has array - $arrayType = substr($type, $pos + 1, -1); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } else { - // Checks if the property has type[] - $pos = strrpos($type, '['); - if ($pos !== false) { - $arrayType = substr($type, 0, $pos); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } - } - - $metadata['attribute_types'][$attribute->name]['type'] = $type; - $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; - $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; - } - - /** - * Annotations ::= Annotation {[ "*" ]* [Annotation]}* - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return list - */ - private function Annotations(): array - { - $annotations = []; - - while ($this->lexer->lookahead !== null) { - if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is preceded by non-catchable pattern - if ( - $this->lexer->token !== null && - $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( - $this->lexer->token['value'] - ) - ) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is followed by either a namespace separator, or - // an identifier token - $peek = $this->lexer->glimpse(); - if ( - ($peek === null) - || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( - $peek['type'], - self::$classIdentifiers, - true - )) - || $peek['position'] !== $this->lexer->lookahead['position'] + 1 - ) { - $this->lexer->moveNext(); - continue; - } - - $this->isNestedAnnotation = false; - $annot = $this->Annotation(); - if ($annot === false) { - continue; - } - - $annotations[] = $annot; - } - - return $annotations; - } - - /** - * Annotation ::= "@" AnnotationName MethodCall - * AnnotationName ::= QualifiedName | SimpleName - * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName - * NameSpacePart ::= identifier | null | false | true - * SimpleName ::= identifier | null | false | true - * - * @return object|false False if it is not a valid annotation. - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Annotation() - { - $this->match(DocLexer::T_AT); - - // check if we have an annotation - $name = $this->Identifier(); - - if ( - $this->lexer->isNextToken(DocLexer::T_MINUS) - && $this->lexer->nextTokenIsAdjacent() - ) { - // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded - return false; - } - - // only process names which are not fully qualified, yet - // fully qualified names must start with a \ - $originalName = $name; - - if ($name[0] !== '\\') { - $pos = strpos($name, '\\'); - $alias = ($pos === false) ? $name : substr($name, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - if ($this->namespaces) { - foreach ($this->namespaces as $namespace) { - if ($this->classExists($namespace . '\\' . $name)) { - $name = $namespace . '\\' . $name; - $found = true; - break; - } - } - } elseif (isset($this->imports[$loweredAlias])) { - $namespace = ltrim($this->imports[$loweredAlias], '\\'); - $name = ($pos !== false) - ? $namespace . substr($name, $pos) - : $namespace; - $found = $this->classExists($name); - } elseif ( - ! isset($this->ignoredAnnotationNames[$name]) - && isset($this->imports['__NAMESPACE__']) - && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) - ) { - $name = $this->imports['__NAMESPACE__'] . '\\' . $name; - $found = true; - } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { - $found = true; - } - - if (! $found) { - if ($this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? -EXCEPTION - , - $name, - $this->context - )); - } - } - - $name = ltrim($name, '\\'); - - if (! $this->classExists($name)) { - throw AnnotationException::semanticalError(sprintf( - 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', - $name, - $this->context - )); - } - - // at this point, $name contains the fully qualified class name of the - // annotation, and it is also guaranteed that this class exists, and - // that it is loaded - - // collects the metadata annotation only if there is not yet - if (! isset(self::$annotationMetadata[$name])) { - $this->collectAnnotationMetadata($name); - } - - // verify that the class is really meant to be an annotation and not just any ordinary class - if (self::$annotationMetadata[$name]['is_annotation'] === false) { - if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The class "%s" is not annotated with @Annotation. -Are you sure this class can be used as annotation? -If so, then you need to add @Annotation to the _class_ doc comment of "%s". -If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. -EXCEPTION - , - $name, - $name, - $originalName, - $this->context - )); - } - - //if target is nested annotation - $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; - - // Next will be nested - $this->isNestedAnnotation = true; - - //if annotation does not support current target - if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { - throw AnnotationException::semanticalError( - sprintf( - <<<'EXCEPTION' -Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. -EXCEPTION - , - $originalName, - $this->context, - self::$annotationMetadata[$name]['targets_literal'] - ) - ); - } - - $arguments = $this->MethodCall(); - $values = $this->resolvePositionalValues($arguments, $name); - - if (isset(self::$annotationMetadata[$name]['enum'])) { - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { - // checks if the attribute is a valid enumerator - if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { - throw AnnotationException::enumeratorError( - $property, - $name, - $this->context, - $enum['literal'], - $values[$property] - ); - } - } - } - - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { - if ( - $property === self::$annotationMetadata[$name]['default_property'] - && ! isset($values[$property]) && isset($values['value']) - ) { - $property = 'value'; - } - - // handle a not given attribute or null value - if (! isset($values[$property])) { - if ($type['required']) { - throw AnnotationException::requiredError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'] - ); - } - - continue; - } - - if ($type['type'] === 'array') { - // handle the case of a single value - if (! is_array($values[$property])) { - $values[$property] = [$values[$property]]; - } - - // checks if the attribute has array type declaration, such as "array" - if (isset($type['array_type'])) { - foreach ($values[$property] as $item) { - if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', - $item - ); - } - } - } - } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'], - $values[$property] - ); - } - } - - if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { - if (PHP_VERSION_ID >= 80000) { - return new $name(...$values); - } - - $positionalValues = []; - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $positionalValues[$parameter['position']] = $parameter['default']; - } - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s" -that can be set through its named arguments constructor. -Available named arguments: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) - )); - } - - $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; - } - - return new $name(...$positionalValues); - } - - // check if the annotation expects values via the constructor, - // or directly injected into public properties - if (self::$annotationMetadata[$name]['has_constructor'] === true) { - return new $name($values); - } - - $instance = new $name(); - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { - if ($property !== 'value') { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s". -Available properties: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', self::$annotationMetadata[$name]['properties']) - )); - } - - // handle the case if the property has no annotations - $property = self::$annotationMetadata[$name]['default_property']; - if (! $property) { - throw AnnotationException::creationError(sprintf( - 'The annotation @%s declared on %s does not accept any values, but got %s.', - $originalName, - $this->context, - json_encode($values) - )); - } - } - - $instance->{$property} = $value; - } - - return $instance; - } - - /** - * MethodCall ::= ["(" [Values] ")"] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function MethodCall(): array - { - $values = []; - - if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { - return $values; - } - - $this->match(DocLexer::T_OPEN_PARENTHESIS); - - if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - $values = $this->Values(); - } - - $this->match(DocLexer::T_CLOSE_PARENTHESIS); - - return $values; - } - - /** - * Values ::= Array | Value {"," Value}* [","] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Values(): array - { - $values = [$this->Value()]; - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - break; - } - - $token = $this->lexer->lookahead; - $value = $this->Value(); - - $values[] = $value; - } - - $namedArguments = []; - $positionalArguments = []; - foreach ($values as $k => $value) { - if (is_object($value) && $value instanceof stdClass) { - $namedArguments[$value->name] = $value->value; - } else { - $positionalArguments[$k] = $value; - } - } - - return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; - } - - /** - * Constant ::= integer | string | float | boolean - * - * @return mixed - * - * @throws AnnotationException - */ - private function Constant() - { - $identifier = $this->Identifier(); - - if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { - [$className, $const] = explode('::', $identifier); - - $pos = strpos($className, '\\'); - $alias = ($pos === false) ? $className : substr($className, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - switch (true) { - case ! empty($this->namespaces): - foreach ($this->namespaces as $ns) { - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - break; - } - } - - break; - - case isset($this->imports[$loweredAlias]): - $found = true; - $className = ($pos !== false) - ? $this->imports[$loweredAlias] . substr($className, $pos) - : $this->imports[$loweredAlias]; - break; - - default: - if (isset($this->imports['__NAMESPACE__'])) { - $ns = $this->imports['__NAMESPACE__']; - - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - } - } - - break; - } - - if ($found) { - $identifier = $className . '::' . $const; - } - } - - /** - * Checks if identifier ends with ::class and remove the leading backslash if it exists. - */ - if ( - $this->identifierEndsWithClassConstant($identifier) && - ! $this->identifierStartsWithBackslash($identifier) - ) { - return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); - } - - if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { - return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); - } - - if (! defined($identifier)) { - throw AnnotationException::semanticalErrorConstants($identifier, $this->context); - } - - return constant($identifier); - } - - private function identifierStartsWithBackslash(string $identifier): bool - { - return $identifier[0] === '\\'; - } - - private function identifierEndsWithClassConstant(string $identifier): bool - { - return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); - } - - /** - * @return int|false - */ - private function getClassConstantPositionInIdentifier(string $identifier) - { - return stripos($identifier, '::class'); - } - - /** - * Identifier ::= string - * - * @throws AnnotationException - */ - private function Identifier(): string - { - // check if we have an annotation - if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { - throw $this->syntaxError('namespace separator or identifier'); - } - - $this->lexer->moveNext(); - - $className = $this->lexer->token['value']; - - while ( - $this->lexer->lookahead !== null && - $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + - strlen($this->lexer->token['value'])) && - $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) - ) { - $this->match(DocLexer::T_NAMESPACE_SEPARATOR); - $this->matchAny(self::$classIdentifiers); - - $className .= '\\' . $this->lexer->token['value']; - } - - return $className; - } - - /** - * Value ::= PlainValue | FieldAssignment - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Value() - { - $peek = $this->lexer->glimpse(); - - if ($peek['type'] === DocLexer::T_EQUALS) { - return $this->FieldAssignment(); - } - - return $this->PlainValue(); - } - - /** - * PlainValue ::= integer | string | float | boolean | Array | Annotation - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function PlainValue() - { - if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { - return $this->Arrayx(); - } - - if ($this->lexer->isNextToken(DocLexer::T_AT)) { - return $this->Annotation(); - } - - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - return $this->Constant(); - } - - switch ($this->lexer->lookahead['type']) { - case DocLexer::T_STRING: - $this->match(DocLexer::T_STRING); - - return $this->lexer->token['value']; - - case DocLexer::T_INTEGER: - $this->match(DocLexer::T_INTEGER); - - return (int) $this->lexer->token['value']; - - case DocLexer::T_FLOAT: - $this->match(DocLexer::T_FLOAT); - - return (float) $this->lexer->token['value']; - - case DocLexer::T_TRUE: - $this->match(DocLexer::T_TRUE); - - return true; - - case DocLexer::T_FALSE: - $this->match(DocLexer::T_FALSE); - - return false; - - case DocLexer::T_NULL: - $this->match(DocLexer::T_NULL); - - return null; - - default: - throw $this->syntaxError('PlainValue'); - } - } - - /** - * FieldAssignment ::= FieldName "=" PlainValue - * FieldName ::= identifier - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function FieldAssignment(): stdClass - { - $this->match(DocLexer::T_IDENTIFIER); - $fieldName = $this->lexer->token['value']; - - $this->match(DocLexer::T_EQUALS); - - $item = new stdClass(); - $item->name = $fieldName; - $item->value = $this->PlainValue(); - - return $item; - } - - /** - * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Arrayx(): array - { - $array = $values = []; - - $this->match(DocLexer::T_OPEN_CURLY_BRACES); - - // If the array is empty, stop parsing and return. - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - return $array; - } - - $values[] = $this->ArrayEntry(); - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - // optional trailing comma - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - break; - } - - $values[] = $this->ArrayEntry(); - } - - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - foreach ($values as $value) { - [$key, $val] = $value; - - if ($key !== null) { - $array[$key] = $val; - } else { - $array[] = $val; - } - } - - return $array; - } - - /** - * ArrayEntry ::= Value | KeyValuePair - * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant - * Key ::= string | integer | Constant - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return array{mixed, mixed} - */ - private function ArrayEntry(): array - { - $peek = $this->lexer->glimpse(); - - if ( - $peek['type'] === DocLexer::T_EQUALS - || $peek['type'] === DocLexer::T_COLON - ) { - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - $key = $this->Constant(); - } else { - $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); - $key = $this->lexer->token['value']; - } - - $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); - - return [$key, $this->PlainValue()]; - } - - return [null, $this->Value()]; - } - - /** - * Checks whether the given $name matches any ignored annotation name or namespace - */ - private function isIgnoredAnnotation(string $name): bool - { - if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { - return true; - } - - foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { - $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; - - if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { - return true; - } - } - - return false; - } - - /** - * Resolve positional arguments (without name) to named ones - * - * @param array $arguments - * - * @return array - */ - private function resolvePositionalValues(array $arguments, string $name): array - { - $positionalArguments = $arguments['positional_arguments'] ?? []; - $values = $arguments['named_arguments'] ?? []; - - if ( - self::$annotationMetadata[$name]['has_named_argument_constructor'] - && self::$annotationMetadata[$name]['default_property'] !== null - ) { - // We must ensure that we don't have positional arguments after named ones - $positions = array_keys($positionalArguments); - $lastPosition = null; - foreach ($positions as $position) { - if ( - ($lastPosition === null && $position !== 0) || - ($lastPosition !== null && $position !== $lastPosition + 1) - ) { - throw $this->syntaxError('Positional arguments after named arguments is not allowed'); - } - - $lastPosition = $position; - } - - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $position = $parameter['position']; - if (isset($values[$property]) || ! isset($positionalArguments[$position])) { - continue; - } - - $values[$property] = $positionalArguments[$position]; - } - } else { - if (count($positionalArguments) > 0 && ! isset($values['value'])) { - if (count($positionalArguments) === 1) { - $value = array_pop($positionalArguments); - } else { - $value = array_values($positionalArguments); - } - - $values['value'] = $value; - } - } - - return $values; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php deleted file mode 100644 index 6c6c22c..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php +++ /dev/null @@ -1,315 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var array */ - private $classNameHashes = []; - - /** @var int */ - private $umask; - - /** - * @param string $cacheDir - * @param bool $debug - * @param int $umask - * - * @throws InvalidArgumentException - */ - public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) - { - if (! is_int($umask)) { - throw new InvalidArgumentException(sprintf( - 'The parameter umask must be an integer, was: %s', - gettype($umask) - )); - } - - $this->reader = $reader; - $this->umask = $umask; - - if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { - throw new InvalidArgumentException(sprintf( - 'The directory "%s" does not exist and could not be created.', - $cacheDir - )); - } - - $this->dir = rtrim($cacheDir, '\\/'); - $this->debug = $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name]; - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Saves the cache file. - * - * @param string $path - * @param mixed $data - * - * @return void - */ - private function saveCacheFile($path, $data) - { - if (! is_writable($this->dir)) { - throw new InvalidArgumentException(sprintf( - <<<'EXCEPTION' -The directory "%s" is not writable. Both the webserver and the console user need access. -You can manage access rights for multiple users with "chmod +a". -If your system does not support this, check out the acl package., -EXCEPTION - , - $this->dir - )); - } - - $tempfile = tempnam($this->dir, uniqid('', true)); - - if ($tempfile === false) { - throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); - } - - @chmod($tempfile, 0666 & (~$this->umask)); - - $written = file_put_contents( - $tempfile, - 'umask)); - - if (rename($tempfile, $path) === false) { - @unlink($tempfile); - - throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); - } - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php deleted file mode 100644 index 2efeb1d..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php +++ /dev/null @@ -1,177 +0,0 @@ - true, - 'Attribute' => true, - 'Attributes' => true, - /* Can we enable this? 'Enum' => true, */ - 'Required' => true, - 'Target' => true, - 'NamedArgumentConstructor' => true, - ]; - - private const WidelyUsedNonStandard = [ - 'fix' => true, - 'fixme' => true, - 'override' => true, - ]; - - private const PhpDocumentor1 = [ - 'abstract' => true, - 'access' => true, - 'code' => true, - 'deprec' => true, - 'endcode' => true, - 'exception' => true, - 'final' => true, - 'ingroup' => true, - 'inheritdoc' => true, - 'inheritDoc' => true, - 'magic' => true, - 'name' => true, - 'private' => true, - 'static' => true, - 'staticvar' => true, - 'staticVar' => true, - 'toc' => true, - 'tutorial' => true, - 'throw' => true, - ]; - - private const PhpDocumentor2 = [ - 'api' => true, - 'author' => true, - 'category' => true, - 'copyright' => true, - 'deprecated' => true, - 'example' => true, - 'filesource' => true, - 'global' => true, - 'ignore' => true, - /* Can we enable this? 'index' => true, */ - 'internal' => true, - 'license' => true, - 'link' => true, - 'method' => true, - 'package' => true, - 'param' => true, - 'property' => true, - 'property-read' => true, - 'property-write' => true, - 'return' => true, - 'see' => true, - 'since' => true, - 'source' => true, - 'subpackage' => true, - 'throws' => true, - 'todo' => true, - 'TODO' => true, - 'usedby' => true, - 'uses' => true, - 'var' => true, - 'version' => true, - ]; - - private const PHPUnit = [ - 'author' => true, - 'after' => true, - 'afterClass' => true, - 'backupGlobals' => true, - 'backupStaticAttributes' => true, - 'before' => true, - 'beforeClass' => true, - 'codeCoverageIgnore' => true, - 'codeCoverageIgnoreStart' => true, - 'codeCoverageIgnoreEnd' => true, - 'covers' => true, - 'coversDefaultClass' => true, - 'coversNothing' => true, - 'dataProvider' => true, - 'depends' => true, - 'doesNotPerformAssertions' => true, - 'expectedException' => true, - 'expectedExceptionCode' => true, - 'expectedExceptionMessage' => true, - 'expectedExceptionMessageRegExp' => true, - 'group' => true, - 'large' => true, - 'medium' => true, - 'preserveGlobalState' => true, - 'requires' => true, - 'runTestsInSeparateProcesses' => true, - 'runInSeparateProcess' => true, - 'small' => true, - 'test' => true, - 'testdox' => true, - 'testWith' => true, - 'ticket' => true, - 'uses' => true, - ]; - - private const PhpCheckStyle = ['SuppressWarnings' => true]; - - private const PhpStorm = ['noinspection' => true]; - - private const PEAR = ['package_version' => true]; - - private const PlainUML = [ - 'startuml' => true, - 'enduml' => true, - ]; - - private const Symfony = ['experimental' => true]; - - private const PhpCodeSniffer = [ - 'codingStandardsIgnoreStart' => true, - 'codingStandardsIgnoreEnd' => true, - ]; - - private const SlevomatCodingStandard = ['phpcsSuppress' => true]; - - private const Phan = ['suppress' => true]; - - private const Rector = ['noRector' => true]; - - private const StaticAnalysis = [ - // PHPStan, Psalm - 'extends' => true, - 'implements' => true, - 'template' => true, - 'use' => true, - - // Psalm - 'pure' => true, - 'immutable' => true, - ]; - - public const LIST = self::Reserved - + self::WidelyUsedNonStandard - + self::PhpDocumentor1 - + self::PhpDocumentor2 - + self::PHPUnit - + self::PhpCheckStyle - + self::PhpStorm - + self::PEAR - + self::PlainUML - + self::Symfony - + self::SlevomatCodingStandard - + self::PhpCodeSniffer - + self::Phan - + self::Rector - + self::StaticAnalysis; - - private function __construct() - { - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php deleted file mode 100644 index 42e7076..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php +++ /dev/null @@ -1,100 +0,0 @@ -delegate = $reader; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $annotations = []; - foreach ($this->delegate->getClassAnnotations($class) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotation) - { - return $this->delegate->getClassAnnotation($class, $annotation); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $annotations = []; - foreach ($this->delegate->getMethodAnnotations($method) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotation) - { - return $this->delegate->getMethodAnnotation($method, $annotation); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $annotations = []; - foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotation) - { - return $this->delegate->getPropertyAnnotation($property, $annotation); - } - - /** - * Proxies all methods to the delegate. - * - * @param string $method - * @param mixed[] $args - * - * @return mixed - */ - public function __call($method, $args) - { - return call_user_func_array([$this->delegate, $method], $args); - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php deleted file mode 100644 index 8af224c..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php +++ /dev/null @@ -1,14 +0,0 @@ -ReflectionClass object. - * - * @return array A list with use statements in the form (Alias => FQN). - */ - public function parseClass(ReflectionClass $class) - { - return $this->parseUseStatements($class); - } - - /** - * Parse a class or function for use statements. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @psalm-return array a list with use statements in the form (Alias => FQN). - */ - public function parseUseStatements($reflection): array - { - if (method_exists($reflection, 'getUseStatements')) { - return $reflection->getUseStatements(); - } - - $filename = $reflection->getFileName(); - - if ($filename === false) { - return []; - } - - $content = $this->getFileContent($filename, $reflection->getStartLine()); - - if ($content === null) { - return []; - } - - $namespace = preg_quote($reflection->getNamespaceName()); - $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); - $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); - } - - /** - * Gets the content of the file right up to the given line number. - * - * @param string $filename The name of the file to load. - * @param int $lineNumber The number of lines to read from file. - * - * @return string|null The content of the file or null if the file does not exist. - */ - private function getFileContent($filename, $lineNumber) - { - if (! is_file($filename)) { - return null; - } - - $content = ''; - $lineCnt = 0; - $file = new SplFileObject($filename); - while (! $file->eof()) { - if ($lineCnt++ === $lineNumber) { - break; - } - - $content .= $file->fgets(); - } - - return $content; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php deleted file mode 100644 index a7099d5..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php +++ /dev/null @@ -1,232 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - public function clearLoadedAnnotations(): void - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** @return mixed[] */ - private function fetchFromCache( - string $cacheKey, - ReflectionClass $class, - string $method, - Reflector $reflector - ): array { - $cacheKey = rawurlencode($cacheKey); - - $item = $this->cache->getItem($cacheKey); - if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { - $this->cache->save($item->set($this->delegate->{$method}($reflector))); - } - - return $item->get(); - } - - /** - * Used in debug mode to check if the cache is fresh. - * - * @return bool Returns true if the cache was fresh, or false if the class - * being read was modified since writing to the cache. - */ - private function refresh(string $cacheKey, ReflectionClass $class): bool - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - $item = $this->cache->getItem('[C]' . $cacheKey); - if ($item->isHit() && $item->get() >= $lastModification) { - return true; - } - - $this->cache->save($item->set(time())); - - return false; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php deleted file mode 100644 index 0663ffd..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php +++ /dev/null @@ -1,80 +0,0 @@ - An array of Annotations. - */ - public function getClassAnnotations(ReflectionClass $class); - - /** - * Gets a class annotation. - * - * @param ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName); - - /** - * Gets the annotations applied to a method. - * - * @param ReflectionMethod $method The ReflectionMethod of the method from which - * the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getMethodAnnotations(ReflectionMethod $method); - - /** - * Gets a method annotation. - * - * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName); - - /** - * Gets the annotations applied to a property. - * - * @param ReflectionProperty $property The ReflectionProperty of the property - * from which the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getPropertyAnnotations(ReflectionProperty $property); - - /** - * Gets a property annotation. - * - * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php deleted file mode 100644 index 8a78c11..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php +++ /dev/null @@ -1,114 +0,0 @@ -parser = new DocParser(); - $this->parser->setIgnoreNotImportedAnnotations(true); - } - - /** - * Adds a namespace in which we will look for annotations. - * - * @param string $namespace - * - * @return void - */ - public function addNamespace($namespace) - { - $this->parser->addNamespace($namespace); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - return $this->parser->parse( - $method->getDocComment(), - 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' - ); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - return $this->parser->parse( - $property->getDocComment(), - 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() - ); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } -} diff --git a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php deleted file mode 100644 index 9605fb8..0000000 --- a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php +++ /dev/null @@ -1,208 +0,0 @@ - - */ - private $tokens; - - /** - * The number of tokens. - * - * @var int - */ - private $numTokens; - - /** - * The current array pointer. - * - * @var int - */ - private $pointer = 0; - - /** - * @param string $contents - */ - public function __construct($contents) - { - $this->tokens = token_get_all($contents); - - // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it - // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored - // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a - // docblock. If the first thing in the file is a class without a doc block this would cause calls to - // getDocBlock() on said class to return our long lost doc_comment. Argh. - // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least - // it's harmless to us. - token_get_all("numTokens = count($this->tokens); - } - - /** - * Gets the next non whitespace and non comment token. - * - * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. - * If FALSE then only whitespace and normal comments are skipped. - * - * @return mixed[]|string|null The token if exists, null otherwise. - */ - public function next($docCommentIsComment = true) - { - for ($i = $this->pointer; $i < $this->numTokens; $i++) { - $this->pointer++; - if ( - $this->tokens[$i][0] === T_WHITESPACE || - $this->tokens[$i][0] === T_COMMENT || - ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) - ) { - continue; - } - - return $this->tokens[$i]; - } - - return null; - } - - /** - * Parses a single use statement. - * - * @return array A list with all found class names for a use statement. - */ - public function parseUseStatement() - { - $groupRoot = ''; - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - while (($token = $this->next())) { - if (! $explicitAlias && $token[0] === T_STRING) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $token[0] === T_STRING) { - $alias = $token[1]; - } elseif ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - ) { - $class .= $token[1]; - - $classSplit = explode('\\', $token[1]); - $alias = $classSplit[count($classSplit) - 1]; - } elseif ($token[0] === T_NS_SEPARATOR) { - $class .= '\\'; - $alias = ''; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token === ',') { - $statements[strtolower($alias)] = $groupRoot . $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[strtolower($alias)] = $groupRoot . $class; - break; - } elseif ($token === '{') { - $groupRoot = $class; - $class = ''; - } elseif ($token === '}') { - continue; - } else { - break; - } - } - - return $statements; - } - - /** - * Gets all use statements. - * - * @param string $namespaceName The namespace name of the reflected class. - * - * @return array A list with all found use statements. - */ - public function parseUseStatements($namespaceName) - { - $statements = []; - while (($token = $this->next())) { - if ($token[0] === T_USE) { - $statements = array_merge($statements, $this->parseUseStatement()); - continue; - } - - if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { - continue; - } - - // Get fresh array for new namespace. This is to prevent the parser to collect the use statements - // for a previous namespace with the same name. This is the case if a namespace is defined twice - // or if a namespace with the same name is commented out. - $statements = []; - } - - return $statements; - } - - /** - * Gets the namespace. - * - * @return string The found namespace. - */ - public function parseNamespace() - { - $name = ''; - while ( - ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - )) - ) { - $name .= $token[1]; - } - - return $name; - } - - /** - * Gets the class name. - * - * @return string The found class name. - */ - public function parseClass() - { - // Namespaces and class names are tokenized the same: T_STRINGs - // separated by T_NS_SEPARATOR so we can use one function to provide - // both. - return $this->parseNamespace(); - } -} diff --git a/vendor/doctrine/lexer/LICENSE b/vendor/doctrine/lexer/LICENSE deleted file mode 100644 index e8fdec4..0000000 --- a/vendor/doctrine/lexer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2018 Doctrine Project - -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/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md deleted file mode 100644 index 784f2a2..0000000 --- a/vendor/doctrine/lexer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Doctrine Lexer - -[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) - -Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. - -This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). - -https://www.doctrine-project.org/projects/lexer.html diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json deleted file mode 100644 index c435647..0000000 --- a/vendor/doctrine/lexer/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "doctrine/lexer", - "type": "library", - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "keywords": [ - "php", - "parser", - "lexer", - "annotations", - "docblock" - ], - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } - }, - "autoload-dev": { - "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php deleted file mode 100644 index 7e8a11d..0000000 --- a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ /dev/null @@ -1,337 +0,0 @@ - - */ - private $tokens = []; - - /** - * Current lexer position in input string. - * - * @var int - */ - private $position = 0; - - /** - * Current peek of current lexer position. - * - * @var int - */ - private $peek = 0; - - /** - * The next token in the input. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $lookahead; - - /** - * The last matched/seen token. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $token; - - /** - * Composed regex for input parsing. - * - * @var string|null - */ - private $regex; - - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput($input) - { - $this->input = $input; - $this->tokens = []; - - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param int $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } - - /** - * Retrieve the original lexer's input until a given position. - * - * @param int $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param int|string $type - * - * @return bool - */ - public function isNextToken($type) - { - return $this->lookahead !== null && $this->lookahead['type'] === $type; - } - - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param list $types - * - * @return bool - */ - public function isNextTokenAny(array $types) - { - return $this->lookahead !== null && in_array($this->lookahead['type'], $types, true); - } - - /** - * Moves to the next token in the input string. - * - * @return bool - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = isset($this->tokens[$this->position]) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token. - * - * @param mixed $value - * @param int|string $token - * - * @return bool - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } - - return null; - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - if (! isset($this->regex)) { - $this->regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($this->regex, $input, -1, $flags); - - if ($matches === false) { - // Work around https://bugs.php.net/78122 - $matches = [[$input, 0]]; - } - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); - - $this->tokens[] = [ - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ]; - } - } - - /** - * Gets the literal for a given token. - * - * @param int|string $token - * - * @return int|string - */ - public function getLiteral($token) - { - $className = static::class; - $reflClass = new ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return int|string|null - */ - abstract protected function getType(&$value); -} diff --git a/vendor/doctrine/lexer/psalm.xml b/vendor/doctrine/lexer/psalm.xml deleted file mode 100644 index f331e50..0000000 --- a/vendor/doctrine/lexer/psalm.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php index 6d08cea..ac919a2 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php @@ -39,6 +39,7 @@ class FieldDescriptor { use GetPublicDescriptorTrait; + /** @var \Google\Protobuf\Internal\FieldDescriptor $internal_desc */ private $internal_desc; /** @@ -81,6 +82,32 @@ public function getType() return $this->internal_desc->getType(); } + /** + * @return OneofDescriptor + */ + public function getContainingOneof() + { + return $this->getPublicDescriptor($this->internal_desc->getContainingOneof()); + } + + /** + * Gets the field's containing oneof, only if non-synthetic. + * + * @return null|OneofDescriptor + */ + public function getRealContainingOneof() + { + return $this->getPublicDescriptor($this->internal_desc->getRealContainingOneof()); + } + + /** + * @return boolean + */ + public function hasOptionalKeyword() + { + return $this->internal_desc->hasOptionalKeyword(); + } + /** * @return Descriptor Returns a descriptor for the field type if the field type is a message, otherwise throws \Exception * @throws \Exception @@ -114,12 +141,4 @@ public function isMap() { return $this->internal_desc->isMap(); } - - /** - * @return boolean - */ - public function hasOptionalKeyword() - { - return $this->internal_desc->hasOptionalKeyword(); - } } diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php index a7f80d5..51a34d6 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php @@ -45,6 +45,7 @@ class Descriptor private $enum_type = []; private $klass; private $legacy_klass; + private $previous_klass; private $options; private $oneof_decl = []; @@ -162,6 +163,16 @@ public function getLegacyClass() return $this->legacy_klass; } + public function setPreviouslyUnreservedClass($klass) + { + $this->previous_klass = $klass; + } + + public function getPreviouslyUnreservedClass() + { + return $this->previous_klass; + } + public function setOptions($options) { $this->options = $options; @@ -179,6 +190,7 @@ public static function buildFromProto($proto, $file_proto, $containing) $message_name_without_package = ""; $classname = ""; $legacy_classname = ""; + $previous_classname = ""; $fullname = ""; GPBUtil::getFullClassName( $proto, @@ -187,10 +199,12 @@ public static function buildFromProto($proto, $file_proto, $containing) $message_name_without_package, $classname, $legacy_classname, - $fullname); + $fullname, + $previous_classname); $desc->setFullName($fullname); $desc->setClass($classname); $desc->setLegacyClass($legacy_classname); + $desc->setPreviouslyUnreservedClass($previous_classname); $desc->setOptions($proto->getOptions()); foreach ($proto->getField() as $field_proto) { diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php index 1468a02..1be00e2 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php @@ -96,6 +96,7 @@ public function addDescriptor($descriptor) $descriptor->getClass(); $this->class_to_desc[$descriptor->getClass()] = $descriptor; $this->class_to_desc[$descriptor->getLegacyClass()] = $descriptor; + $this->class_to_desc[$descriptor->getPreviouslyUnreservedClass()] = $descriptor; foreach ($descriptor->getNestedType() as $nested_type) { $this->addDescriptor($nested_type); } diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php index 7af4f84..383f53b 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php @@ -101,7 +101,8 @@ public static function buildFromProto($proto, $file_proto, $containing) $enum_name_without_package, $classname, $legacy_classname, - $fullname); + $fullname, + $unused_previous_classname); $desc->setFullName($fullname); $desc->setClass($classname); $desc->setLegacyClass($legacy_classname); diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php index ce83f63..3a9a73b 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php @@ -46,8 +46,11 @@ class FieldDescriptor private $message_type; private $enum_type; private $packed; - private $is_map; private $oneof_index = -1; + private $proto3_optional; + + /** @var OneofDescriptor $containing_oneof */ + private $containing_oneof; public function __construct() { @@ -169,6 +172,32 @@ public function getPacked() return $this->packed; } + public function getProto3Optional() + { + return $this->proto3_optional; + } + + public function setProto3Optional($proto3_optional) + { + $this->proto3_optional = $proto3_optional; + } + + public function getContainingOneof() + { + return $this->containing_oneof; + } + + public function setContainingOneof($containing_oneof) + { + $this->containing_oneof = $containing_oneof; + } + + public function getRealContainingOneof() + { + return !is_null($this->containing_oneof) && !$this->containing_oneof->isSynthetic() + ? $this->containing_oneof : null; + } + public function isPackable() { return $this->isRepeated() && self::isTypePackable($this->type); @@ -214,6 +243,10 @@ private static function isTypePackable($field_type) $field_type !== GPBType::BYTES); } + /** + * @param FieldDescriptorProto $proto + * @return FieldDescriptor + */ public static function getFieldDescriptor($proto) { $type_name = null; @@ -248,8 +281,6 @@ public static function getFieldDescriptor($proto) $field = new FieldDescriptor(); $field->setName($proto->getName()); - $json_name = $proto->hasJsonName() ? $proto->getJsonName() : - lcfirst(implode('', array_map('ucwords', explode('_', $proto->getName())))); if ($proto->hasJsonName()) { $json_name = $proto->getJsonName(); } else { @@ -269,6 +300,7 @@ public static function getFieldDescriptor($proto) $field->setLabel($proto->getLabel()); $field->setPacked($packed); $field->setOneofIndex($oneof_index); + $field->setProto3Optional($proto->getProto3Optional()); // At this time, the message/enum type may have not been added to pool. // So we use the type name as place holder and will replace it with the diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php index 4b15283..ffea900 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php @@ -285,11 +285,12 @@ public static function getClassNamePrefix( "include"=>0, "include_once"=>0, "instanceof"=>0, "insteadof"=>0, "interface"=>0, "isset"=>0, "list"=>0, "match"=>0, "namespace"=>0, "new"=>0, "or"=>0, "parent"=>0, "print"=>0, "private"=>0, - "protected"=>0,"public"=>0, "require"=>0, "require_once"=>0, - "return"=>0, "self"=>0, "static"=>0, "switch"=>0, "throw"=>0, - "trait"=>0, "try"=>0,"unset"=>0, "use"=>0, "var"=>0, "while"=>0, - "xor"=>0, "yield"=>0, "int"=>0, "float"=>0, "bool"=>0, "string"=>0, - "true"=>0, "false"=>0, "null"=>0, "void"=>0, "iterable"=>0 + "protected"=>0,"public"=>0, "readonly" => 0,"require"=>0, + "require_once"=>0,"return"=>0, "self"=>0, "static"=>0, "switch"=>0, + "throw"=>0,"trait"=>0, "try"=>0,"unset"=>0, "use"=>0, "var"=>0, + "while"=>0,"xor"=>0, "yield"=>0, "int"=>0, "float"=>0, "bool"=>0, + "string"=>0,"true"=>0, "false"=>0, "null"=>0, "void"=>0, + "iterable"=>0 ); if (array_key_exists(strtolower($classname), $reserved_words)) { @@ -303,6 +304,27 @@ public static function getClassNamePrefix( return ""; } + private static function getPreviouslyUnreservedClassNamePrefix( + $classname, + $file_proto) + { + $previously_unreserved_words = array( + "readonly"=>0 + ); + + if (array_key_exists(strtolower($classname), $previously_unreserved_words)) { + $option = $file_proto->getOptions(); + $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); + if ($prefix !== "") { + return $prefix; + } + + return ""; + } + + return self::getClassNamePrefix($classname, $file_proto); + } + public static function getLegacyClassNameWithoutPackage( $name, $file_proto) @@ -322,6 +344,17 @@ public static function getClassNameWithoutPackage( return implode('\\', $parts); } + private static function getPreviouslyUnreservedClassNameWithoutPackage( + $name, + $file_proto) + { + $parts = explode('.', $name); + foreach ($parts as $i => $part) { + $parts[$i] = static::getPreviouslyUnreservedClassNamePrefix($parts[$i], $file_proto) . $parts[$i]; + } + return implode('\\', $parts); + } + public static function getFullClassName( $proto, $containing, @@ -329,7 +362,8 @@ public static function getFullClassName( &$message_name_without_package, &$classname, &$legacy_classname, - &$fullname) + &$fullname, + &$previous_classname) { // Full name needs to start with '.'. $message_name_without_package = $proto->getName(); @@ -350,6 +384,9 @@ public static function getFullClassName( $legacy_class_name_without_package = static::getLegacyClassNameWithoutPackage( $message_name_without_package, $file_proto); + $previous_class_name_without_package = + static::getPreviouslyUnreservedClassNameWithoutPackage( + $message_name_without_package, $file_proto); $option = $file_proto->getOptions(); if (!is_null($option) && $option->hasPhpNamespace()) { @@ -358,10 +395,13 @@ public static function getFullClassName( $classname = $namespace . "\\" . $class_name_without_package; $legacy_classname = $namespace . "\\" . $legacy_class_name_without_package; + $previous_classname = + $namespace . "\\" . $previous_class_name_without_package; return; } else { $classname = $class_name_without_package; $legacy_classname = $legacy_class_name_without_package; + $previous_classname = $previous_class_name_without_package; return; } } @@ -369,6 +409,7 @@ public static function getFullClassName( if ($package === "") { $classname = $class_name_without_package; $legacy_classname = $legacy_class_name_without_package; + $previous_classname = $previous_class_name_without_package; } else { $parts = array_map('ucwords', explode('.', $package)); foreach ($parts as $i => $part) { @@ -381,6 +422,11 @@ public static function getFullClassName( $legacy_classname = implode('\\', array_map('ucwords', explode('.', $package))). "\\".$legacy_class_name_without_package; + $previous_classname = + implode('\\', array_map('ucwords', explode('.', $package))). + "\\".self::getPreviouslyUnreservedClassNamePrefix( + $previous_class_name_without_package, $file_proto). + $previous_class_name_without_package; } } diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php index 67b107f..4323685 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php @@ -37,6 +37,7 @@ class OneofDescriptor use HasPublicDescriptorTrait; private $name; + /** @var \Google\Protobuf\FieldDescriptor[] $fields */ private $fields; public function __construct() @@ -64,13 +65,21 @@ public function getFields() return $this->fields; } + public function isSynthetic() + { + return !is_null($this->fields) && count($this->fields) === 1 + && $this->fields[0]->getProto3Optional(); + } + public static function buildFromProto($oneof_proto, $desc, $index) { $oneof = new OneofDescriptor(); $oneof->setName($oneof_proto->getName()); foreach ($desc->getField() as $field) { + /** @var FieldDescriptor $field */ if ($field->getOneofIndex() == $index) { $oneof->addField($field); + $field->setContainingOneof($oneof); } } return $oneof; diff --git a/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php index 92b4e27..66ffbd5 100644 --- a/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php +++ b/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php @@ -38,6 +38,7 @@ class OneofDescriptor { use GetPublicDescriptorTrait; + /** @var \Google\Protobuf\Internal\OneofDescriptor $internal_desc */ private $internal_desc; /** @@ -62,6 +63,12 @@ public function getName() */ public function getField($index) { + if ( + is_null($this->internal_desc->getFields()) + || !isset($this->internal_desc->getFields()[$index]) + ) { + return null; + } return $this->getPublicDescriptor($this->internal_desc->getFields()[$index]); } @@ -75,6 +82,6 @@ public function getFieldCount() public function isSynthetic() { - return $this->internal_desc->isSynthetic(); + return $this->internal_desc->isSynthetic(); } } diff --git a/vendor/protobuf-php/protobuf/.gitignore b/vendor/protobuf-php/protobuf/.gitignore deleted file mode 100644 index ae08f1e..0000000 --- a/vendor/protobuf-php/protobuf/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# Created by .gitignore support plugin (hsz.mobi) -## JetBrains IDE project directory -.idea/ -nbproject - -## build -build -generated -docs/build -phpunit.xml - -## File-based project format -*.ipr -*.iws - -## Additional for IntelliJ -out/ - -# generated by mpeltonen/sbt-idea plugin -.idea_modules/ - -# generated by JIRA plugin -atlassian-ide-plugin.xml - -# generated by Crashlytics plugin (for Android Studio and Intellij) -com_crashlytics_export_strings.xml - -# ignore composer vendor directory and lock file -vendor -composer.phar -composer.lock - -# ignore mac files -.DS_Store diff --git a/vendor/protobuf-php/protobuf/.travis.yml b/vendor/protobuf-php/protobuf/.travis.yml deleted file mode 100644 index 6ee1622..0000000 --- a/vendor/protobuf-php/protobuf/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -sudo: false - -language: php - -cache: - directories: - - $HOME/.composer/cache - - $HOME/protobuf - -php: - - 5.5 - - 5.6 - - 7.0 - - hhvm - - nightly - -env: - - PROTOBUF_VERSION=2.6.1 - - PROTOBUF_VERSION=3.0.0 - -before_install: - - bash ./tests/travis/install-protobuf.sh - -install: - - composer self-update - - composer --prefer-source install - - export PATH=$PATH:$HOME/protobuf/$PROTOBUF_VERSION/bin/ - -script: - - make phpcs proto-generate phpunit-coverage-clover - -after_script: - - ./vendor/bin/coveralls -v - -matrix: - allow_failures: - - php: nightly diff --git a/vendor/protobuf-php/protobuf/LICENSE b/vendor/protobuf-php/protobuf/LICENSE deleted file mode 100644 index 31b027f..0000000 --- a/vendor/protobuf-php/protobuf/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -The MIT License - -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/vendor/protobuf-php/protobuf/Makefile b/vendor/protobuf-php/protobuf/Makefile deleted file mode 100644 index 0534dac..0000000 --- a/vendor/protobuf-php/protobuf/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# vim: ts=4:sw=4:noexpandtab!: - -BASEDIR := $(shell pwd) -COMPOSER := $(shell which composer) - -help: - @echo "---------------------------------------------" - @echo "List of available targets:" - @echo " composer-install - Installs composer dependencies." - @echo " proto-generate - Generate PHP classes from proto files." - @echo " phpcs - Runs PHP Code Sniffer." - @echo " phpunit - Runs tests." - @echo " phpunit-coverage-clover - Runs tests to genereate coverage clover." - @echo " phpunit-coverage-html - Runs tests to genereate coverage html." - @echo " help - Shows this dialog." - @exit 0 - -all: install phpunit - -install: composer-install proto-generate - -test: phpcs phpunit - -composer-install: -ifdef COMPOSER - php $(COMPOSER) install --prefer-source --no-interaction; -else - @echo "Composer not found !!" - @echo - @echo "curl -sS https://getcomposer.org/installer | php" - @echo "mv composer.phar /usr/local/bin/composer" -endif - -proto-clean: - rm -rf $(BASEDIR)/tests/Protos/*; - -proto-generate: proto-clean - php $(BASEDIR)/vendor/bin/protobuf --include-descriptors \ - --psr4 ProtobufTest\\Protos \ - -o $(BASEDIR)/tests/Protos \ - -i $(BASEDIR)/tests/Resources \ - $(BASEDIR)/tests/Resources/*.proto - -phpunit: proto-generate - php $(BASEDIR)/vendor/bin/phpunit -v; - -phpunit-coverage-clover: - php $(BASEDIR)/vendor/bin/phpunit -v --coverage-clover ./build/logs/clover.xml; - -phpunit-coverage-html: - php $(BASEDIR)/vendor/bin/phpunit -v --coverage-html ./build/coverage; - -phpcs: - php $(BASEDIR)/vendor/bin/phpcs -p --extensions=php --standard=ruleset.xml src; - -.PHONY: composer-install phpunit phpcs help \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/README.md b/vendor/protobuf-php/protobuf/README.md deleted file mode 100644 index 5f27416..0000000 --- a/vendor/protobuf-php/protobuf/README.md +++ /dev/null @@ -1,404 +0,0 @@ -Protobuf for PHP -================ - -[![Build Status](https://travis-ci.org/protobuf-php/protobuf.svg?branch=master)](https://travis-ci.org/protobuf-php/protobuf) -[![Coverage Status](https://coveralls.io/repos/protobuf-php/protobuf/badge.svg?branch=master&service=github)](https://coveralls.io/github/protobuf-php/protobuf?branch=master) -[![Total Downloads](https://poser.pugx.org/protobuf-php/protobuf/downloads)](https://packagist.org/packages/protobuf-php/protobuf) -[![License](https://poser.pugx.org/protobuf-php/protobuf/license)](https://packagist.org/packages/protobuf-php/protobuf) - -Protobuf for PHP is an implementation of Google's Protocol Buffers for the PHP -language, supporting its binary data serialization and including a `protoc` -plugin to generate PHP classes from .proto files. - - -## Installation - -Run the following `composer` commands: - -```console -$ composer require "protobuf-php/protobuf" -``` - - -## Overview - -This tutorial provides a basic introduction to working with protocol buffers. -By walking through creating a simple example application, it shows you how to - -* Define message formats in a ```.proto``` file. -* Use the protocol buffer compiler. -* Use the PHP protocol buffer API to write and read messages. - - -#### Why Use Protocol Buffers? - -The example we're going to use is a very simple "address book" application that can read and write people's contact details to and from a file. Each person in the address book has a name, an ID, an email address, and a contact phone number. - -How do you serialize and retrieve structured data like this? -There are a few ways to solve this problem: - -* Use PHP Serialization. This is the default approach since it's built into the language, but it is not very space efficient, and also doesn't work very well if you need to share data with applications written in other languages (Nodejs,Java,Python, etc..). - -* You can invent an ad-hoc way to encode the data items into a single string – such as encoding 4 ints as "12:3:-23:67". This is a simple and flexible approach, although it does require writing one-off encoding and parsing code, and the parsing imposes a small run-time cost. This works best for encoding very simple data. - -* Serialize the data to XML. This approach can be very attractive since XML is (sort of) human readable and there are binding libraries for lots of languages. This can be a good choice if you want to share data with other applications/projects. However, XML is notoriously space intensive, and encoding/decoding it can impose a huge performance penalty on applications. Also, navigating an XML DOM tree is considerably more complicated than navigating simple fields in a class normally would be. - - -Protocol buffers are the flexible, efficient, automated solution to solve exactly this problem. With protocol buffers, you write a ```.proto``` description of the data structure you wish to store. From that, the protocol buffer compiler creates a class that implements automatic encoding and parsing of the protocol buffer data with an efficient binary format. The generated class provides getters and setters for the fields that make up a protocol buffer and takes care of the details of reading and writing the protocol buffer as a unit. Importantly, the protocol buffer format supports the idea of extending the format over time in such a way that the code can still read data encoded with the old format. - - -#### Defining Your Protocol Format - -To create your address book application, you'll need to start with a ```.proto``` file. The definitions in a ```.proto``` file are simple: you add a message for each data structure you want to serialize, then specify a name and a type for each field in the message. Here is the ```.proto``` file that defines your messages, ```addressbook.proto```. - -```proto -package tutorial; -import "php.proto"; -option (php.package) = "Tutorial.AddressBookProtos"; - -message Person { - required string name = 1; - required int32 id = 2; - optional string email = 3; - - enum PhoneType { - MOBILE = 0; - HOME = 1; - WORK = 2; - } - - message PhoneNumber { - required string number = 1; - optional PhoneType type = 2 [default = HOME]; - } - - repeated PhoneNumber phone = 4; -} - -message AddressBook { - repeated Person person = 1; -} -``` - -As you can see, the syntax is similar to C++ or Java. Let's go through each part of the file and see what it does. -The ```.proto``` file starts with a package declaration, which helps to prevent naming conflicts between different projects. -In PHP, the package name is used as the PHP namespace unless you have explicitly specified a ```(php.package)```, as we have here. -Even if you do provide a ```(php.package)```, you should still define a normal package as well to avoid name collisions in the Protocol Buffers name space as well as in non PHP languages. - - -After the package declaration, you can see two options that are PHP-specific: ```import "php.proto";``` and ```(php.package)```. -* ```import "php.proto"``` add supports a few PHP specific options for proto files. -* ```(php.package)``` specifies in what php namespace name your generated classes should live. -If you don't specify this explicitly, it simply matches the package name given by the package declaration, but these names usually aren't appropriate PHP namespace names. - - -Next, you have your message definitions. A message is just an aggregate containing a set of typed fields. Many standard simple data types are available as field types, including ```bool```, ```int32```, ```float```, ```double```, and ```string```. You can also add further structure to your messages by using other message types as field types – in the above example the ```Person``` message contains ```PhoneNumber``` messages, while the ```AddressBook``` message contains ```Person``` messages. You can even define message types nested inside other messages – as you can see, the ```PhoneNumber``` type is defined inside ```Person```. You can also define ```enum``` types if you want one of your fields to have one of a predefined list of values – here you want to specify that a phone number can be one of ```MOBILE```, ```HOME```, or ```WORK```. - - -The ```" = 1"```, ```" = 2"``` markers on each element identify the unique ```tag``` that field uses in the binary encoding. Tag numbers 1-15 require one less byte to encode than higher numbers, so as an optimization you can decide to use those tags for the commonly used or repeated elements, leaving tags 16 and higher for less-commonly used optional elements. Each element in a repeated field requires re-encoding the tag number, so repeated fields are particularly good candidates for this optimization. - - -Each field must be annotated with one of the following modifiers: - -* **required**: a value for the field must be provided, otherwise the message will be considered "uninitialized". Trying to build an uninitialized message will throw a RuntimeException. Parsing an uninitialized message will throw an IOException. Other than this, a required field behaves exactly like an optional field. -* **optional**: the field may or may not be set. If an optional field value isn't set, a default value is used. For simple types, you can specify your own default value, as we've done for the phone number type in the example. Otherwise, a system default is used: zero for numeric types, the empty string for strings, false for bools. For embedded messages, the default value is always the "default instance" or "prototype" of the message, which has none of its fields set. Calling the accessor to get the value of an optional (or required) field which has not been explicitly set always returns that field's default value. -* **repeated**: the field may be repeated any number of times (including zero). The order of the repeated values will be preserved in the protocol buffer. Think of repeated fields as dynamically sized arrays. - -You'll find a complete guide to writing .proto files – including all the possible field types – in the [Protocol Buffer Language Guide](https://developers.google.com/protocol-buffers/docs/proto). Don't go looking for facilities similar to class inheritance, though – protocol buffers don't do that. - - -#### Compiling Your Protocol Buffers - -Now that you have a ```.proto```, the next thing you need to do is generate the classes you'll need to read and write ```AddressBook``` (and hence ```Person``` and ```PhoneNumber```) messages. To do this, you need to run the protocol buffer plugin on your .proto: - -If you haven't installed the compiler (```protoc```) or you dont have the php plugin, see https://github.com/protobuf-php/protobuf-plugin. - -Now run the compiler plugin, specifying the proto files source directory (the file directory is used if you don't provide a value), the destination directory (where you want the generated code to go), and the path to your ```.proto``` In this case: - -```console -php ./vendor/bin/protobuf --include-descriptors -i . -o ./src/ ./addressbook.proto -``` - -This generates the following PHP classes in your specified destination directory - -```console -src/ -└── Tutorial - └── AddressBookProtos - ├── AddressBook.php - ├── Person - │   ├── PhoneNumber.php - │   └── PhoneType.php - └── Person.php -``` - -#### The Protocol Buffer API - -Let's look at some of the generated code and see what classes and methods the compiler has created for you. If you look in ```src/Tutorial/AddressBookProtos/Person.php``` you can see that it defines a class called ```Person```. - -Messages have auto-generated accessor methods for each field of the message. -Here are some of the accessors for the Person class (implementations omitted for brevity): - -```php - */ -public function getPhoneList(); -/** @param \Protobuf\Collection<\ProtobufTest\Protos\Person\PhoneNumber> $value */ -public function setPhoneList(\Protobuf\Collection $value); -#################################################################################### -?> -``` - -As you can see, there are simple getters and setters for each field. -There are also has getters for each singular field which return true if that field has been set. -Repeated fields have a extra method, an add method which appends a new element to the list. - -Notice how these accessor methods use camel-case naming, even though the ```.proto``` file uses lowercase-with-underscores. -This transformation is done automatically by the protocol buffer compiler so that the generated classes match standard PHP style conventions. -You should always use lowercase-with-underscores for field names in your ```.proto``` files; this ensures good naming practice in all the generated languages. See the style guide for more on good ```.proto``` style. - - -Protocol Buffers types map to the following PHP types: - -| Protocol Buffers | PHP | -| ---------------- | ------------------ | -| double | float | -| float | float | -| int32 | int | -| int64 | int | -| uint32 | int | -| uint64 | int | -| sint32 | int | -| sint64 | int | -| fixed32 | int | -| fixed64 | int | -| sfixed32 | int | -| sfixed64 | int | -| bool | bool | -| string | string | -| bytes | \\Protobuf\\Stream | - - -#### Enums and Nested Classes - -The generated code includes a ```PhoneType``` [enum](https://github.com/protobuf-php/protobuf/blob/master/src/Enum.php): - -```php - -``` - -All nested types are generated using the parent class ```Person``` as part of its namespace. - -```php -setId(1); -$person->setName('Fabio B. Silva'); -$person->setEmail('fabio.bat.silva@gmail.com'); - -$phone->setType($type); -$phone->setNumber('1231231212'); -?> -``` - -#### Known issues - -- Protobuf stores floating point values using the [IEEE 754](http://en.wikipedia.org/wiki/IEEE_754) standard - with 64bit words for the `double` and 32bit for the `float` types. PHP supports IEEE 754 natively although - the precission is platform dependant, however it typically supports 64bit doubles. It means that - if your PHP was compiled with 64bit sized doubles (or greater) you shouldn't have any problem encoding - and decoded float and double typed values. - -- Integer values are also [platform dependant in PHP](http://www.php.net/manual/en/language.types.integer.php). - The library has been developed and tested against PHP binaries compiled with 64bit integers. The encoding and - decoding algorithm should in theory work no matter if PHP uses 32bit or 64bit integers internally, just take - into account that with 32bit integers the numbers cannot exceed in any case the `PHP_INT_MAX` value (2147483647). - - While Protobuf supports unsigned integers PHP does not. In fact, numbers above the compiled PHP maximum - integer (`PHP_INT_MAX`, 0x7FFFFFFFFFFFFFFF for 64bits) will be automatically casted to doubles, which - typically will offer 53bits of decimal precission, allowing to safely work with numbers upto - 0x20000000000000 (2^53), even if they are represented in PHP as floats instead of integers. Higher numbers - will loose precission or might even return an _infinity_ value, note that the library does not include - any checking for these numbers and using them might provoke unexpected behaviour. - - Negative values when encoded as `int32`, `int64` or `fixed64` types require the big integer extensions - [GMP](http://www.php.net/gmp) or [BC Math](http://www.php.net/bc) to be available in your PHP environment. - The reason is that when encoding these negative numbers without using _zigzag_ the binary representation uses the most significant bit for the sign, thus the numbers become - above the maximum supported values in PHP. The library will check for these conditions and will automatically - try to use GMP or BC to process the value. - - -#### Parsing and Serialization - -Each protocol buffer class has methods for writing and reading messages of your chosen type using the protocol buffer binary format. These include : - - -```php - -``` - - -#### Writing A Message - -Now let's try using your protocol buffer classes. The first thing you want your address book application to be able to do is write personal details to your address book file. To do this, you need to create and populate instances of your protocol buffer classes and then write them to an output stream. - -Here is a program which reads an ```AddressBook``` from a file, adds one new ```Person``` to it based on user input, and writes the new ```AddressBook``` back out to the file again. The parts which directly call or reference code generated by the protocol compiler are highlighted. - - -```php -#!/usr/bin/env php -setId($id); -$person->setName($name); - -if ( ! empty($email)) { - $person->setEmail($email); -} - -while (true) { - $number = trim(readline("Enter a phone number (or leave blank to finish):")); - - if (empty($number)) { - break; - } - - $phone = new Person\PhoneNumber(); - $type = trim(readline("Is this a mobile, home, or work phone? ")); - - switch (strtolower($type)) { - case 'mobile': - $phone->setType(Person\PhoneType::MOBILE()); - break; - case 'work': - $phone->setType(Person\PhoneType::WORK()); - break; - case 'home': - $phone->setType(Person\PhoneType::HOME()); - break; - default: - echo "Unknown phone type. Using default." . PHP_EOL; - } - - $phone->setNumber($number); - $person->addPhone($phone); -} - -// Add a person. -$addressBook->addPerson($person); - -// Print current address book -echo $addressBook; - -// Write the new address book back to disk. -file_put_contents($argv[1], $addressBook->toStream()); -?> -``` - -This tutorial documentation its based on the [Protocol Buffer Basics Tutorial](https://developers.google.com/protocol-buffers/docs/javatutorial). diff --git a/vendor/protobuf-php/protobuf/composer.json b/vendor/protobuf-php/protobuf/composer.json deleted file mode 100644 index 5e67601..0000000 --- a/vendor/protobuf-php/protobuf/composer.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name" : "protobuf-php/protobuf", - "description" : "PHP implementation of Google's Protocol Buffers", - "keywords" : ["protobuf", "protocol buffer", "serializing"], - "homepage" : "https://github.com/protobuf-php/protobuf", - "type" : "library", - "license" : "MIT", - "prefer-stable" : true, - "authors" : [ - { - "name" : "Fabio B. Silva", - "email" : "fabio.bat.silva@gmail.com", - "homepage": "https://github.com/FabioBatSilva" - }, - { - "name": "Iván -DrSlump- Montes", - "email": "drslump@pollinimini.net", - "homepage": "https://github.com/drslump" - } - ], - "require" : { - "ext-mbstring" : "*", - "php" : ">=5.5.0" - }, - "require-dev": { - "protobuf-php/protobuf-plugin" : ">=0.1", - "phpunit/phpunit" : "^4", - "instaclick/coding-standard" : "^1.1", - "squizlabs/php_codesniffer" : "^1.5", - "satooshi/php-coveralls" : "^0.6", - "php-mock/php-mock-phpunit" : "^0.2", - "instaclick/object-calisthenics-sniffs" : "dev-master", - "instaclick/symfony2-coding-standard" : "dev-remaster" - }, - "autoload" : { - "psr-4": { - "Protobuf\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "ProtobufTest\\": "tests/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "0.1.x-dev" - } - } -} diff --git a/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php b/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php deleted file mode 100755 index c2a5c5d..0000000 --- a/vendor/protobuf-php/protobuf/examples/addressbook-add-person.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -add('Tutorial\AddressBookProtos', __DIR__ . '/src'); - -use Tutorial\AddressBookProtos\Person; -use Tutorial\AddressBookProtos\AddressBook; - -if ( ! class_exists('\Tutorial\AddressBookProtos\Person')) { - - fwrite(STDERR, - 'You need to generate the php classes using the following command:' . PHP_EOL . - './vendor/bin/protobuf --include-descriptors -i ./examples/ -o ./examples/src/ ./examples/addressbook.proto' . PHP_EOL - ); - - exit(1); -} - -if ( ! isset($argv[1])) { - echo "Usage: ./examples/addressbook-add-person.php ADDRESS_BOOK_FILE" . PHP_EOL; - exit(1); -} - -// Read the existing address book or create a new one. -$addressBook = is_file($argv[1]) - ? new AddressBook(file_get_contents($argv[1])) - : new AddressBook(); - -$person = new Person(); -$id = intval(readline("Enter person ID: ")); -$name = trim(readline("Enter person name: ")); -$email = trim(readline("Enter email address (blank for none): ")); - -$person->setId($id); -$person->setName($name); - -if ( ! empty($email)) { - $person->setEmail($email); -} - -while (true) { - $number = trim(readline("Enter a phone number (or leave blank to finish):")); - - if (empty($number)) { - break; - } - - $phone = new Person\PhoneNumber(); - $type = trim(readline("Is this a mobile, home, or work phone? ")); - - switch (strtolower($type)) { - case 'mobile': - $phone->setType(Person\PhoneType::MOBILE()); - break; - case 'work': - $phone->setType(Person\PhoneType::WORK()); - break; - case 'home': - $phone->setType(Person\PhoneType::HOME()); - break; - default: - echo "Unknown phone type. Using default." . PHP_EOL; - } - - $phone->setNumber($number); - $person->addPhone($phone); -} - -// Add a person. -$addressBook->addPerson($person); - -// Print current address book -echo $addressBook; - -// Write the new address book back to disk. -file_put_contents($argv[1], $addressBook->toStream()); \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/examples/addressbook.proto b/vendor/protobuf-php/protobuf/examples/addressbook.proto deleted file mode 100644 index 8043976..0000000 --- a/vendor/protobuf-php/protobuf/examples/addressbook.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto2"; - -package tutorial; -import "php.proto"; -option (php.package) = "Tutorial.AddressBookProtos"; - -message Person { - required string name = 1; - required int32 id = 2; - optional string email = 3; - - enum PhoneType { - MOBILE = 0; - HOME = 1; - WORK = 2; - } - - message PhoneNumber { - required string number = 1; - optional PhoneType type = 2 [default = HOME]; - } - - repeated PhoneNumber phone = 4; -} - -message AddressBook { - repeated Person person = 1; -} diff --git a/vendor/protobuf-php/protobuf/examples/src/.gitignore b/vendor/protobuf-php/protobuf/examples/src/.gitignore deleted file mode 100644 index c96a04f..0000000 --- a/vendor/protobuf-php/protobuf/examples/src/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/phpunit.xml.dist b/vendor/protobuf-php/protobuf/phpunit.xml.dist deleted file mode 100644 index 45dfeab..0000000 --- a/vendor/protobuf-php/protobuf/phpunit.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - ./tests - ./tests/Resources/* - - - - - - benchmark - deprecated - - - - - - ./vendor/* - - - ./src - - - diff --git a/vendor/protobuf-php/protobuf/ruleset.xml b/vendor/protobuf-php/protobuf/ruleset.xml deleted file mode 100644 index 2bbb115..0000000 --- a/vendor/protobuf-php/protobuf/ruleset.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - Coding Standard - - */Resources/* - - - - - - - 0 - - diff --git a/vendor/protobuf-php/protobuf/src/AbstractMessage.php b/vendor/protobuf-php/protobuf/src/AbstractMessage.php deleted file mode 100644 index d87bd32..0000000 --- a/vendor/protobuf-php/protobuf/src/AbstractMessage.php +++ /dev/null @@ -1,50 +0,0 @@ - - */ -abstract class AbstractMessage implements Message -{ - /** - * Message constructor - * - * @param \Protobuf\Stream|resource|string $stream - * @param \Protobuf\Configuration $configuration - */ - public function __construct($stream = null, \Protobuf\Configuration $configuration = null) - { - if ($stream === null) { - return; - } - - $config = $configuration ?: \Protobuf\Configuration::getInstance(); - $context = $config->createReadContext($stream); - - $this->readFrom($context); - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - $format = new TextFormat(); - $stream = $format->encodeMessage($this); - - return $stream->__toString(); - } - - /** - * {@inheritdoc} - */ - public static function __set_state(array $values) - { - return static::fromArray($values); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php deleted file mode 100644 index 946e435..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/BcNegativeEncoder.php +++ /dev/null @@ -1,67 +0,0 @@ - - * @author Fabio B. Silva - */ -class BcNegativeEncoder implements NegativeEncoder -{ - /** - * {@inheritdoc} - */ - public function encodeVarint($varint) - { - $values = []; - $value = sprintf('%u', $varint); - - while (bccomp($value, 0, 0) > 0) { - // Get the last 7bits of the number - $bin = ''; - $dec = $value; - - do { - $rest = bcmod($dec, 2); - $dec = bcdiv($dec, 2, 0); - $bin = $rest . $bin; - } while ($dec > 0 && mb_strlen($bin, '8bit') < 7); - - // Pack as a decimal and apply the flag - $values[] = intval($bin, 2) | 0x80; - $value = bcdiv($value, 0x80, 0); - } - - return $values; - } - - /** - * {@inheritdoc} - */ - public function encodeSFixed64($sFixed64) - { - $value = sprintf('%u', $sFixed64); - $bytes = ''; - - for ($i = 0; $i < 8; ++$i) { - // Get the last 8bits of the number - $bin = ''; - $dec = $value; - - do { - $bin = bcmod($dec, 2).$bin; - $dec = bcdiv($dec, 2, 0); - } while (mb_strlen($bin, '8bit') < 8); - - // Pack the byte - $bytes .= chr(intval($bin, 2)); - $value = bcdiv($value, 0x100, 0); - } - - return $bytes; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php deleted file mode 100644 index 2b89709..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/BigEndian.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @author Fabio B. Silva - */ -class BigEndian -{ - /** - * @var bool - */ - protected static $is32Bit; - - /** - * @var integer - */ - protected static $isBigEndian; - - /** - * Check if the current architecture is Big Endian. - * - * @return bool - */ - public static function isBigEndian() - { - if (self::$isBigEndian !== null) { - return self::$isBigEndian; - } - - list(, $result) = unpack('L', pack('V', 1)); - self::$isBigEndian = $result !== 1; - - return self::$isBigEndian; - } - - /** - * @return bool - */ - public static function is32Bit() - { - if (self::$is32Bit !== null) { - self::$is32Bit; - } - - self::$is32Bit = (PHP_INT_SIZE < 8); - - return self::$is32Bit; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php deleted file mode 100644 index 6ae15de..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/GmpNegativeEncoder.php +++ /dev/null @@ -1,92 +0,0 @@ - - * @author Fabio B. Silva - */ -class GmpNegativeEncoder implements NegativeEncoder -{ - /** - * @var \GMP - */ - protected $gmp_x00; - - /** - * @var \GMP - */ - protected $gmp_x7f; - - /** - * @var \GMP - */ - protected $gmp_x80; - - /** - * @var \GMP - */ - protected $gmp_xff; - - /** - * @var \GMP - */ - protected $gmp_x100; - - /** - * @var bool - */ - protected $is32Bit; - - /** - * Constructor - */ - public function __construct() - { - $this->gmp_x00 = gmp_init(0x00); - $this->gmp_x7f = gmp_init(0x7f); - $this->gmp_x80 = gmp_init(0x80); - $this->gmp_xff = gmp_init(0xff); - $this->gmp_x100 = gmp_init(0x100); - $this->is32Bit = BigEndian::is32Bit(); - } - - /** - * {@inheritdoc} - */ - public function encodeVarint($varint) - { - $bytes = []; - $value = $this->is32Bit - ? gmp_and($varint, '0x0ffffffffffffffff') - : sprintf('%u', $varint); - - while (gmp_cmp($value, $this->gmp_x00) > 0) { - $bytes[] = gmp_intval(gmp_and($value, $this->gmp_x7f)) | 0x80; - $value = gmp_div_q($value, $this->gmp_x80); - } - - return $bytes; - } - - /** - * {@inheritdoc} - */ - public function encodeSFixed64($sFixed64) - { - $value = $this->is32Bit - ? gmp_and($sFixed64, '0x0ffffffffffffffff') - : gmp_init(sprintf('%u', $sFixed64)); - - $bytes = ''; - - for ($i = 0; $i < 8; ++$i) { - $bytes .= chr(gmp_intval(gmp_and($value, $this->gmp_xff))); - $value = gmp_div_q($value, $this->gmp_x100); - } - - return $bytes; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php deleted file mode 100644 index 9263cc5..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/InvalidNegativeEncoder.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ -class InvalidNegativeEncoder implements NegativeEncoder -{ - /** - * {@inheritdoc} - */ - public function encodeVarint($varint) - { - throw new RuntimeException("Negative integers are only supported with GMP or BC (64bit) intextensions."); - } - - /** - * {@inheritdoc} - */ - public function encodeSFixed64($sFixed64) - { - throw new RuntimeException("Negative integers are only supported with GMP or BC (64bit) intextensions."); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php deleted file mode 100644 index ecc57d8..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/NegativeEncoder.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ -interface NegativeEncoder -{ - /** - * Encode a negative varint. - * - * @param integer $value - * - * @return array - */ - public function encodeVarint($value); - - /** - * Encode an integer as a fixed of 64bits. - * - * @param integer $value - * - * @return string - */ - public function encodeSFixed64($value); -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php b/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php deleted file mode 100644 index 23a47e4..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/Platform/PlatformFactory.php +++ /dev/null @@ -1,58 +0,0 @@ - - */ -class PlatformFactory -{ - /** - * @var \Protobuf\Binary\Platform\NegativeEncoder - */ - private $negativeEncoder; - - /** - * Return a NegativeEncoder. - * - * @return \Protobuf\Binary\Platform\NegativeEncoder - */ - public function getNegativeEncoder() - { - if ($this->negativeEncoder !== null) { - return $this->negativeEncoder; - } - - if ($this->isExtensionLoaded('gmp')) { - return $this->negativeEncoder = new GmpNegativeEncoder(); - } - - if ($this->isExtensionLoaded('bcmath') && ! $this->is32Bit()) { - return $this->negativeEncoder = new BcNegativeEncoder(); - } - - return $this->negativeEncoder = new InvalidNegativeEncoder(); - } - - /** - * @param string $name - * - * @return boolean - */ - public function isExtensionLoaded($name) - { - return extension_loaded($name); - } - - /** - * @return boolean - */ - public function is32Bit() - { - return BigEndian::is32Bit(); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php b/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php deleted file mode 100644 index c3a3e12..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/SizeCalculator.php +++ /dev/null @@ -1,212 +0,0 @@ - - */ -class SizeCalculator -{ - /** - * @var \Protobuf\Configuration - */ - protected $config; - - /** - * Constructor - * - * @param \Protobuf\Configuration $config - */ - public function __construct(Configuration $config) - { - $this->config = $config; - } - - /** - * Compute the number of bytes that would be needed to encode a varint. - * - * @param integer $value - * - * @return integer - */ - public function computeVarintSize($value) - { - if (($value & (0xffffffff << 7)) === 0) { - return 1; - } - - if (($value & (0xffffffff << 14)) === 0) { - return 2; - } - - if (($value & (0xffffffff << 21)) === 0) { - return 3; - } - - if (($value & (0xffffffff << 28)) === 0) { - return 4; - } - - if (($value & (0xffffffff << 35)) === 0) { - return 5; - } - - if (($value & (0xffffffff << 42)) === 0) { - return 6; - } - - if (($value & (0xffffffff << 49)) === 0) { - return 7; - } - - if (($value & (0xffffffff << 56)) === 0) { - return 8; - } - - if (($value & (0xffffffff << 63)) === 0) { - return 9; - } - - return 10; - } - - /** - * Compute the number of bytes that would be needed to encode a zigzag 32. - * - * @param integer $value - * - * @return integer - */ - public function computeZigzag32Size($value) - { - $varint = ($value << 1) ^ ($value >> 32 - 1); - $size = $this->computeVarintSize($varint); - - return $size; - } - - /** - * Compute the number of bytes that would be needed to encode a zigzag 64. - * - * @param integer $value - * - * @return integer - */ - public function computeZigzag64Size($value) - { - $varint = ($value << 1) ^ ($value >> 64 - 1); - $size = $this->computeVarintSize($varint); - - return $size; - } - - /** - * Compute the number of bytes that would be needed to encode a string. - * - * @param integer $value - * - * @return integer - */ - public function computeStringSize($value) - { - $length = mb_strlen($value, '8bit'); - $size = $length + $this->computeVarintSize($length); - - return $size; - } - - /** - * Compute the number of bytes that would be needed to encode a stream of bytes. - * - * @param \Protobuf\Stream $value - * - * @return integer - */ - public function computeByteStreamSize(Stream $value) - { - $length = $value->getSize(); - $size = $length + $this->computeVarintSize($length); - - return $size; - } - - /** - * Compute the number of bytes that would be needed to encode a sFixed32. - * - * @return integer - */ - public function computeSFixed32Size() - { - return 4; - } - - /** - * Compute the number of bytes that would be needed to encode a fixed32. - * - * @return integer - */ - public function computeFixed32Size() - { - return 4; - } - - /** - * Compute the number of bytes that would be needed to encode a sFixed64. - * - * @return integer - */ - public function computeSFixed64Size() - { - return 8; - } - - /** - * Compute the number of bytes that would be needed to encode a fixed64. - * - * - * @return integer - */ - public function computeFixed64Size() - { - return 8; - } - - /** - * Compute the number of bytes that would be needed to encode a float. - * - * @return integer - */ - public function computeFloatSize() - { - return 4; - } - - /** - * Compute the number of bytes that would be needed to encode a double. - * - * @return integer - */ - public function computeDoubleSize() - { - return 8; - } - - /** - * Compute the number of bytes that would be needed to encode a bool. - * - * @return integer - */ - public function computeBoolSize() - { - return 1; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php b/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php deleted file mode 100644 index fb2d998..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/StreamReader.php +++ /dev/null @@ -1,329 +0,0 @@ - - * @author Fabio B. Silva - */ -class StreamReader -{ - /** - * @var \Protobuf\Configuration - */ - protected $config; - - /** - * @var \Protobuf\Stream - */ - protected $stream; - - /** - * @var bool - */ - protected $isBigEndian; - - /** - * Constructor - * - * @param \Protobuf\Configuration $config - */ - public function __construct(Configuration $config) - { - $this->config = $config; - $this->isBigEndian = BigEndian::isBigEndian(); - } - - /** - * Reads a byte. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readByte(Stream $stream) - { - $char = $stream->read(1); - $byte = ord($char); - - return $byte; - } - - /** - * Decode a varint. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readVarint(Stream $stream) - { - // Optimize common case (single byte varints) - $byte = $this->readByte($stream); - - if ($byte < 0x80) { - return $byte; - } - - $length = $stream->getSize(); - $offset = $stream->tell(); - $result = $byte & 0x7f; - $shift = 7; - - // fastpath 32bit varints (5bytes) by unrolling the loop - if ($length - $offset >= 4) { - // 2 - $byte = $this->readByte($stream); - $result |= ($byte & 0x7f) << 7; - - if ($byte < 0x80) { - return $result; - } - - // 3 - $byte = $this->readByte($stream); - $result |= ($byte & 0x7f) << 14; - - if ($byte < 0x80) { - return $result; - } - - // 4 - $byte = $this->readByte($stream); - $result |= ($byte & 0x7f) << 21; - - if ($byte < 0x80) { - return $result; - } - - // 5 - $byte = $this->readByte($stream); - $result |= ($byte & 0x7f) << 28; - - if ($byte < 0x80) { - return $result; - } - - $shift = 35; - } - - // If we're just at the end of the buffer or handling a 64bit varint - do { - $byte = $this->readByte($stream); - $result |= ($byte & 0x7f) << $shift; - $shift += 7; - } while ($byte > 0x7f); - - return $result; - } - - /** - * Decodes a zigzag integer of the given bits. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readZigzag(Stream $stream) - { - $number = $this->readVarint($stream); - $zigzag = ($number >> 1) ^ (-($number & 1)); - - return $zigzag; - } - - /** - * Decode a fixed 32bit integer with sign. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readSFixed32(Stream $stream) - { - $bytes = $stream->read(4); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - list(, $result) = unpack('l', $bytes); - - return $result; - } - - /** - * Decode a fixed 32bit integer without sign. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readFixed32(Stream $stream) - { - $bytes = $stream->read(4); - - if (PHP_INT_SIZE < 8) { - list(, $lo, $hi) = unpack('v*', $bytes); - - return $hi << 16 | $lo; - } - - list(, $result) = unpack('V*', $bytes); - - return $result; - } - - /** - * Decode a fixed 64bit integer with sign. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readSFixed64(Stream $stream) - { - $bytes = $stream->read(8); - - list(, $lo0, $lo1, $hi0, $hi1) = unpack('v*', $bytes); - - return ($hi1 << 16 | $hi0) << 32 | ($lo1 << 16 | $lo0); - } - - /** - * Decode a fixed 64bit integer without sign. - * - * @param \Protobuf\Stream $stream - * - * @return integer - */ - public function readFixed64(Stream $stream) - { - return $this->readSFixed64($stream); - } - - /** - * Decode a 32bit float. - * - * @param \Protobuf\Stream $stream - * - * @return float - */ - public function readFloat(Stream $stream) - { - $bytes = $stream->read(4); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - list(, $result) = unpack('f', $bytes); - - return $result; - } - - /** - * Decode a 64bit double. - * - * @param \Protobuf\Stream $stream - * - * @return float - */ - public function readDouble(Stream $stream) - { - $bytes = $stream->read(8); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - list(, $result) = unpack('d', $bytes); - - return $result; - } - - /** - * Decode a bool. - * - * @param \Protobuf\Stream $stream - * - * @return bool - */ - public function readBool(Stream $stream) - { - return (bool) $this->readVarint($stream); - } - - /** - * Decode a string. - * - * @param \Protobuf\Stream $stream - * - * @return string - */ - public function readString(Stream $stream) - { - $length = $this->readVarint($stream); - $string = $stream->read($length); - - return $string; - } - - /** - * Decode a stream of bytes. - * - * @param \Protobuf\Stream $stream - * - * @return \Protobuf\Stream - */ - public function readByteStream(Stream $stream) - { - $length = $this->readVarint($stream); - $value = $stream->readStream($length); - - return $value; - } - - /** - * Read unknown scalar value. - * - * @param \Protobuf\Stream $stream - * @param integer $wire - * - * @return scalar - */ - public function readUnknown(Stream $stream, $wire) - { - if ($wire === WireFormat::WIRE_VARINT) { - return $this->readVarint($stream); - } - - if ($wire === WireFormat::WIRE_LENGTH) { - return $this->readString($stream); - } - - if ($wire === WireFormat::WIRE_FIXED32) { - return $this->readFixed32($stream); - } - - if ($wire === WireFormat::WIRE_FIXED64) { - return $this->readFixed64($stream); - } - - if ($wire === WireFormat::WIRE_GROUP_START || $wire === WireFormat::WIRE_GROUP_END) { - throw new RuntimeException('Groups are deprecated in Protocol Buffers and unsupported.'); - } - - throw new RuntimeException("Unsupported wire type '$wire' while reading unknown field."); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php b/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php deleted file mode 100644 index 235af8d..0000000 --- a/vendor/protobuf-php/protobuf/src/Binary/StreamWriter.php +++ /dev/null @@ -1,301 +0,0 @@ - - * @author Fabio B. Silva - */ -class StreamWriter -{ - /** - * @var \Protobuf\Configuration - */ - protected $config; - - /** - * @var \Protobuf\Binary\Platform\NegativeEncoder - */ - protected $negativeEncoder; - - /** - * @var bool - */ - protected $isBigEndian; - - /** - * Constructor - * - * @param \Protobuf\Configuration $config - */ - public function __construct(Configuration $config) - { - $this->config = $config; - $this->isBigEndian = BigEndian::isBigEndian(); - $this->negativeEncoder = $config->getPlatformFactory() - ->getNegativeEncoder(); - } - - /** - * Store the given bytes in the stream. - * - * @param \Protobuf\Stream $stream - * @param string $bytes - * @param int $length - */ - public function writeBytes(Stream $stream, $bytes, $length = null) - { - if ($length === null) { - $length = mb_strlen($bytes, '8bit'); - } - - $stream->write($bytes, $length); - } - - /** - * Store a single byte. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeByte(Stream $stream, $value) - { - $stream->write(chr($value), 1); - } - - /** - * Store an integer encoded as varint. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeVarint(Stream $stream, $value) - { - // Small values do not need to be encoded - if ($value >= 0 && $value < 0x80) { - $this->writeByte($stream, $value); - - return; - } - - $values = null; - - // Build an array of bytes with the encoded values - if ($value > 0) { - $values = []; - - while ($value > 0) { - $values[] = 0x80 | ($value & 0x7f); - $value = $value >> 7; - } - } - - if ($values === null) { - $values = $this->negativeEncoder->encodeVarint($value); - } - - // Remove the MSB flag from the last byte - $values[count($values) - 1] &= 0x7f; - - // Convert the byte sized ints to actual bytes in a string - $values = array_merge(['C*'], $values); - $bytes = call_user_func_array('pack', $values); - - $this->writeBytes($stream, $bytes); - } - - /** - * Encodes an integer with zigzag. - * - * @param \Protobuf\Stream $stream - * @param integer $value - * @param integer $base - */ - public function writeZigzag(Stream $stream, $value, $base = 32) - { - if ($base == 32) { - $this->writeZigzag32($stream, $value); - - return; - } - - $this->writeZigzag64($stream, $value); - } - - /** - * Encodes an integer with zigzag. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeZigzag32(Stream $stream, $value) - { - $this->writeVarint($stream, ($value << 1) ^ ($value >> 32 - 1)); - } - - /** - * Encodes an integer with zigzag. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeZigzag64(Stream $stream, $value) - { - $this->writeVarint($stream, ($value << 1) ^ ($value >> 64 - 1)); - } - - /** - * Encode an integer as a fixed of 32bits with sign. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeSFixed32(Stream $stream, $value) - { - $bytes = pack('l*', $value); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - $this->writeBytes($stream, $bytes); - } - - /** - * Encode an integer as a fixed of 32bits without sign. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeFixed32(Stream $stream, $value) - { - $this->writeBytes($stream, pack('V*', $value), 4); - } - - /** - * Encode an integer as a fixed of 64bits with sign. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeSFixed64(Stream $stream, $value) - { - if ($value >= 0) { - $this->writeFixed64($stream, $value); - - return; - } - - $bytes = $this->negativeEncoder->encodeSFixed64($value); - - $this->writeBytes($stream, $bytes); - } - - /** - * Encode an integer as a fixed of 64bits without sign. - * - * @param \Protobuf\Stream $stream - * @param integer $value - */ - public function writeFixed64(Stream $stream, $value) - { - $bytes = pack('V*', $value & 0xffffffff, $value / (0xffffffff + 1)); - - $this->writeBytes($stream, $bytes, 8); - } - - /** - * Encode a number as a 32bit float. - * - * @param \Protobuf\Stream $stream - * @param float $value - */ - public function writeFloat(Stream $stream, $value) - { - $bytes = pack('f*', $value); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - $this->writeBytes($stream, $bytes, 4); - } - - /** - * Encode a number as a 64bit double. - * - * @param \Protobuf\Stream $stream - * @param float $value - */ - public function writeDouble(Stream $stream, $value) - { - $bytes = pack('d*', $value); - - if ($this->isBigEndian) { - $bytes = strrev($bytes); - } - - $this->writeBytes($stream, $bytes, 8); - } - - /** - * Encode a bool. - * - * @param \Protobuf\Stream $stream - * @param bool $value - */ - public function writeBool(Stream $stream, $value) - { - $this->writeVarint($stream, $value ? 1 : 0); - } - - /** - * Encode a string. - * - * @param \Protobuf\Stream $stream - * @param string $value - */ - public function writeString(Stream $stream, $value) - { - $this->writeVarint($stream, mb_strlen($value, '8bit')); - $this->writeBytes($stream, $value); - } - - /** - * Encode a stream of bytes. - * - * @param \Protobuf\Stream $stream - * @param \Protobuf\Stream $value - */ - public function writeByteStream(Stream $stream, Stream $value) - { - $length = $value->getSize(); - - $value->seek(0); - $this->writeVarint($stream, $length); - $stream->writeStream($value, $length); - } - - /** - * Write the given stream. - * - * @param \Protobuf\Stream $stream - * @param \Protobuf\Stream $value - * @param int $length - */ - public function writeStream(Stream $stream, Stream $value, $length = null) - { - if ($length === null) { - $length = $value->getSize(); - } - - $stream->writeStream($value, $length); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Collection.php b/vendor/protobuf-php/protobuf/src/Collection.php deleted file mode 100644 index 873a527..0000000 --- a/vendor/protobuf-php/protobuf/src/Collection.php +++ /dev/null @@ -1,16 +0,0 @@ - - */ -interface Collection extends Countable, Traversable -{ - -} diff --git a/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php b/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php deleted file mode 100644 index 1595e0d..0000000 --- a/vendor/protobuf-php/protobuf/src/ComputeSizeContext.php +++ /dev/null @@ -1,34 +0,0 @@ - - */ -class ComputeSizeContext -{ - /** - * @var \Protobuf\Binary\SizeCalculator - */ - private $calculator; - - /** - * @param \Protobuf\Binary\SizeCalculator $calculator - */ - public function __construct(SizeCalculator $calculator) - { - $this->calculator = $calculator; - } - - /** - * @return \Protobuf\Binary\SizeCalculator - */ - public function getSizeCalculator() - { - return $this->calculator; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Configuration.php b/vendor/protobuf-php/protobuf/src/Configuration.php deleted file mode 100644 index 85388f9..0000000 --- a/vendor/protobuf-php/protobuf/src/Configuration.php +++ /dev/null @@ -1,195 +0,0 @@ - - */ -class Configuration -{ - /** - * @var \Protobuf\Extension\ExtensionRegistry - */ - private $extensionRegistry; - - /** - * @var \Protobuf\Binary\Platform\PlatformFactory - */ - private $platformFactory; - - /** - * @var \Protobuf\Binary\StreamWriter - */ - private $streamWriter; - - /** - * @var \Protobuf\Binary\StreamReader - */ - private $streamReader; - - /** - * @var \Protobuf\Binary\SizeCalculator - */ - private $sizeCalculator; - - /** - * @var \Protobuf\DescriptorLoader - */ - protected static $instance; - - /** - * Return a ExtensionRegistry. - * - * @return \Protobuf\Extension\ExtensionRegistry - */ - public function getExtensionRegistry() - { - if ($this->extensionRegistry === null) { - $this->extensionRegistry = new ExtensionRegistry(); - } - - return $this->extensionRegistry; - } - - /** - * Set a ExtensionRegistry. - * - * @param \Protobuf\Extension\ExtensionRegistry $extensionRegistry - */ - public function setExtensionRegistry(ExtensionRegistry $extensionRegistry) - { - $this->extensionRegistry = $extensionRegistry; - } - - /** - * Return a PlatformFactory. - * - * @return \Protobuf\Binary\Platform\PlatformFactory - */ - public function getPlatformFactory() - { - if ($this->platformFactory !== null) { - return $this->platformFactory; - } - - return $this->platformFactory = new PlatformFactory(); - } - - /** - * Return a StreamReader - * - * @return \Protobuf\Binary\StreamReader - */ - public function getStreamReader() - { - if ($this->streamReader !== null) { - return $this->streamReader; - } - - return $this->streamReader = new StreamReader($this); - } - - /** - * Return a StreamWriter - * - * @return \Protobuf\Binary\StreamWriter - */ - public function getStreamWriter() - { - if ($this->streamWriter !== null) { - return $this->streamWriter; - } - - return $this->streamWriter = new StreamWriter($this); - } - - /** - * Return a SizeCalculator - * - * @return \Protobuf\Binary\SizeCalculator - */ - public function getSizeCalculator() - { - if ($this->sizeCalculator !== null) { - return $this->sizeCalculator; - } - - return $this->sizeCalculator = new SizeCalculator($this); - } - - /** - * Sets the PlatformFactory. - * - * @param \Protobuf\Binary\Platform\PlatformFactory $platformFactory - */ - public function setPlatformFactory(PlatformFactory $platformFactory) - { - $this->platformFactory = $platformFactory; - } - - /** - * Create a compute size context. - * - * @return \Protobuf\ComputeSizeContext - */ - public function createComputeSizeContext() - { - $calculator = $this->getSizeCalculator(); - $context = new ComputeSizeContext($calculator); - - return $context; - } - - /** - * Create a write context. - * - * @return \Protobuf\WriteContext - */ - public function createWriteContext() - { - $stream = Stream::create(); - $writer = $this->getStreamWriter(); - $sizeContext = $this->createComputeSizeContext(); - $context = new WriteContext($stream, $writer, $sizeContext); - - return $context; - } - - /** - * Create a read context. - * - * @param \Protobuf\Stream|resource|string $stream - * - * @return \Protobuf\ReadContext - */ - public function createReadContext($stream) - { - $reader = $this->getStreamReader(); - $registry = $this->extensionRegistry; - $context = new ReadContext($stream, $reader, $registry); - - return $context; - } - - /** - * Returns single instance of this class - * - * @return \Protobuf\Configuration - */ - public static function getInstance() - { - if (self::$instance !== null) { - return self::$instance; - } - - return self::$instance = new Configuration(); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Enum.php b/vendor/protobuf-php/protobuf/src/Enum.php deleted file mode 100644 index 4b2c316..0000000 --- a/vendor/protobuf-php/protobuf/src/Enum.php +++ /dev/null @@ -1,63 +0,0 @@ - - */ -abstract class Enum -{ - /** - * Enum value - * - * @var integer - */ - protected $value; - - /** - * Enum name - * - * @var string - */ - protected $name; - - /** - * @param string $name - * @param integer $value - */ - public function __construct($name, $value) - { - $this->name = $name; - $this->value = $value; - } - - /** - * @return int - */ - public function value() - { - return $this->value; - } - - /** - * @return string - */ - public function name() - { - return $this->name; - } - - /** - * @return string - */ - public function __toString() - { - return (string) $this->name; - } -} diff --git a/vendor/protobuf-php/protobuf/src/EnumCollection.php b/vendor/protobuf-php/protobuf/src/EnumCollection.php deleted file mode 100644 index ab6de52..0000000 --- a/vendor/protobuf-php/protobuf/src/EnumCollection.php +++ /dev/null @@ -1,48 +0,0 @@ - - */ -class EnumCollection extends ArrayObject implements Collection -{ - /** - * @param array<\Protobuf\Enum> $values - */ - public function __construct(array $values = []) - { - array_walk($values, [$this, 'add']); - } - - /** - * Adds a \Protobuf\Enum to this collection - * - * @param \Protobuf\Enum $enum - */ - public function add(Enum $enum) - { - parent::offsetSet(null, $enum); - } - - /** - * {@inheritdoc} - */ - public function offsetSet($offset, $value) - { - if ( ! $value instanceof Enum) { - throw new InvalidArgumentException(sprintf( - 'Argument 2 passed to %s must be a \Protobuf\Enum, %s given', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - parent::offsetSet($offset, $value); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Exception.php b/vendor/protobuf-php/protobuf/src/Exception.php deleted file mode 100644 index 4e561c5..0000000 --- a/vendor/protobuf-php/protobuf/src/Exception.php +++ /dev/null @@ -1,13 +0,0 @@ - - * @author Fabio B. Silva - */ -class Exception extends \Exception -{ -} diff --git a/vendor/protobuf-php/protobuf/src/Extension.php b/vendor/protobuf-php/protobuf/src/Extension.php deleted file mode 100644 index 1b305a2..0000000 --- a/vendor/protobuf-php/protobuf/src/Extension.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ -interface Extension -{ - -} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php deleted file mode 100644 index 082c9bc..0000000 --- a/vendor/protobuf-php/protobuf/src/Extension/ExtensionField.php +++ /dev/null @@ -1,133 +0,0 @@ - - */ -class ExtensionField -{ - /** - * @var callback - */ - private $sizeCalculator; - - /** - * @var callback - */ - private $writer; - - /** - * @var callback - */ - private $reader; - - /** - * @var string - */ - private $extendee; - - /** - * @var string - */ - private $method; - - /** - * @var string - */ - private $name; - - /** - * @var integer - */ - private $tag; - - /** - * @param string $extendee - * @param string $name - * @param integer $tag - * @param callback $reader - * @param callback $writer - * @param callback $sizeCalculator - * @param string $method - */ - public function __construct($extendee, $name, $tag, $reader, $writer, $sizeCalculator, $method = null) - { - $this->tag = $tag; - $this->name = $name; - $this->reader = $reader; - $this->writer = $writer; - $this->method = $method; - $this->extendee = $extendee; - $this->sizeCalculator = $sizeCalculator; - } - - /** - * @return string - */ - public function getExtendee() - { - return $this->extendee; - } - - /** - * @return string - */ - public function getMethod() - { - return $this->method; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @return integer - */ - public function getTag() - { - return $this->tag; - } - - /** - * @param \Protobuf\ComputeSizeContext $context - * @param mixed $value - * - * @return integer - */ - public function serializedSize(ComputeSizeContext $context, $value) - { - return call_user_func($this->sizeCalculator, $context, $value); - } - - /** - * @param \Protobuf\WriteContext $context - * @param mixed $value - */ - public function writeTo(WriteContext $context, $value) - { - call_user_func($this->writer, $context, $value); - } - - /** - * @param \Protobuf\ReadContext $context - * @param integer $wire - * - * @return mixed - */ - public function readFrom(ReadContext $context, $wire) - { - return call_user_func($this->reader, $context, $wire); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php deleted file mode 100644 index e5b32c3..0000000 --- a/vendor/protobuf-php/protobuf/src/Extension/ExtensionFieldMap.php +++ /dev/null @@ -1,117 +0,0 @@ - - */ -class ExtensionFieldMap extends SplObjectStorage implements Collection -{ - /** - * @var string - */ - protected $extendee; - - /** - * @param string $extendee - */ - public function __construct($extendee = null) - { - $this->extendee = trim($extendee, '\\'); - } - - /** - * @param \Protobuf\Extension\ExtensionField $extension - * @param mixed $value - */ - public function add(ExtensionField $extension, $value) - { - if ( ! $value instanceof Message) { - $this->put($extension, $value); - - return; - } - - $className = get_class($value); - $existing = isset($this[$extension]) - ? $this[$extension] - : null; - - if ($existing instanceof $className) { - $value->merge($existing); - } - - $this->put($extension, $value); - } - - /** - * @param \Protobuf\Extension\ExtensionField $extension - * @param mixed $value - */ - public function put(ExtensionField $extension, $value) - { - $extendee = trim($extension->getExtendee(), '\\'); - - if ($extendee !== $this->extendee) { - throw new InvalidArgumentException(sprintf( - 'Invalid extendee, %s is expected but %s given', - $this->extendee, - $extendee - )); - } - - $this->attach($extension, $value); - } - - /** - * @param \Protobuf\Extension\ExtensionField $key - * - * @return mixed - */ - public function get(ExtensionField $key) - { - return $this->offsetGet($key); - } - - /** - * @param \Protobuf\ComputeSizeContext $context - * - * @return integer - */ - public function serializedSize(ComputeSizeContext $context) - { - $size = 0; - - for ($this->rewind(); $this->valid(); $this->next()) { - $extension = $this->current(); - $value = $this->getInfo(); - $size += $extension->serializedSize($context, $value); - } - - return $size; - } - - /** - * @param \Protobuf\WriteContext $context - */ - public function writeTo(WriteContext $context) - { - for ($this->rewind(); $this->valid(); $this->next()) { - $extension = $this->current(); - $value = $this->getInfo(); - - $extension->writeTo($context, $value); - } - } -} diff --git a/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php b/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php deleted file mode 100644 index aa5dd7b..0000000 --- a/vendor/protobuf-php/protobuf/src/Extension/ExtensionRegistry.php +++ /dev/null @@ -1,60 +0,0 @@ - - */ -class ExtensionRegistry -{ - /** - * @var array - */ - protected $extensions = []; - - /** - * Remove all registered extensions - */ - public function clear() - { - $this->extensions = []; - } - - /** - * Adds an element to the registry. - * - * @param \Protobuf\Extension\ExtensionField $extension - */ - public function add(ExtensionField $extension) - { - $extendee = trim($extension->getExtendee(), '\\'); - $number = $extension->getTag(); - - if ( ! isset($this->extensions[$extendee])) { - $this->extensions[$extendee] = []; - } - - $this->extensions[$extendee][$number] = $extension; - } - - /** - * Find an extension by containing field number - * - * @param string $className - * @param integer $number - * - * @return \Protobuf\Extension\ExtensionField|null - */ - public function findByNumber($className, $number) - { - $extendee = trim($className, '\\'); - - if ( ! isset($this->extensions[$extendee][$number])) { - return null; - } - - return $this->extensions[$extendee][$number]; - } -} diff --git a/vendor/protobuf-php/protobuf/src/Field.php b/vendor/protobuf-php/protobuf/src/Field.php deleted file mode 100644 index 8af3658..0000000 --- a/vendor/protobuf-php/protobuf/src/Field.php +++ /dev/null @@ -1,129 +0,0 @@ - - * @author Fabio B. Silva - */ -class Field -{ - const LABEL_OPTIONAL = 1; - const LABEL_REQUIRED = 2; - const LABEL_REPEATED = 3; - const LABEL_UNKNOWN = -1; - - const TYPE_DOUBLE = 1; - const TYPE_FLOAT = 2; - const TYPE_INT64 = 3; - const TYPE_UINT64 = 4; - const TYPE_INT32 = 5; - const TYPE_FIXED64 = 6; - const TYPE_FIXED32 = 7; - const TYPE_BOOL = 8; - const TYPE_STRING = 9; - const TYPE_GROUP = 10; - const TYPE_MESSAGE = 11; - const TYPE_BYTES = 12; - const TYPE_UINT32 = 13; - const TYPE_ENUM = 14; - const TYPE_SFIXED32 = 15; - const TYPE_SFIXED64 = 16; - const TYPE_SINT32 = 17; - const TYPE_SINT64 = 18; - const TYPE_UNKNOWN = -1; - - /** - * @var array - */ - protected static $names = [ - self::TYPE_DOUBLE => 'double', - self::TYPE_FLOAT => 'float', - self::TYPE_INT64 => 'int64', - self::TYPE_UINT64 => 'uint64', - self::TYPE_INT32 => 'int32', - self::TYPE_FIXED64 => 'fixed64', - self::TYPE_FIXED32 => 'fixed32', - self::TYPE_BOOL => 'bool', - self::TYPE_STRING => 'string', - self::TYPE_MESSAGE => 'message', - self::TYPE_BYTES => 'bytes', - self::TYPE_UINT32 => 'uint32', - self::TYPE_ENUM => 'enum', - self::TYPE_SFIXED32 => 'sfixed32', - self::TYPE_SFIXED64 => 'sfixed64', - self::TYPE_SINT32 => 'sint32', - self::TYPE_SINT64 => 'sint64', - ]; - - /** - * Obtain the label name (repeated, optional, required). - * - * @param string $label - * - * @return string - */ - public static function getLabelName($label) - { - if ($label === self::LABEL_OPTIONAL) { - return 'optional'; - } - - if ($label === self::LABEL_REQUIRED) { - return 'required'; - } - - if ($label === self::LABEL_REPEATED) { - return 'repeated'; - } - - return null; - } - - /** - * @param integer $type - * - * @return string - */ - public static function getTypeName($type) - { - return isset(self::$names[$type]) - ? self::$names[$type] - : null; - } - - /** - * @param integer $type - * - * @return string - */ - public static function getPhpType($type) - { - switch ($type) { - case self::TYPE_DOUBLE: - case self::TYPE_FLOAT: - return 'float'; - case self::TYPE_INT64: - case self::TYPE_UINT64: - case self::TYPE_INT32: - case self::TYPE_FIXED64: - case self::TYPE_FIXED32: - case self::TYPE_UINT32: - case self::TYPE_SFIXED32: - case self::TYPE_SFIXED64: - case self::TYPE_SINT32: - case self::TYPE_SINT64: - return 'int'; - case self::TYPE_BOOL: - return 'bool'; - case self::TYPE_STRING: - return 'string'; - case self::TYPE_BYTES: - return '\Protobuf\Stream'; - default: - return null; - } - } -} diff --git a/vendor/protobuf-php/protobuf/src/Message.php b/vendor/protobuf-php/protobuf/src/Message.php deleted file mode 100644 index a319f7f..0000000 --- a/vendor/protobuf-php/protobuf/src/Message.php +++ /dev/null @@ -1,86 +0,0 @@ - - */ -interface Message -{ - /** - * Creates message from the given stream. - * - * @param \Protobuf\Stream|resource|string $stream - * @param \Protobuf\Configuration $configuration - * - * @return \Protobuf\Message - */ - public static function fromStream($stream, Configuration $configuration = null); - - /** - * Serializes the message and returns a stream containing its bytes. - * - * @param \Protobuf\Configuration $configuration - * - * @return \Protobuf\Stream - */ - public function toStream(Configuration $configuration = null); - - /** - * Compute the number of bytes that would be needed to encode the message - * - * @param \Protobuf\ComputeSizeContext $context - * - * @return integer - */ - public function serializedSize(ComputeSizeContext $context); - - /** - * Serializes the message and returns a stream containing its bytes. - * - * @param \Protobuf\ReadContext $context - */ - public function readFrom(ReadContext $context); - - /** - * Encodes and writes the message - * - * @param \Protobuf\ReadContext $context - * - * @return \Protobuf\Stream - */ - public function writeTo(WriteContext $context); - - /** - * Merge $context into the message being built. - * - * @param \Protobuf\Message $message - */ - public function merge(Message $message); - - /** - * Obtain the list of unknown fields in this message. - * - * @return \Protobuf\UnknownFieldSet - */ - public function unknownFieldSet(); - - /** - * Obtain the map of extensions in this message. - * - * @return \Protobuf\Extension\ExtensionFieldMap - */ - public function extensions(); - - /** - * Reset all fields back to the initial values. - */ - public function clear(); -} diff --git a/vendor/protobuf-php/protobuf/src/MessageCollection.php b/vendor/protobuf-php/protobuf/src/MessageCollection.php deleted file mode 100644 index 81a24ee..0000000 --- a/vendor/protobuf-php/protobuf/src/MessageCollection.php +++ /dev/null @@ -1,48 +0,0 @@ - - */ -class MessageCollection extends ArrayObject implements Collection -{ - /** - * @param array<\Protobuf\Message> $values - */ - public function __construct(array $values = []) - { - array_walk($values, [$this, 'add']); - } - - /** - * Adds a message to this collection - * - * @param \Protobuf\Message $message - */ - public function add(Message $message) - { - parent::offsetSet(null, $message); - } - - /** - * {@inheritdoc} - */ - public function offsetSet($offset, $value) - { - if ( ! $value instanceof Message) { - throw new InvalidArgumentException(sprintf( - 'Argument 2 passed to %s must implement interface \Protobuf\Message, %s given', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - parent::offsetSet($offset, $value); - } -} diff --git a/vendor/protobuf-php/protobuf/src/MessageSerializer.php b/vendor/protobuf-php/protobuf/src/MessageSerializer.php deleted file mode 100644 index 23df67f..0000000 --- a/vendor/protobuf-php/protobuf/src/MessageSerializer.php +++ /dev/null @@ -1,57 +0,0 @@ - - */ -class MessageSerializer implements Serializer -{ - /** - * @var \Protobuf\Configuration - */ - private $config; - - /** - * @param \Protobuf\Configuration $config - */ - public function __construct(Configuration $config = null) - { - $this->config = $config ?: Configuration::getInstance(); - } - - /** - * @return \Protobuf\Configuration - */ - public function getConfiguration() - { - return $this->config; - } - - /** - * Serializes the given message. - * - * @param \Protobuf\Message $message - * - * @return \Protobuf\Stream - */ - public function serialize(Message $message) - { - return $message->toStream($this->config); - } - - /** - * Deserializes the given data to the specified message. - * - * @param string $class - * @param \Protobuf\Stream|resource|string $stream - * - * @return \Protobuf\Message - */ - public function unserialize($class, $stream) - { - return new $class($stream, $this->config); - } -} diff --git a/vendor/protobuf-php/protobuf/src/ReadContext.php b/vendor/protobuf-php/protobuf/src/ReadContext.php deleted file mode 100644 index 5099f63..0000000 --- a/vendor/protobuf-php/protobuf/src/ReadContext.php +++ /dev/null @@ -1,93 +0,0 @@ - - */ -class ReadContext -{ - /** - * @var \Protobuf\Extension\ExtensionRegistry - */ - private $extensionRegistry; - - /** - * @var \Protobuf\Binary\StreamReader - */ - private $reader; - - /** - * @var \Protobuf\Stream - */ - private $stream; - - /** - * @var integer - */ - private $length; - - /** - * @param \Protobuf\Stream|resource|string $stream - * @param \Protobuf\Binary\StreamReader $reader - * @param \Protobuf\Extension\ExtensionRegistry $extensionRegistry - */ - public function __construct($stream, StreamReader $reader, ExtensionRegistry $extensionRegistry = null) - { - if ( ! $stream instanceof \Protobuf\Stream) { - $stream = Stream::wrap($stream); - } - - $this->stream = $stream; - $this->reader = $reader; - $this->extensionRegistry = $extensionRegistry; - } - - /** - * Return a ExtensionRegistry. - * - * @return \Protobuf\Extension\ExtensionRegistry - */ - public function getExtensionRegistry() - { - return $this->extensionRegistry; - } - - /** - * @return \Protobuf\Binary\StreamReader - */ - public function getReader() - { - return $this->reader; - } - - /** - * @return \Protobuf\Stream - */ - public function getStream() - { - return $this->stream; - } - - /** - * @return integer - */ - public function getLength() - { - return $this->length; - } - - /** - * @param integer $length - */ - public function setLength($length) - { - $this->length = $length; - } -} diff --git a/vendor/protobuf-php/protobuf/src/ScalarCollection.php b/vendor/protobuf-php/protobuf/src/ScalarCollection.php deleted file mode 100644 index 21a3c65..0000000 --- a/vendor/protobuf-php/protobuf/src/ScalarCollection.php +++ /dev/null @@ -1,56 +0,0 @@ - - */ -class ScalarCollection extends ArrayObject implements Collection -{ - /** - * @param array $values - */ - public function __construct(array $values = []) - { - array_walk($values, [$this, 'add']); - } - - /** - * Adds a value to this collection - * - * @param scalar $value - */ - public function add($value) - { - if ( ! is_scalar($value)) { - throw new InvalidArgumentException(sprintf( - 'Argument 1 passed to %s must be a scalar value, %s given', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - parent::offsetSet(null, $value); - } - - /** - * {@inheritdoc} - */ - public function offsetSet($offset, $value) - { - if ( ! is_scalar($value)) { - throw new InvalidArgumentException(sprintf( - 'Argument 2 passed to %s must be a scalar value, %s given', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - parent::offsetSet($offset, $value); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Serializer.php b/vendor/protobuf-php/protobuf/src/Serializer.php deleted file mode 100644 index 7d77ec1..0000000 --- a/vendor/protobuf-php/protobuf/src/Serializer.php +++ /dev/null @@ -1,30 +0,0 @@ - - */ -interface Serializer -{ - /** - * Serializes the given message. - * - * @param \Protobuf\Message $message - * - * @return \Protobuf\Stream - */ - public function serialize(Message $message); - - /** - * Deserializes the given data to the specified message. - * - * @param string $class - * @param \Protobuf\Stream|resource|string $stream - * - * @return \Protobuf\Message - */ - public function unserialize($class, $stream); -} diff --git a/vendor/protobuf-php/protobuf/src/Stream.php b/vendor/protobuf-php/protobuf/src/Stream.php deleted file mode 100644 index 4c7b5b1..0000000 --- a/vendor/protobuf-php/protobuf/src/Stream.php +++ /dev/null @@ -1,304 +0,0 @@ - - */ -class Stream -{ - /** - * @var resource - */ - private $stream; - - /** - * @var integer - */ - private $size; - - /** - * @param resource $stream - * @param integer $size - * - * @throws \InvalidArgumentException if the stream is not a stream resource - */ - public function __construct($stream, $size = null) - { - if ( ! is_resource($stream)) { - throw new InvalidArgumentException('Stream must be a resource'); - } - - $this->size = $size; - $this->stream = $stream; - } - - /** - * Closes the stream when the destructed - */ - public function __destruct() - { - if (is_resource($this->stream)) { - fclose($this->stream); - } - - $this->stream = null; - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - return $this->getContents(); - } - - /** - * Returns the remaining contents of the stream as a string. - * - * @return string - */ - public function getContents() - { - if ( ! $this->stream) { - return ''; - } - - $this->seek(0); - - return stream_get_contents($this->stream); - } - - /** - * Get the size of the stream - * - * @return int|null Returns the size in bytes if known - * - * @throws \InvalidArgumentException If cannot find out the stream size - */ - public function getSize() - { - if ($this->size !== null) { - return $this->size; - } - - if ( ! $this->stream) { - return null; - } - - $stats = fstat($this->stream); - - if (isset($stats['size'])) { - return $this->size = $stats['size']; - } - - throw new RuntimeException('Unknown stream size'); - } - - /** - * Returns true if the stream is at the end of the stream. - * - * @return bool - */ - public function eof() - { - return feof($this->stream); - } - - /** - * Returns the current position of the file read/write pointer - * - * @return int - * - * @throws \RuntimeException If cannot find out the stream position - */ - public function tell() - { - $position = ftell($this->stream); - - if ($position === false) { - throw new RuntimeException('Unable to get stream position'); - } - - return $position; - } - - /** - * Seek to a position in the stream - * - * @param int $offset - * @param int $whence - * - * @throws \RuntimeException If cannot find out the stream position - */ - public function seek($offset, $whence = SEEK_SET) - { - if (fseek($this->stream, $offset, $whence) !== 0) { - throw new RuntimeException('Unable to seek stream position to ' . $offset); - } - } - - /** - * Read data from the stream - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($length < 1) { - return ''; - } - - $buffer = fread($this->stream, $length); - - if ($buffer === false) { - throw new RuntimeException('Failed to read ' . $length . ' bytes'); - } - - return $buffer; - } - - /** - * Read stream - * - * @param int $length - * - * @return \Protobuf\Stream - * - * @throws \RuntimeException - */ - public function readStream($length) - { - $stream = self::fromString(); - $target = $stream->stream; - $source = $this->stream; - - if ($length < 1) { - return $stream; - } - - $written = stream_copy_to_stream($source, $target, $length); - - if ($written !== $length) { - throw new RuntimeException('Failed to read stream with ' . $length . ' bytes'); - } - - $stream->seek(0); - - return $stream; - } - - /** - * Write data to the stream - * - * @param string $bytes - * @param int $length - * - * @return int - * - * @throws \RuntimeException - */ - public function write($bytes, $length) - { - $written = fwrite($this->stream, $bytes, $length); - - if ($written !== $length) { - throw new RuntimeException('Failed to write '.$length.' bytes'); - } - - $this->size = null; - - return $written; - } - - /** - * Write stream - * - * @param \Protobuf\Stream $stream - * @param int $length - * - * @return int - * - * @throws \RuntimeException - */ - public function writeStream(Stream $stream, $length) - { - $target = $this->stream; - $source = $stream->stream; - $written = stream_copy_to_stream($source, $target); - - if ($written !== $length) { - throw new RuntimeException('Failed to write stream with ' . $length . ' bytes'); - } - - $this->size = null; - - return $written; - } - - /** - * Wrap the input resource in a stream object. - * - * @param \Protobuf\Stream|resource|string $resource - * @param integer $size - * - * @return \Protobuf\Stream - * - * @throws \InvalidArgumentException if the $resource arg is not valid. - */ - public static function wrap($resource = '', $size = null) - { - if ($resource instanceof Stream) { - return $resource; - } - - $type = gettype($resource); - - if ($type == 'string') { - return self::fromString($resource, $size); - } - - if ($type == 'resource') { - return new self($resource, $size); - } - - throw new InvalidArgumentException('Invalid resource type: ' . $type); - } - - /** - * Create a new stream. - * - * @return \Protobuf\Stream - */ - public static function create() - { - return new self(fopen('php://temp', 'r+')); - } - - /** - * Create a new stream from a string. - * - * @param string $resource - * @param integer $size - * - * @return \Protobuf\Stream - */ - public static function fromString($resource = '', $size = null) - { - $stream = fopen('php://temp', 'r+'); - - if ($resource !== '') { - fwrite($stream, $resource); - fseek($stream, 0); - } - - return new self($stream, $size); - } -} diff --git a/vendor/protobuf-php/protobuf/src/StreamCollection.php b/vendor/protobuf-php/protobuf/src/StreamCollection.php deleted file mode 100644 index 6af1a88..0000000 --- a/vendor/protobuf-php/protobuf/src/StreamCollection.php +++ /dev/null @@ -1,48 +0,0 @@ - - */ -class StreamCollection extends ArrayObject implements Collection -{ - /** - * @param array<\Protobuf\Stream> $values - */ - public function __construct(array $values = []) - { - array_walk($values, [$this, 'add']); - } - - /** - * Adds a \Protobuf\Stream to this collection - * - * @param \Protobuf\Stream $stream - */ - public function add(Stream $stream) - { - parent::offsetSet(null, $stream); - } - - /** - * {@inheritdoc} - */ - public function offsetSet($offset, $value) - { - if ( ! $value instanceof Stream) { - throw new InvalidArgumentException(sprintf( - 'Argument 2 passed to %s must be a \Protobuf\Stream, %s given', - __METHOD__, - is_object($value) ? get_class($value) : gettype($value) - )); - } - - parent::offsetSet($offset, $value); - } -} diff --git a/vendor/protobuf-php/protobuf/src/TextFormat.php b/vendor/protobuf-php/protobuf/src/TextFormat.php deleted file mode 100644 index 408517a..0000000 --- a/vendor/protobuf-php/protobuf/src/TextFormat.php +++ /dev/null @@ -1,117 +0,0 @@ - - * @author Fabio B. Silva - */ -class TextFormat -{ - /** - * @param \Protobuf\Message $message - * @param integer $level - * - * @return \Protobuf\Stream - */ - public function encodeMessage(Message $message, $level = 0) - { - $reflect = new ReflectionClass($message); - $properties = $reflect->getProperties(ReflectionProperty::IS_PROTECTED); - $indent = str_repeat(' ', $level); - $stream = Stream::create(); - - foreach ($properties as $property) { - - $property->setAccessible(true); - - $name = $property->getName(); - $value = $property->getValue($message); - - if ($value === null) { - continue; - } - - if ( ! is_array($value) && ! ($value instanceof Traversable)) { - - if ( ! $value instanceof Message) { - $item = $this->encodeValue($value); - $buffer = $indent . $name . ': ' . $item . PHP_EOL; - - $stream->write($buffer, strlen($buffer)); - - continue; - } - - $innerStream = $this->encodeMessage($value, $level + 1); - $beginMessage = $indent . $name . ' {' . PHP_EOL; - $endMessage = $indent . '}' . PHP_EOL; - - $stream->write($beginMessage, strlen($beginMessage)); - $stream->writeStream($innerStream, $innerStream->getSize()); - $stream->write($endMessage, strlen($endMessage)); - - continue; - } - - foreach ($value as $val) { - // Skip nullified repeated values - if ($val == null) { - continue; - } - - if ( ! $val instanceof Message) { - $item = $this->encodeValue($val); - $buffer = $indent . $name . ': ' . $item . PHP_EOL; - - $stream->write($buffer, strlen($buffer)); - - continue; - } - - $innerStream = $this->encodeMessage($val, $level + 1); - $beginMessage = $indent . $name . ' {' . PHP_EOL; - $endMessage = $indent . '}' . PHP_EOL; - - $stream->write($beginMessage, strlen($beginMessage)); - $stream->writeStream($innerStream, $innerStream->getSize()); - $stream->write($endMessage, strlen($endMessage)); - } - } - - $stream->seek(0); - - return $stream; - } - - /** - * @param scalar|array $value - * - * @return string - */ - public function encodeValue($value) - { - if (is_bool($value)) { - return (int) $value; - } - - if ($value instanceof Enum) { - return $value->name(); - } - - if ($value instanceof Stream) { - return json_encode($value->__toString()); - } - - return json_encode($value); - } -} diff --git a/vendor/protobuf-php/protobuf/src/Unknown.php b/vendor/protobuf-php/protobuf/src/Unknown.php deleted file mode 100644 index ccfa28e..0000000 --- a/vendor/protobuf-php/protobuf/src/Unknown.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @author Fabio B. Silva - */ -class Unknown -{ - /** - * @var integer - */ - public $tag; - - /** - * @var integer - */ - public $type; - - /** - * @var mixed - */ - public $value; - - /** - * @param integer $tag - * @param integer $type - * @param mixed $value - */ - public function __construct($tag = 0, $type = null, $value = null) - { - $this->tag = $tag; - $this->type = $type; - $this->value = $value; - } -} diff --git a/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php b/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php deleted file mode 100644 index baa2e55..0000000 --- a/vendor/protobuf-php/protobuf/src/UnknownFieldSet.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ -class UnknownFieldSet extends ArrayObject implements Collection -{ - /** - * Adds an element to set. - * - * @param \Protobuf\Unknown $unknown - */ - public function add(Unknown $unknown) - { - $this->offsetSet($unknown->tag, $unknown); - } -} diff --git a/vendor/protobuf-php/protobuf/src/WireFormat.php b/vendor/protobuf-php/protobuf/src/WireFormat.php deleted file mode 100644 index 85116b9..0000000 --- a/vendor/protobuf-php/protobuf/src/WireFormat.php +++ /dev/null @@ -1,122 +0,0 @@ - - * @author Fabio B. Silva - */ -class WireFormat -{ - const WIRE_VARINT = 0; - const WIRE_FIXED64 = 1; - const WIRE_LENGTH = 2; - const WIRE_GROUP_START = 3; - const WIRE_GROUP_END = 4; - const WIRE_FIXED32 = 5; - const WIRE_UNKNOWN = -1; - - const TAG_TYPE_BITS = 3; - const TAG_TYPE_MASK = 0x7; - - /** - * @var array - */ - private static $wireTypeMap = [ - Field::TYPE_INT32 => WireFormat::WIRE_VARINT, - Field::TYPE_INT64 => WireFormat::WIRE_VARINT, - Field::TYPE_UINT32 => WireFormat::WIRE_VARINT, - Field::TYPE_UINT64 => WireFormat::WIRE_VARINT, - Field::TYPE_SINT32 => WireFormat::WIRE_VARINT, - Field::TYPE_SINT64 => WireFormat::WIRE_VARINT, - Field::TYPE_BOOL => WireFormat::WIRE_VARINT, - Field::TYPE_ENUM => WireFormat::WIRE_VARINT, - Field::TYPE_FIXED64 => WireFormat::WIRE_FIXED64, - Field::TYPE_SFIXED64 => WireFormat::WIRE_FIXED64, - Field::TYPE_DOUBLE => WireFormat::WIRE_FIXED64, - Field::TYPE_STRING => WireFormat::WIRE_LENGTH, - Field::TYPE_BYTES => WireFormat::WIRE_LENGTH, - Field::TYPE_MESSAGE => WireFormat::WIRE_LENGTH, - Field::TYPE_FIXED32 => WireFormat::WIRE_FIXED32, - Field::TYPE_SFIXED32 => WireFormat::WIRE_FIXED32, - Field::TYPE_FLOAT => WireFormat::WIRE_FIXED32, - ]; - - /** - * Given a field type, determines the wire type. - * - * @param integer $type - * @param integer $default - * - * @return integer - */ - public static function getWireType($type, $default) - { - // Unknown types just return the reported wire type - return isset(self::$wireTypeMap[$type]) - ? self::$wireTypeMap[$type] - : $default; - } - - /** - * Assert the wire type match - * - * @param integer $wire - * @param integer $type - */ - public static function assertWireType($wire, $type) - { - $expected = WireFormat::getWireType($type, $wire); - - if ($wire !== $expected) { - throw new RuntimeException(sprintf( - "Expected wire type %s but got %s for type %s.", - $expected, - $wire, - $type - )); - } - } - - /** - * Given a tag value, determines the field number (the upper 29 bits). - * - * @param integer $tag - * - * @return integer - */ - public static function getTagFieldNumber($tag) - { - return $tag >> self::TAG_TYPE_BITS; - } - - /** - * Given a tag value, determines the wire type (the lower 3 bits). - * - * @param integer $tag - * - * @return integer - */ - public static function getTagWireType($tag) - { - return $tag & self::TAG_TYPE_MASK; - } - - /** - * Makes a tag value given a field number and wire type - * - * @param integer $tag - * @param integer $wireType - * - * @return integer - */ - public static function getFieldKey($tag, $wireType) - { - return ($tag << self::TAG_TYPE_BITS) | $wireType; - } -} diff --git a/vendor/protobuf-php/protobuf/src/WriteContext.php b/vendor/protobuf-php/protobuf/src/WriteContext.php deleted file mode 100644 index 09e2fe6..0000000 --- a/vendor/protobuf-php/protobuf/src/WriteContext.php +++ /dev/null @@ -1,71 +0,0 @@ - - */ -class WriteContext -{ - /** - * @var \Protobuf\ComputeSizeContext - */ - private $computeSizeContext; - - /** - * @var \Protobuf\Binary\StreamWriter - */ - private $writer; - - /** - * @var \Protobuf\Stream - */ - private $stream; - - /** - * @var integer - */ - private $length; - - /** - * @param \Protobuf\Stream $stream - * @param \Protobuf\Binary\StreamWriter $writer - * @param \Protobuf\ComputeSizeContext $computeSizeContext - */ - public function __construct(Stream $stream, StreamWriter $writer, ComputeSizeContext $computeSizeContext) - { - $this->stream = $stream; - $this->writer = $writer; - $this->computeSizeContext = $computeSizeContext; - } - - /** - * @return \Protobuf\Binary\StreamWriter - */ - public function getWriter() - { - return $this->writer; - } - - /** - * @return \Protobuf\Stream - */ - public function getStream() - { - return $this->stream; - } - - /** - * @return \Protobuf\ComputeSizeContext - */ - public function getComputeSizeContext() - { - return $this->computeSizeContext; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php deleted file mode 100644 index abc942e..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BcNegativeEncoderTest.php +++ /dev/null @@ -1,44 +0,0 @@ -markTestSkipped('The BC MATH extension is not available.'); - } - } - - public function testEncodeVarint() - { - $encoder = new BcNegativeEncoder(); - $actual = $encoder->encodeVarint(-10); - $expected = [ - 246, 255, 255, 255, 255, - 255, 255, 255, 255, 129, - ]; - - $this->assertEquals($expected, $actual); - } - - public function testEncodeSFixed64() - { - $encoder = new BcNegativeEncoder(); - $bytes = $encoder->encodeSFixed64(-123456789123456789); - $expected = [ - 1 => 41195, - 2 => 21295, - 3 => 25780, - 4 => 65097 - ]; - - $this->assertEquals($expected, unpack('v*', $bytes)); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php deleted file mode 100644 index 60f7359..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/Platform/BigEndianTest.php +++ /dev/null @@ -1,18 +0,0 @@ -assertEquals($expected, $actual); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php deleted file mode 100644 index 8b141ff..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/Platform/GmpNegativeEncoderTest.php +++ /dev/null @@ -1,77 +0,0 @@ -markTestSkipped('The GMP extension is not available.'); - } - } - - public function testConstructInitializeGmpValues() - { - $encoder = new GmpNegativeEncoder(); - $gmp_x00 = $this->getPropertyValue($encoder, 'gmp_x00'); - $gmp_x7f = $this->getPropertyValue($encoder, 'gmp_x7f'); - $gmp_x80 = $this->getPropertyValue($encoder, 'gmp_x80'); - $gmp_xff = $this->getPropertyValue($encoder, 'gmp_xff'); - $gmp_x100 = $this->getPropertyValue($encoder, 'gmp_x100'); - $is32Bit = $this->getPropertyValue($encoder, 'is32Bit'); - - $this->assertNotNull($gmp_x00); - $this->assertNotNull($gmp_x7f); - $this->assertNotNull($gmp_x80); - $this->assertNotNull($gmp_xff); - $this->assertNotNull($gmp_x100); - - $this->assertEquals(0, gmp_intval($gmp_x00)); - $this->assertEquals(127, gmp_intval($gmp_x7f)); - $this->assertEquals(128, gmp_intval($gmp_x80)); - $this->assertEquals(255, gmp_intval($gmp_xff)); - $this->assertEquals(256, gmp_intval($gmp_x100)); - $this->assertEquals(BigEndian::is32Bit(), $is32Bit); - } - - public function testEncodeVarint() - { - $encoder = new GmpNegativeEncoder(); - - // make sure runs as 64 bit - $this->setPropertyValue($encoder, 'is32Bit', false); - - $actual = $encoder->encodeVarint(-10); - $expected = [ - 246, 255, 255, 255, 255, - 255, 255, 255, 255, 129, - ]; - - $this->assertEquals($expected, $actual); - } - - public function testEncodeSFixed64() - { - $encoder = new GmpNegativeEncoder(); - - // make sure runs as 64 bit - $this->setPropertyValue($encoder, 'is32Bit', false); - - $bytes = $encoder->encodeSFixed64(-123456789123456789); - $expected = [ - 1 => 41195, - 2 => 21295, - 3 => 25780, - 4 => 65097 - ]; - - $this->assertEquals($expected, unpack('v*', $bytes)); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php deleted file mode 100644 index de38810..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/Platform/InvalidNegativeEncoderTest.php +++ /dev/null @@ -1,31 +0,0 @@ -encodeVarint(-1); - } - - /** - * @expectedException RuntimeException - * @expectedExceptionMessage Negative integers are only supported with GMP or BC (64bit) intextensions. - */ - public function testEncodeEncodeSFixed64Exception() - { - $encoder = new InvalidNegativeEncoder(); - - $encoder->encodeSFixed64(-1); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php b/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php deleted file mode 100644 index d60ec5f..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/Platform/PlatformFactoryTest.php +++ /dev/null @@ -1,63 +0,0 @@ -markTestSkipped('The GMP extension is not available.'); - } - - $factory = $this->getMockBuilder(PlatformFactory::CLASS) - ->setMethods(['isExtensionLoaded']) - ->getMock(); - - $factory->expects($this->once()) - ->method('isExtensionLoaded') - ->with($this->equalTo('gmp')) - ->willReturn(true); - - $this->assertInstanceOf('Protobuf\Binary\Platform\GmpNegativeEncoder', $factory->getNegativeEncoder()); - } - - public function testGetBcNegativeEncoder() - { - if ( ! extension_loaded('bcmath')) { - $this->markTestSkipped('The BC MATH extension is not available.'); - } - - $factory = $this->getMockBuilder(PlatformFactory::CLASS) - ->setMethods(['isExtensionLoaded']) - ->getMock(); - - $factory->expects($this->exactly(2)) - ->method('isExtensionLoaded') - ->will($this->returnValueMap([ - ['gmp', false], - ['bcmath', true] - ])); - - $this->assertInstanceOf('Protobuf\Binary\Platform\BcNegativeEncoder', $factory->getNegativeEncoder()); - } - - public function testGetInvalidNegativeEncoder() - { - $factory = $this->getMockBuilder(PlatformFactory::CLASS) - ->setMethods(['isExtensionLoaded']) - ->getMock(); - - $factory->expects($this->exactly(2)) - ->method('isExtensionLoaded') - ->will($this->returnValueMap([ - ['gmp', false], - ['bcmath', false] - ])); - - $this->assertInstanceOf('Protobuf\Binary\Platform\InvalidNegativeEncoder', $factory->getNegativeEncoder()); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php b/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php deleted file mode 100644 index 375372c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/SizeCalculatorTest.php +++ /dev/null @@ -1,333 +0,0 @@ -writer = new StreamWriter($this->config); - $this->calculator = new SizeCalculator($this->config); - } - - public function varintProvider() - { - return [ - [1], - [-1], - [123456789], - [-123456789], - [123456789123456789], - [-123456789123456789] - ]; - } - - /** - * @dataProvider varintProvider - */ - public function testComputeVarintSize($value) - { - $stream = Stream::create(); - - $this->writer->writeVarint($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeVarintSize($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerZigZag32() - { - return [ - [1], - [-1], - [123456789], - [-123456789] - ]; - } - - /** - * @dataProvider providerZigZag32 - */ - public function testComputeZigZag32Size($value) - { - $stream = Stream::create(); - - $this->writer->writeZigZag32($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeZigzag32Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerZigZag64() - { - return [ - [1], - [-1], - [123456789], - [-123456789] - ]; - } - - /** - * @dataProvider providerZigZag64 - */ - public function testComputeZigZag64Size($value) - { - $stream = Stream::create(); - - $this->writer->writeZigZag64($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeZigzag64Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerSFixed32() - { - return [ - [1], - [-1], - [123456789], - [-123456789] - ]; - } - - /** - * @dataProvider providerSFixed32 - */ - public function testComputeSFixed32Size($value) - { - $stream = Stream::create(); - - $this->writer->writeSFixed32($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeSFixed32Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerFixed32() - { - return [ - [1], - [1000], - [123456789] - ]; - } - - /** - * @dataProvider providerFixed32 - */ - public function testComputeFixed32Size($value) - { - $stream = Stream::create(); - - $this->writer->writeFixed32($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeFixed32Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerSFixed64() - { - return [ - [1], - [-1], - [123456789], - [-123456789], - [123456789123456789], - [-123456789123456789] - ]; - } - - /** - * @dataProvider providerSFixed64 - */ - public function testComputeSFixed64Size($value) - { - $stream = Stream::create(); - - $this->writer->writeSFixed64($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeSFixed64Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerFixed64() - { - return [ - [1], - [123456789], - [123456789123456789] - ]; - } - - /** - * @dataProvider providerFixed64 - */ - public function testComputeFixed64Size($value) - { - $stream = Stream::create(); - - $this->writer->writeFixed64($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeFixed64Size($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerFloat() - { - return [ - [1.1], - [-1.1], - [123456789.2], - [-123456789.2], - [12345.123046875], - [-12345.123046875] - ]; - } - - /** - * @dataProvider providerFloat - */ - public function testComputeFloatSize($value) - { - $stream = Stream::create(); - - $this->writer->writeFloat($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeFloatSize($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerDouble() - { - return [ - [1.1], - [-1.1], - [12345.12345], - [-12345.12345], - [123456789.12345], - [-123456789.12345] - ]; - } - - /** - * @dataProvider providerDouble - */ - public function testComputeDoubleSize($value) - { - $stream = Stream::create(); - - $this->writer->writeDouble($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeDoubleSize($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerBool() - { - return [ - [1], - [0], - [true], - [false] - ]; - } - - /** - * @dataProvider providerBool - */ - public function testComputeBoolSize($value) - { - $stream = Stream::create(); - - $this->writer->writeBool($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeBoolSize($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerString() - { - return [ - ['foo'], - ['http://www.lipsum.com/'], - ['Neque porro quisquam est qui dolorem ipsum quia dolor sit amet'] - ]; - } - - /** - * @dataProvider providerString - */ - public function testComputeStringSize($value) - { - $stream = Stream::create(); - - $this->writer->writeString($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeStringSize($value); - - $this->assertEquals($streamSize, $actualSize); - } - - public function providerByteStream() - { - return [ - [Stream::create('foo')], - [Stream::create('http://www.lipsum.com/')], - [Stream::create('Neque porro quisquam est qui dolorem ipsum quia dolor sit amet')] - ]; - } - - /** - * @dataProvider providerByteStream - */ - public function testComputeByteStreamSize($value) - { - $stream = Stream::create(); - - $this->writer->writeByteStream($stream, $value); - - $streamSize = $stream->getSize(); - $actualSize = $this->calculator->computeByteStreamSize($value); - - $this->assertEquals($streamSize, $actualSize); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php b/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php deleted file mode 100644 index 9b1904c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/StreamReaderTest.php +++ /dev/null @@ -1,97 +0,0 @@ -readVarint($stream); - $tag = WireFormat::getTagFieldNumber($key); - $wire = WireFormat::getTagWireType($key); - - $this->assertEquals($expectedTag, $tag); - $this->assertEquals($expectedWire, $wire); - } - - public function testReadSimpleMessage() - { - $stream = Stream::wrap($this->getProtoContent('simple.bin')); - $reader = new StreamReader($this->config); - - $this->assertNextTagWire($reader, $stream, 1, WireFormat::WIRE_FIXED64); - $this->assertEquals(123456789.12345, $reader->readDouble($stream)); - - $this->assertNextTagWire($reader, $stream, 2, WireFormat::WIRE_FIXED32); - $this->assertEquals(12345.123046875, $reader->readFloat($stream)); - - $this->assertNextTagWire($reader, $stream, 3, WireFormat::WIRE_VARINT); - $this->assertEquals(-123456789123456789, $reader->readVarint($stream)); - - $this->assertNextTagWire($reader, $stream, 4, WireFormat::WIRE_VARINT); - $this->assertEquals(123456789123456789, $reader->readVarint($stream)); - - $this->assertNextTagWire($reader, $stream, 5, WireFormat::WIRE_VARINT); - $this->assertEquals(-123456789, $reader->readVarint($stream)); - - $this->assertNextTagWire($reader, $stream, 6, WireFormat::WIRE_FIXED64); - $this->assertEquals(123456789123456789, $reader->readFixed64($stream)); - - $this->assertNextTagWire($reader, $stream, 7, WireFormat::WIRE_FIXED32); - $this->assertEquals(123456789, $reader->readFixed32($stream)); - - $this->assertNextTagWire($reader, $stream, 8, WireFormat::WIRE_VARINT); - $this->assertEquals(true, $reader->readBool($stream)); - - $this->assertNextTagWire($reader, $stream, 9, WireFormat::WIRE_LENGTH); - $this->assertEquals('foo', $reader->readString($stream)); - - $this->assertNextTagWire($reader, $stream, 12, WireFormat::WIRE_LENGTH); - $this->assertInstanceOf('Protobuf\Stream', ($byteStream = $reader->readByteStream($stream))); - $this->assertEquals('bar', (string) $byteStream); - - $this->assertNextTagWire($reader, $stream, 13, WireFormat::WIRE_VARINT); - $this->assertEquals(123456789, $reader->readVarint($stream)); - - $this->assertNextTagWire($reader, $stream, 15, WireFormat::WIRE_FIXED32); - $this->assertEquals(-123456789, $reader->readSFixed32($stream)); - - $this->assertNextTagWire($reader, $stream, 16, WireFormat::WIRE_FIXED64); - $this->assertEquals(-123456789123456789, $reader->readSFixed64($stream)); - - $this->assertNextTagWire($reader, $stream, 17, WireFormat::WIRE_VARINT); - $this->assertEquals(-123456789, $reader->readZigzag($stream)); - - $this->assertNextTagWire($reader, $stream, 18, WireFormat::WIRE_VARINT); - $this->assertEquals(-123456789123456789, $reader->readZigzag($stream)); - } - - /** - * @expectedException RuntimeException - * @expectedExceptionMessage Groups are deprecated in Protocol Buffers and unsupported. - */ - public function testReadUnknownWireFormatGroupException() - { - $stream = Stream::create($this->getProtoContent('simple.bin')); - $reader = new StreamReader($this->config); - - $reader->readUnknown($stream, WireFormat::WIRE_GROUP_START); - } - - /** - * @expectedException RuntimeException - * @expectedExceptionMessage Unsupported wire type '-1' while reading unknown field. - */ - public function testReadUnknownWireFormatException() - { - $stream = Stream::create($this->getProtoContent('simple.bin')); - $reader = new StreamReader($this->config); - - $reader->readUnknown($stream, -1); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php b/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php deleted file mode 100644 index 63376b8..0000000 --- a/vendor/protobuf-php/protobuf/tests/Binary/StreamWriterTest.php +++ /dev/null @@ -1,80 +0,0 @@ -config); - $binary = $this->getProtoContent('simple.bin'); - - $writer->writeVarint($stream, WireFormat::getFieldKey(1, WireFormat::WIRE_FIXED64)); - $writer->writeDouble($stream, 123456789.12345); - - $writer->writeVarint($stream, WireFormat::getFieldKey(2, WireFormat::WIRE_FIXED32)); - $writer->writeFloat($stream, 12345.123046875); - - $writer->writeVarint($stream, WireFormat::getFieldKey(3, WireFormat::WIRE_VARINT)); - $writer->writeVarint($stream, -123456789123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(4, WireFormat::WIRE_VARINT)); - $writer->writeVarint($stream, 123456789123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(5, WireFormat::WIRE_VARINT)); - $writer->writeVarint($stream, -123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(6, WireFormat::WIRE_FIXED64)); - $writer->writeFixed64($stream, 123456789123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(7, WireFormat::WIRE_FIXED32)); - $writer->writeFixed32($stream, 123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(8, WireFormat::WIRE_VARINT)); - $writer->writeVarint($stream, 1); - - $writer->writeVarint($stream, WireFormat::getFieldKey(9, WireFormat::WIRE_LENGTH)); - $writer->writeString($stream, 'foo'); - - $writer->writeVarint($stream, WireFormat::getFieldKey(12, WireFormat::WIRE_LENGTH)); - $writer->writeByteStream($stream, Stream::wrap('bar')); - - $writer->writeVarint($stream, WireFormat::getFieldKey(13, WireFormat::WIRE_VARINT)); - $writer->writeVarint($stream, 123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(15, WireFormat::WIRE_FIXED32)); - $writer->writeSFixed32($stream, -123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(16, WireFormat::WIRE_FIXED64)); - $writer->writeSFixed64($stream, -123456789123456789); - - $writer->writeVarint($stream, WireFormat::getFieldKey(17, WireFormat::WIRE_VARINT)); - $writer->writeZigzag($stream, -123456789, 32); - - $writer->writeVarint($stream, WireFormat::getFieldKey(18, WireFormat::WIRE_VARINT)); - $writer->writeZigzag($stream, -123456789123456789, 64); - - $this->assertEquals($binary, (string)$stream); - } - - public function testWriteStream() - { - $source = Stream::create(); - $target = Stream::create(); - $writer = new StreamWriter($this->config); - - $writer->writeVarint($source, WireFormat::getFieldKey(1, WireFormat::WIRE_FIXED64)); - $writer->writeDouble($source, 123456789.12345); - - $source->seek(0); - $writer->writeStream($target, $source); - - $this->assertEquals((string) $source, (string) $target); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php b/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php deleted file mode 100644 index d6be507..0000000 --- a/vendor/protobuf-php/protobuf/tests/ConfigurationTest.php +++ /dev/null @@ -1,43 +0,0 @@ -configuration = new Configuration(); - } - - public function testGetAndSetPlatformFactory() - { - $mock = $this->getMock('Protobuf\Binary\Platform\PlatformFactory'); - $factory = $this->configuration->getPlatformFactory(); - - $this->assertInstanceOf('Protobuf\Binary\Platform\PlatformFactory', $factory); - - $this->configuration->setPlatformFactory($mock); - - $this->assertSame($mock, $this->configuration->getPlatformFactory()); - } - - public function testGetAndSetExtensionRegistry() - { - $mock = $this->getMock('Protobuf\Extension\ExtensionRegistry'); - $registry = $this->configuration->getExtensionRegistry(); - - $this->assertInstanceOf('Protobuf\Extension\ExtensionRegistry', $registry); - $this->assertSame($registry, $this->configuration->getExtensionRegistry()); - - $this->configuration->setExtensionRegistry($mock); - - $this->assertSame($mock, $this->configuration->getExtensionRegistry()); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php b/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php deleted file mode 100644 index b63bb47..0000000 --- a/vendor/protobuf-php/protobuf/tests/EnumCollectionTest.php +++ /dev/null @@ -1,63 +0,0 @@ -collection = new EnumCollection(); - } - - public function testCreateEnumCollection() - { - $enum1 = $this->getMock('Protobuf\Enum', [], ['E1', 1]); - $enum2 = $this->getMock('Protobuf\Enum', [], ['E2', 2]); - - $collection = new EnumCollection([$enum1, $enum2]); - - $this->assertCount(2, $collection); - $this->assertEquals([$enum1, $enum2], $collection->getArrayCopy()); - } - - public function testAddEnum() - { - $this->assertCount(0, $this->collection); - - $enum1 = $this->getMock('Protobuf\Enum', [], ['E1', 1]); - $enum2 = $this->getMock('Protobuf\Enum', [], ['E2', 2]); - - $this->collection[] = $enum1; - - $this->collection->add($enum2); - - $this->assertCount(2, $this->collection); - $this->assertEquals([$enum1, $enum2], $this->collection->getArrayCopy()); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\EnumCollection::offsetSet must be a \Protobuf\Enum, stdClass given - */ - public function testInvalidArgumentExceptionOffsetSetObject() - { - $this->collection[] = new \stdClass(); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\EnumCollection::offsetSet must be a \Protobuf\Enum, integer given - */ - public function testInvalidArgumentExceptionOffsetSetInteger() - { - $this->collection[] = 123; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/EnumTest.php b/vendor/protobuf-php/protobuf/tests/EnumTest.php deleted file mode 100644 index 11c1d85..0000000 --- a/vendor/protobuf-php/protobuf/tests/EnumTest.php +++ /dev/null @@ -1,20 +0,0 @@ -getMockBuilder(Enum::CLASS) - ->setConstructorArgs(['FOO', 1]) - ->setMethods(['FOO']) - ->getMock(); - - $this->assertEquals(1, $mock->value()); - $this->assertEquals('FOO', $mock->name()); - $this->assertEquals('FOO', $mock->__toString()); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php deleted file mode 100644 index 6c6c835..0000000 --- a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionFieldMapTest.php +++ /dev/null @@ -1,62 +0,0 @@ -assertCount(0, $extensions); - - $extensions->put($extension, $animal); - - $this->assertCount(1, $extensions); - $this->assertTrue($extensions->contains($extension)); - $this->assertSame($animal, $extensions->offsetGet($extension)); - } - - public function testAddMergeExtensions() - { - $animal1 = new Cat(); - $animal2 = new Cat(); - $callback = function () {}; - $extensions = new ExtensionFieldMap(Animal::CLASS); - $extension = new ExtensionField(Animal::CLASS, 'animal', 100, $callback, $callback, $callback); - - $animal1->setDeclawed(true); - - $extensions->add($extension, $animal1); - $this->assertSame($animal1, $extensions->offsetGet($extension)); - - $animal2->setDeclawed(false); - - $extensions->add($extension, $animal2); - $this->assertTrue($animal2->getDeclawed()); - $this->assertSame($animal2, $extensions->offsetGet($extension)); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Invalid extendee, ProtobufTest\Protos\Extension\Animal is expected but ProtobufTest\Protos\Extension\Cat given - */ - public function testInvalidArgumentExceptionExtendee() - { - $animal = new Cat(); - $extensions = new ExtensionFieldMap(Animal::CLASS); - $extension = new ExtensionField(Cat::CLASS, 'animal', 200, function () {}, function () {}, function () {}); - - $extensions->put($extension, $animal); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php b/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php deleted file mode 100644 index 543e149..0000000 --- a/vendor/protobuf-php/protobuf/tests/Extension/ExtensionRegistryTest.php +++ /dev/null @@ -1,28 +0,0 @@ -assertNull($registry->findByNumber(Animal::CLASS, 100)); - - $registry->add($extension); - - $this->assertSame($extension, $registry->findByNumber(Animal::CLASS, 100)); - - $registry->clear(); - - $this->assertNull($registry->findByNumber(Animal::CLASS, 100)); - } -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/FieldTest.php b/vendor/protobuf-php/protobuf/tests/FieldTest.php deleted file mode 100644 index 9d88ab2..0000000 --- a/vendor/protobuf-php/protobuf/tests/FieldTest.php +++ /dev/null @@ -1,93 +0,0 @@ -assertEquals($expected, Field::getPhpType($type)); - } - - public function labelNameProvider() - { - return [ - [-1, null], - [Field::LABEL_OPTIONAL, 'optional'], - [Field::LABEL_REQUIRED, 'required'], - [Field::LABEL_REPEATED, 'repeated'] - ]; - } - - /** - * @dataProvider labelNameProvider - */ - public function testGetLabelName($type, $expected) - { - $this->assertEquals($expected, Field::getLabelName($type)); - } - - public function typeNameProvider() - { - return [ - [-1, null], - [Field::TYPE_DOUBLE, 'double'], - [Field::TYPE_FLOAT, 'float'], - [Field::TYPE_INT64, 'int64'], - [Field::TYPE_UINT64, 'uint64'], - [Field::TYPE_INT32, 'int32'], - [Field::TYPE_FIXED64, 'fixed64'], - [Field::TYPE_FIXED32, 'fixed32'], - [Field::TYPE_BOOL, 'bool'], - [Field::TYPE_STRING, 'string'], - [Field::TYPE_MESSAGE, 'message'], - [Field::TYPE_BYTES, 'bytes'], - [Field::TYPE_UINT32, 'uint32'], - [Field::TYPE_ENUM, 'enum'], - [Field::TYPE_SFIXED32, 'sfixed32'], - [Field::TYPE_SFIXED64, 'sfixed64'], - [Field::TYPE_SINT32, 'sint32'], - [Field::TYPE_SINT64, 'sint64'], - ]; - } - - /** - * @dataProvider typeNameProvider - */ - public function testGetTypeName($type, $expected) - { - $this->assertEquals($expected, Field::getTypeName($type)); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php b/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php deleted file mode 100644 index f414d1d..0000000 --- a/vendor/protobuf-php/protobuf/tests/MessageCollectionTest.php +++ /dev/null @@ -1,63 +0,0 @@ -collection = new MessageCollection(); - } - - public function testCreateMessageCollection() - { - $messge1 = $this->getMock(Message::CLASS); - $messge2 = $this->getMock(Message::CLASS); - - $collection = new MessageCollection([$messge1, $messge2]); - - $this->assertCount(2, $collection); - $this->assertEquals([$messge1, $messge2], $collection->getArrayCopy()); - } - - public function testAddMessage() - { - $this->assertCount(0, $this->collection); - - $messge1 = $this->getMock(Message::CLASS); - $messge2 = $this->getMock(Message::CLASS); - - $this->collection[] = $messge1; - - $this->collection->add($messge2); - - $this->assertCount(2, $this->collection); - $this->assertEquals([$messge1, $messge2], $this->collection->getArrayCopy()); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\MessageCollection::offsetSet must implement interface \Protobuf\Message, stdClass given - */ - public function testInvalidArgumentExceptionOffsetSetObject() - { - $this->collection[] = new \stdClass(); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\MessageCollection::offsetSet must implement interface \Protobuf\Message, integer given - */ - public function testInvalidArgumentExceptionOffsetSetInteger() - { - $this->collection[] = 123; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php b/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php deleted file mode 100644 index 111c923..0000000 --- a/vendor/protobuf-php/protobuf/tests/MessageSerializerTest.php +++ /dev/null @@ -1,115 +0,0 @@ -getMock(Message::CLASS); - $config = new Configuration(); - $serializer = new MessageSerializer($config); - $stream = Stream::create(); - - $message->expects($this->once()) - ->method('toStream') - ->willReturn($stream) - ->with($this->equalTo($config)); - - $this->assertInstanceOf('Protobuf\Serializer', $serializer); - $this->assertSame($stream, $serializer->serialize($message)); - } - - public function testUnserializeMessage() - { - $class = FooStub_MessageSerializerTest::CLASS; - $config = new Configuration(); - $serializer = new MessageSerializer($config); - $stream = Stream::create(); - - FooStub_MessageSerializerTest::$calls = []; - - $this->assertInstanceOf($class, $serializer->unserialize($class, $stream)); - - $this->assertCount(1, FooStub_MessageSerializerTest::$calls); - $this->assertSame($stream, FooStub_MessageSerializerTest::$calls[0][0]); - $this->assertSame($config, FooStub_MessageSerializerTest::$calls[0][1]); - } - - public function testGetConfiguration() - { - $config1 = new Configuration(); - $config2 = Configuration::getInstance(); - - $serializer1 = new MessageSerializer($config1); - $serializer2 = new MessageSerializer(); - - $this->assertSame($config1, $serializer1->getConfiguration()); - $this->assertSame($config2, $serializer2->getConfiguration()); - } -} - -class FooStub_MessageSerializerTest extends \Protobuf\AbstractMessage -{ - public static $calls = []; - - /** - * {@inheritdoc} - */ - public function __construct($stream = null, \Protobuf\Configuration $configuration = null) - { - self::$calls[] = func_get_args(); - } - - public static function fromStream($stream, \Protobuf\Configuration $configuration = null) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function extensions() - { - throw new \BadMethodCallException(__METHOD__); - } - - public function unknownFieldSet() - { - throw new \BadMethodCallException(__METHOD__); - } - - public function toStream(\Protobuf\Configuration $configuration = null) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function writeTo(\Protobuf\WriteContext $context) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function readFrom(\Protobuf\ReadContext $context) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function serializedSize(\Protobuf\ComputeSizeContext $context) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function merge(\Protobuf\Message $message) - { - throw new \BadMethodCallException(__METHOD__); - } - - public function clear() - { - throw new \BadMethodCallException(__METHOD__); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php b/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php deleted file mode 100644 index 39388e1..0000000 --- a/vendor/protobuf-php/protobuf/tests/ProtocSerializeMessageTest.php +++ /dev/null @@ -1,235 +0,0 @@ -tell(); - $escaped = '"' . $value . '"'; - - $value->seek($tell); - } - - $message->$setter($value); - - $encoded = $message->toStream(); - $expected = $this->executeProtoc("$field: $escaped", $class, $proto); - - $this->assertEquals(bin2hex($expected), bin2hex($encoded), "Encoding $field with value $value"); - } - - /** - * @dataProvider simpleMessageProvider - */ - public function testDecodeSimpleMessageComparingTypesWithProtoc($field, $value) - { - $escaped = $value; - $proto = 'simple'; - $getter = 'get' . ucfirst($field); - $class = 'ProtobufTest.Protos.Simple'; - - if (is_string($value)) { - $escaped = '"' . $value . '"'; - } - - if ($value instanceof \Protobuf\Stream) { - $tell = $value->tell(); - $escaped = '"' . $value . '"'; - - $value->seek($tell); - } - - $binary = $this->executeProtoc("$field: $escaped", $class, $proto); - $message = Simple::fromStream(Stream::wrap($binary)); - $result = $message->$getter(); - - // Hack the comparison for float precision - if (is_float($value)) { - $precision = strlen($value) - strpos($value, '.'); - $result = round($result, $precision); - } - - if ($result instanceof \Protobuf\Stream) { - $result = (string) $result; - } - - $this->assertEquals($value, $result, "Decoding $field with value $value"); - } - - public function testEncodeAndDecodeEnumComparingWithProtoc() - { - $proto = 'complex'; - $complex = new Complex(); - $value = Complex\Enum::FOO(); - $class = 'ProtobufTest.Protos.Complex'; - - $complex->setEnum($value); - - $encoded = $complex->toStream(); - $expected = $this->executeProtoc("enum: FOO", $class, $proto); - $decoded = Complex::fromStream(Stream::wrap($expected)); - - $this->assertInstanceOf(Complex::CLASS, $decoded); - $this->assertEquals(bin2hex($expected), bin2hex($encoded)); - $this->assertEquals(Complex\Enum::FOO(), $decoded->getEnum()); - } - - public function testEncodeAndDecodeNestedMessageComparingWithProtoc() - { - $proto = 'complex'; - $complex = new Complex(); - $nested = new Complex\Nested(); - $input = 'nested { foo: "FOO" }'; - $class = 'ProtobufTest.Protos.Complex'; - - $nested->setFoo('FOO'); - $complex->setNested($nested); - - $encoded = $complex->toStream(); - $expected = $this->executeProtoc($input, $class, $proto); - $decoded = Complex::fromStream(Stream::wrap($expected)); - - $this->assertInstanceOf(Complex::CLASS, $decoded); - $this->assertInstanceOf(Complex\Nested::CLASS, $complex->getNested()); - $this->assertEquals(bin2hex($encoded), bin2hex($expected)); - $this->assertEquals($complex->getNested()->getFoo(), 'FOO'); - } - - protected function executeProtoc($input, $class, $proto) - { - $path = __DIR__ . '/Resources'; - $command = "echo '$input' | protoc --encode=$class -I$path $path/$proto.proto"; - $output = null; - $exitCode = null; - - exec($command, $output, $exitCode); - - if ($exitCode !== 0) { - $this->fail("Fail to run protoc : [$command]"); - } - - return implode(PHP_EOL, $output); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/Protos/.gitignore b/vendor/protobuf-php/protobuf/tests/Protos/.gitignore deleted file mode 100644 index c96a04f..0000000 --- a/vendor/protobuf-php/protobuf/tests/Protos/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin b/vendor/protobuf-php/protobuf/tests/Resources/addressbook.bin deleted file mode 100644 index d193042b4000819d528e48bacde38ab35866e2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmd;b;^Oei&&X47$xjt%7LXFk0&?_H@>3nsa}zUj^pf*)mH4>042_Jz$k0fDQHh_6 z+tkz)$Tue|tQIwH^fdK##T>+&4 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/extension.bin b/vendor/protobuf-php/protobuf/tests/Resources/extension.bin deleted file mode 100644 index f87f7ec..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/extension.bin +++ /dev/null @@ -1,2 +0,0 @@ - -FIRSTSECOND \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/extension.proto b/vendor/protobuf-php/protobuf/tests/Resources/extension.proto deleted file mode 100644 index d80c71d..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/extension.proto +++ /dev/null @@ -1,93 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos.Extension; - -option java_multiple_files = true; - -// Animal - -message Animal -{ - extensions 100 to max; - - enum Type - { - CAT = 1; - DOG = 2; - } - - required Type type = 1; -} - -extend Animal -{ - optional string habitat = 200; -} - -message Cat -{ - extend Animal - { - optional Cat animal = 100; - } - - optional bool declawed = 1; -} - -message Dog -{ - extend Animal - { - optional Dog animal = 102; - } - - optional uint32 bones_buried = 2; -} - -// command - -message Command -{ - extensions 100 to max; - - enum CommandType - { - VERSION = 1; - LOGIN = 2; - } - - required CommandType type = 1; -} - -extend Command -{ - optional bool verbose = 200 [default = false]; -} - -message VersionCommand -{ - extend Command - { - optional VersionCommand cmd = 100; - } - - enum Protocol - { - V1 = 1; - V2 = 2; - } - - required Protocol protocol = 1; - required fixed32 version = 2; -} - -message LoginCommand -{ - extend Command - { - optional LoginCommand cmd = 101; - } - - required string username = 1; - required string password = 2; -} \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin b/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin deleted file mode 100644 index f6c1d02..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/php_options.bin +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto b/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto deleted file mode 100644 index 9a3cee0..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/php_options.proto +++ /dev/null @@ -1,30 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos; - -import "php.proto"; - -option (php.package) = "ProtobufTest.Protos.Options"; - -message ParentMessage -{ - enum InnerEnum - { - VALUE1 = 1; - VALUE2 = 2; - } - - message InnerMessage - { - enum InnerMessageEnum - { - VALUE1 = 1; - VALUE2 = 2; - } - - required InnerMessageEnum enum = 1; - } - - required InnerEnum enum = 1; - repeated InnerMessage inner = 2; -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin deleted file mode 100644 index 2d030b4..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-bytes.bin +++ /dev/null @@ -1 +0,0 @@ -*bin1*bin2*bin3 \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-enum.bin deleted file mode 100644 index b53e8644fb056f218aaad17ac253142294936594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmXqDFkl1#0VM!p diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin deleted file mode 100644 index ee2ac36..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.bin +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt deleted file mode 100644 index a4500b9..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-int32.txt +++ /dev/null @@ -1,3 +0,0 @@ -int: 1 -int: 2 -int: 3 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin deleted file mode 100644 index db41276..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.bin +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt deleted file mode 100644 index ba35edf..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-nested.txt +++ /dev/null @@ -1,9 +0,0 @@ -nested { - id: 1 -} -nested { - id: 2 -} -nested { - id: 3 -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed-enum.bin deleted file mode 100644 index 5ba7f8509a1596b5ffd4e19d2c75a006fc9752bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmcCwVqgRS0P_Go diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin deleted file mode 100644 index e6314fc..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-packed.bin +++ /dev/null @@ -1 +0,0 @@ -" \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin deleted file mode 100644 index c6acd32..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.bin +++ /dev/null @@ -1,4 +0,0 @@ - -one -two -three \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt b/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt deleted file mode 100644 index 4e20498..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated-string.txt +++ /dev/null @@ -1,3 +0,0 @@ -string: "one" -string: "two" -string: "three" diff --git a/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto b/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto deleted file mode 100644 index 38eba92..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/repeated.proto +++ /dev/null @@ -1,23 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos; - -message Repeated { - - message Nested { - optional int32 id = 1; - } - - enum Enum { - FOO = 0; - BAR = 1; - } - - repeated string string = 1; - repeated int32 int = 2; - repeated Nested nested = 3; - repeated int32 packed = 4 [packed=true]; - repeated bytes bytes = 5; - repeated Enum enum = 6; - repeated Enum packed_enum = 7 [packed=true]; -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/service.proto b/vendor/protobuf-php/protobuf/tests/Resources/service.proto deleted file mode 100644 index 30296af..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/service.proto +++ /dev/null @@ -1,24 +0,0 @@ -package ProtobufTest.Protos.Service; - -// option java_package = "ProtobufTest.Protos.Service"; -// option java_outer_classname = "ServicePB"; - -message SearchRequest { - required string query = 1; - optional int32 page_number = 2; - optional int32 result_per_page = 3 [default = 10]; -} - -message SearchResponse { - repeated Result result = 1; -} - -message Result { - required string url = 1; - optional string title = 2; - repeated string snippets = 3; -} - -service SearchService { - rpc search (SearchRequest) returns (SearchResponse); -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.bin b/vendor/protobuf-php/protobuf/tests/Resources/simple.bin deleted file mode 100644 index eff524c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/simple.bin +++ /dev/null @@ -1 +0,0 @@ - i~T4oA~@FŖ٤ (1_ЬK=[@Jfoobbarh:}2/SdIuͶ \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.proto b/vendor/protobuf-php/protobuf/tests/Resources/simple.proto deleted file mode 100644 index 841081b..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/simple.proto +++ /dev/null @@ -1,21 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos; - -message Simple { - optional double double = 1; - optional float float = 2; - optional int64 int64 = 3; - optional uint64 uint64 = 4; - optional int32 int32 = 5; - optional fixed64 fixed64 = 6; - optional fixed32 fixed32 = 7; - optional bool bool = 8; - optional string string = 9; - optional bytes bytes = 12; - optional uint32 uint32 = 13; - optional sfixed32 sfixed32 = 15; - optional sfixed64 sfixed64 = 16; - optional sint32 sint32 = 17; - optional sint64 sint64 = 18; -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/simple.txt b/vendor/protobuf-php/protobuf/tests/Resources/simple.txt deleted file mode 100644 index 26799bb..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/simple.txt +++ /dev/null @@ -1,15 +0,0 @@ -double: 123456789.12345 -float: 12345.123 -int64: -123456789123456789 -uint64: 123456789123456789 -int32: -123456789 -fixed64: 123456789123456789 -fixed32: 123456789 -bool: 1 -string: "foo" -bytes: "bar" -uint32: 123456789 -sfixed32: -123456789 -sfixed64: -123456789123456789 -sint32: -123456789 -sint64: -123456789123456789 diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.bin b/vendor/protobuf-php/protobuf/tests/Resources/tree.bin deleted file mode 100644 index f144043..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/tree.bin +++ /dev/null @@ -1,6 +0,0 @@ - -/Users - /Users/fabio -/Users - /Users/admin -/Users \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.proto b/vendor/protobuf-php/protobuf/tests/Resources/tree.proto deleted file mode 100644 index 69f1069..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/tree.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos.Tree; - -message Node { - required string path = 1; - repeated Node children = 2; - optional Node parent = 3; -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/tree.txt b/vendor/protobuf-php/protobuf/tests/Resources/tree.txt deleted file mode 100644 index fb3a82c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/tree.txt +++ /dev/null @@ -1,13 +0,0 @@ -path: "\/Users" -children { - path: "\/Users\/fabio" - parent { - path: "\/Users" - } -} -children { - path: "\/Users\/admin" - parent { - path: "\/Users" - } -} diff --git a/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin b/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin deleted file mode 100644 index eff524c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/unknown.bin +++ /dev/null @@ -1 +0,0 @@ - i~T4oA~@FŖ٤ (1_ЬK=[@Jfoobbarh:}2/SdIuͶ \ No newline at end of file diff --git a/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto b/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto deleted file mode 100644 index 833ff8c..0000000 --- a/vendor/protobuf-php/protobuf/tests/Resources/unknown.proto +++ /dev/null @@ -1,7 +0,0 @@ -syntax = "proto2"; - -package ProtobufTest.Protos; - -message Unrecognized { - -} diff --git a/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php b/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php deleted file mode 100644 index 77bbaff..0000000 --- a/vendor/protobuf-php/protobuf/tests/ScalarCollectionTest.php +++ /dev/null @@ -1,65 +0,0 @@ -collection = new ScalarCollection(); - } - - public function testCreateScalarCollection() - { - $collection = new ScalarCollection([1,2]); - - $this->assertCount(2, $collection); - $this->assertEquals([1, 2], $collection->getArrayCopy()); - } - - public function testAddValue() - { - $this->assertCount(0, $this->collection); - - $this->collection[] = 1; - - $this->collection->add(2); - - $this->assertCount(2, $this->collection); - $this->assertEquals([1, 2], $this->collection->getArrayCopy()); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 1 passed to Protobuf\ScalarCollection::add must be a scalar value, stdClass given - */ - public function testInvalidArgumentExceptionAddObject() - { - $this->collection->add(new \stdClass()); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\ScalarCollection::offsetSet must be a scalar value, stdClass given - */ - public function testInvalidArgumentExceptionOffsetSetObject() - { - $this->collection[] = new \stdClass(); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\ScalarCollection::offsetSet must be a scalar value, array given - */ - public function testInvalidArgumentExceptionOffsetSetInteger() - { - $this->collection[] = []; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php b/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php deleted file mode 100644 index 410e527..0000000 --- a/vendor/protobuf-php/protobuf/tests/SerializeMessageTest.php +++ /dev/null @@ -1,612 +0,0 @@ -config->createComputeSizeContext(); - $expectedSize = mb_strlen($expectedContent, '8bit'); - $actualSize = $message->serializedSize($context); - - $this->assertEquals($expectedSize, $actualSize); - } - - public function testWriteSimpleMessage() - { - $simple = new Simple(); - - $simple->setBool(true); - $simple->setBytes("bar"); - $simple->setString("foo"); - $simple->setFloat(12345.123); - $simple->setUint32(123456789); - $simple->setInt32(-123456789); - $simple->setFixed32(123456789); - $simple->setSint32(-123456789); - $simple->setSfixed32(-123456789); - $simple->setDouble(123456789.12345); - $simple->setInt64(-123456789123456789); - $simple->setUint64(123456789123456789); - $simple->setFixed64(123456789123456789); - $simple->setSint64(-123456789123456789); - $simple->setSfixed64(-123456789123456789); - - $expected = $this->getProtoContent('simple.bin'); - $actual = $simple->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $simple); - } - - public function testWriteSimpleMessageTwice() - { - $simple = new Simple(); - - $simple->setBool(true); - $simple->setBytes("bar"); - $simple->setString("foo"); - $simple->setFloat(12345.123); - $simple->setUint32(123456789); - $simple->setInt32(-123456789); - $simple->setFixed32(123456789); - $simple->setSint32(-123456789); - $simple->setSfixed32(-123456789); - $simple->setDouble(123456789.12345); - $simple->setInt64(-123456789123456789); - $simple->setUint64(123456789123456789); - $simple->setFixed64(123456789123456789); - $simple->setSint64(-123456789123456789); - $simple->setSfixed64(-123456789123456789); - - $expected = $this->getProtoContent('simple.bin'); - $actual1 = $simple->toStream(); - $actual2 = $simple->toStream(); - - $this->assertEquals($expected, (string) $actual1); - $this->assertEquals($expected, (string) $actual2); - } - - public function testWriteRepeatedString() - { - $repeated = new Repeated(); - - $repeated->addString('one'); - $repeated->addString('two'); - $repeated->addString('three'); - - $expected = $this->getProtoContent('repeated-string.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedInt32() - { - $repeated = new Repeated(); - - $repeated->addInt(1); - $repeated->addInt(2); - $repeated->addInt(3); - - $expected = $this->getProtoContent('repeated-int32.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedNested() - { - $repeated = new Repeated(); - $nested1 = new Repeated\Nested(); - $nested2 = new Repeated\Nested(); - $nested3 = new Repeated\Nested(); - - $nested1->setId(1); - $nested2->setId(2); - $nested3->setId(3); - - $repeated->addNested($nested1); - $repeated->addNested($nested2); - $repeated->addNested($nested3); - - $expected = $this->getProtoContent('repeated-nested.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedPacked() - { - $repeated = new Repeated(); - - $repeated->addPacked(1); - $repeated->addPacked(2); - $repeated->addPacked(3); - - $expected = $this->getProtoContent('repeated-packed.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedBytes() - { - $repeated = new Repeated(); - - $repeated->addBytes('bin1'); - $repeated->addBytes('bin2'); - $repeated->addBytes('bin3'); - - $expected = $this->getProtoContent('repeated-bytes.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedEnum() - { - $repeated = new Repeated(); - - $repeated->addEnum(Repeated\Enum::FOO()); - $repeated->addEnum(Repeated\Enum::BAR()); - - $expected = $this->getProtoContent('repeated-enum.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteRepeatedPackedEnum() - { - $repeated = new Repeated(); - - $repeated->addPackedEnum(Repeated\Enum::FOO()); - $repeated->addPackedEnum(Repeated\Enum::BAR()); - - $expected = $this->getProtoContent('repeated-packed-enum.bin'); - $actual = $repeated->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $repeated); - } - - public function testWriteComplexMessage() - { - $phone1 = new PhoneNumber(); - $phone2 = new PhoneNumber(); - $phone3 = new PhoneNumber(); - $book = new AddressBook(); - $person1 = new Person(); - $person2 = new Person(); - - $person1->setId(2051); - $person1->setName('John Doe'); - $person1->setEmail('john.doe@gmail.com'); - - $person2->setId(23); - $person2->setName('Iván Montes'); - $person2->setEmail('drslump@pollinimini.net'); - - $book->addPerson($person1); - $book->addPerson($person2); - - $person1->addPhone($phone1); - $person1->addPhone($phone2); - - $phone1->setNumber('1231231212'); - $phone1->setType(PhoneType::HOME()); - - $phone2->setNumber('55512321312'); - $phone2->setType(PhoneType::MOBILE()); - - $phone3->setNumber('3493123123'); - $phone3->setType(PhoneType::WORK()); - - $person2->addPhone($phone3); - - $expected = $this->getProtoContent('addressbook.bin'); - $actual = $book->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $book); - } - - public function testWritePhpOptionsMessage() - { - $parentMessage = new ParentMessage(); - $innerMessage1 = new ParentMessage\InnerMessage(); - $innerMessage2 = new ParentMessage\InnerMessage(); - - $innerMessage1->setEnum(ParentMessage\InnerMessage\InnerMessageEnum::VALUE1()); - $innerMessage2->setEnum(ParentMessage\InnerMessage\InnerMessageEnum::VALUE2()); - - $parentMessage->addInner($innerMessage1); - $parentMessage->addInner($innerMessage2); - $parentMessage->setEnum(ParentMessage\InnerEnum::VALUE1()); - - $expected = $this->getProtoContent('php_options.bin'); - $actual = $parentMessage->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $parentMessage); - } - - public function testWriteTreeMessage() - { - $root = new Tree\Node(); - $admin = new Tree\Node(); - $fabio = new Tree\Node(); - - $root->setPath('/Users'); - $fabio->setPath('/Users/fabio'); - $admin->setPath('/Users/admin'); - - // avoid recursion - $parent = clone $root; - - $admin->setParent($parent); - $fabio->setParent($parent); - - $root->addChildren($fabio); - $root->addChildren($admin); - - $expected = $this->getProtoContent('tree.bin'); - $actual = $root->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $root); - } - - public function testWriteAnimalExtensionMessage() - { - $cat = new Extension\Cat(); - $animal = new Extension\Animal(); - - $cat->setDeclawed(true); - - $animal->setType(Extension\Animal\Type::CAT()); - $animal->extensions()->put(Extension\Cat::animal(), $cat); - - $expected = $this->getProtoContent('extension-animal-cat.bin'); - $actual = $animal->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $animal); - } - - public function testWriteCommandExtensionMessage() - { - $version = new Extension\VersionCommand(); - $command = new Extension\Command(); - - $version->setVersion(1); - $version->setProtocol(Extension\VersionCommand\Protocol::V1()); - - $command->setType(Extension\Command\CommandType::VERSION()); - $command->extensions()->put(Extension\Extension::verbose(), true); - $command->extensions()->put(Extension\VersionCommand::cmd(), $version); - - $expected = $this->getProtoContent('extension-command-version.bin'); - $actual = $command->toStream(); - - $this->assertEquals($expected, (string) $actual); - $this->assertSerializedMessageSize($expected, $command); - } - - public function testReadSimpleMessage() - { - $binary = $this->getProtoContent('simple.bin'); - $simple = Simple::fromStream($binary); - - $this->assertInstanceOf(Simple::CLASS, $simple); - $this->assertInstanceOf(Stream::CLASS, $simple->getBytes()); - - $this->assertInternalType('bool', $simple->getBool()); - $this->assertInternalType('string', $simple->getString()); - $this->assertInternalType('float', $simple->getFloat(), '', 0.0001); - $this->assertInternalType('integer', $simple->getUint32()); - $this->assertInternalType('integer', $simple->getInt32()); - $this->assertInternalType('integer', $simple->getFixed32()); - $this->assertInternalType('integer', $simple->getSint32()); - $this->assertInternalType('integer', $simple->getSfixed32()); - $this->assertInternalType('float', $simple->getDouble()); - $this->assertInternalType('integer', $simple->getInt64()); - $this->assertInternalType('integer', $simple->getUint64()); - $this->assertInternalType('integer', $simple->getFixed64()); - $this->assertInternalType('integer', $simple->getSint64()); - $this->assertInternalType('integer', $simple->getSfixed64()); - - $this->assertEquals(true, $simple->getBool()); - $this->assertEquals("bar", $simple->getBytes()); - $this->assertEquals("foo", $simple->getString()); - $this->assertEquals(12345.123, $simple->getFloat(), '', 0.0001); - $this->assertEquals(123456789, $simple->getUint32()); - $this->assertEquals(-123456789, $simple->getInt32()); - $this->assertEquals(123456789, $simple->getFixed32()); - $this->assertEquals(-123456789, $simple->getSint32()); - $this->assertEquals(-123456789, $simple->getSfixed32()); - $this->assertEquals(123456789.12345, $simple->getDouble()); - $this->assertEquals(-123456789123456789, $simple->getInt64()); - $this->assertEquals(123456789123456789, $simple->getUint64()); - $this->assertEquals(123456789123456789, $simple->getFixed64()); - $this->assertEquals(-123456789123456789, $simple->getSint64()); - $this->assertEquals(-123456789123456789, $simple->getSfixed64()); - } - - public function testReadRepeatedString() - { - $binary = $this->getProtoContent('repeated-string.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getStringList()); - $this->assertEquals(['one', 'two', 'three'], $repeated->getStringList()->getArrayCopy()); - } - - public function testReadRepeatedInt32() - { - $binary = $this->getProtoContent('repeated-int32.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getIntList()); - $this->assertEquals([1, 2, 3], $repeated->getIntList()->getArrayCopy()); - } - - public function testReadRepeatedNested() - { - $binary = $this->getProtoContent('repeated-nested.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getNestedList()); - $this->assertCount(3, $repeated->getNestedList()); - - $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[0]); - $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[1]); - $this->assertInstanceOf(Repeated\Nested::CLASS, $repeated->getNestedList()[2]); - - $this->assertEquals(1, $repeated->getNestedList()[0]->getId()); - $this->assertEquals(2, $repeated->getNestedList()[1]->getId()); - $this->assertEquals(3, $repeated->getNestedList()[2]->getId()); - } - - public function testReadRepeatedPacked() - { - $binary = $this->getProtoContent('repeated-packed.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getPackedList()); - $this->assertEquals([1, 2, 3], $repeated->getPackedList()->getArrayCopy()); - } - - public function testReadRepeatedPackedEnum() - { - $enumVal = [Repeated\Enum::FOO(), Repeated\Enum::BAR()]; - $binary = $this->getProtoContent('repeated-packed-enum.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getPackedEnumList()); - $this->assertEquals($enumVal, $repeated->getPackedEnumList()->getArrayCopy()); - } - - public function testReadRepeatedBytes() - { - $binary = $this->getProtoContent('repeated-bytes.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getBytesList()); - $this->assertCount(3, $repeated->getBytesList()); - - $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[0]); - $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[1]); - $this->assertInstanceOf('Protobuf\Stream', $repeated->getBytesList()[2]); - - $this->assertEquals('bin1', $repeated->getBytesList()[0]); - $this->assertEquals('bin2', $repeated->getBytesList()[1]); - $this->assertEquals('bin3', $repeated->getBytesList()[2]); - } - - public function testReadRepeatedEnum() - { - $binary = $this->getProtoContent('repeated-enum.bin'); - $repeated = Repeated::fromStream($binary); - - $this->assertInstanceOf(Repeated::CLASS, $repeated); - $this->assertInstanceOf(Collection::CLASS, $repeated->getEnumList()); - $this->assertCount(2, $repeated->getEnumList()); - - $this->assertInstanceOf('Protobuf\Enum', $repeated->getEnumList()[0]); - $this->assertInstanceOf('Protobuf\Enum', $repeated->getEnumList()[1]); - - $this->assertSame(Repeated\Enum::FOO(), $repeated->getEnumList()[0]); - $this->assertSame(Repeated\Enum::BAR(), $repeated->getEnumList()[1]); - } - - public function testReadComplexMessage() - { - $binary = $this->getProtoContent('addressbook.bin'); - $complex = AddressBook::fromStream($binary); - - $this->assertInstanceOf(AddressBook::CLASS, $complex); - $this->assertCount(2, $complex->getPersonList()); - - $person1 = $complex->getPersonList()[0]; - $person2 = $complex->getPersonList()[1]; - - $this->assertInstanceOf(Person::CLASS, $person1); - $this->assertInstanceOf(Person::CLASS, $person2); - - $this->assertEquals($person1->getId(), 2051); - $this->assertEquals($person1->getName(), 'John Doe'); - - $this->assertEquals($person2->getId(), 23); - $this->assertEquals($person2->getName(), 'Iván Montes'); - - $this->assertCount(2, $person1->getPhoneList()); - $this->assertCount(1, $person2->getPhoneList()); - - $this->assertEquals($person1->getPhoneList()[0]->getNumber(), '1231231212'); - $this->assertEquals($person1->getPhoneList()[0]->getType(), PhoneType::HOME()); - - $this->assertEquals($person1->getPhoneList()[1]->getNumber(), '55512321312'); - $this->assertEquals($person1->getPhoneList()[1]->getType(), PhoneType::MOBILE()); - - $this->assertEquals($person2->getPhoneList()[0]->getNumber(), '3493123123'); - $this->assertEquals($person2->getPhoneList()[0]->getType(), PhoneType::WORK()); - } - - public function testReadPhpOptionsMessage() - { - $binary = $this->getProtoContent('php_options.bin'); - $message = ParentMessage::fromStream($binary); - - $this->assertInstanceOf(ParentMessage::CLASS, $message); - $this->assertCount(2, $message->getInnerList()); - $this->assertSame(ParentMessage\InnerEnum::VALUE1(), $message->getEnum()); - - $inner1 = $message->getInnerList()[0]; - $inner2 = $message->getInnerList()[1]; - - $this->assertInstanceOf(ParentMessage\InnerMessage::CLASS, $inner1); - $this->assertInstanceOf(ParentMessage\InnerMessage::CLASS, $inner2); - - $this->assertSame(ParentMessage\InnerMessage\InnerMessageEnum::VALUE1(), $inner1->getEnum()); - $this->assertSame(ParentMessage\InnerMessage\InnerMessageEnum::VALUE2(), $inner2->getEnum()); - } - - public function testReadTreeMessage() - { - $binary = $this->getProtoContent('tree.bin'); - $root = Tree\Node::fromStream($binary); - - $this->assertInstanceOf(Tree\Node::CLASS, $root); - $this->assertCount(2, $root->getChildrenList()); - $this->assertEquals($root->getPath(), '/Users'); - - $node1 = $root->getChildrenList()[0]; - $node2 = $root->getChildrenList()[1]; - - $this->assertInstanceOf(Tree\Node::CLASS, $node1); - $this->assertInstanceOf(Tree\Node::CLASS, $node2); - - $this->assertEquals('/Users/fabio', $node1->getPath()); - $this->assertEquals('/Users/admin', $node2->getPath()); - - $this->assertInstanceOf(Tree\Node::CLASS, $node1->getParent()); - $this->assertInstanceOf(Tree\Node::CLASS, $node2->getParent()); - - $this->assertEquals('/Users', $node1->getParent()->getPath()); - $this->assertEquals('/Users', $node2->getParent()->getPath()); - } - - public function testReadExtensionAnimalMessage() - { - Extension\Extension::registerAllExtensions($this->config->getExtensionRegistry()); - - $binary = $this->getProtoContent('extension-animal-cat.bin'); - $animal = Extension\Animal::fromStream($binary, $this->config); - - $this->assertInstanceOf(Extension\Animal::CLASS, $animal); - $this->assertInstanceOf(Collection::CLASS, $animal->extensions()); - $this->assertEquals(Extension\Animal\Type::CAT(), $animal->getType()); - - $extensions = $animal->extensions(); - $cat = $extensions->get(Extension\Cat::animal()); - - $this->assertInstanceOf(Extension\Cat::CLASS, $cat); - $this->assertTrue($cat->getDeclawed()); - } - - public function testReadExtensionCommandMessage() - { - Extension\Extension::registerAllExtensions($this->config->getExtensionRegistry()); - - $binary = $this->getProtoContent('extension-command-version.bin'); - $command = Extension\Command::fromStream($binary, $this->config); - - $this->assertInstanceOf(Extension\Command::CLASS, $command); - $this->assertInstanceOf(Collection::CLASS, $command->extensions()); - $this->assertEquals(Extension\Command\CommandType::VERSION(), $command->getType()); - - $extensions = $command->extensions(); - $verbose = $extensions->get(Extension\Extension::verbose()); - $version = $extensions->get(Extension\VersionCommand::cmd()); - - $this->assertTrue($verbose); - $this->assertInstanceOf(Extension\VersionCommand::CLASS, $version); - $this->assertEquals(1, $version->getVersion()); - $this->assertSame(Extension\VersionCommand\Protocol::V1(), $version->getProtocol()); - } - - public function testUnknownFieldSet() - { - $binary = $this->getProtoContent('unknown.bin'); - $unrecognized = Unrecognized::fromStream(Stream::wrap($binary)); - - $this->assertInstanceOf(Unrecognized::CLASS, $unrecognized); - $this->assertInstanceOf('Protobuf\UnknownFieldSet', $unrecognized->unknownFieldSet()); - $this->assertCount(15, $unrecognized->unknownFieldSet()); - - $values = $unrecognized->unknownFieldSet(); - - $this->assertInstanceOf('Protobuf\Unknown', $values[1]); - $this->assertInstanceOf('Protobuf\Unknown', $values[2]); - $this->assertInstanceOf('Protobuf\Unknown', $values[3]); - $this->assertInstanceOf('Protobuf\Unknown', $values[4]); - $this->assertInstanceOf('Protobuf\Unknown', $values[5]); - $this->assertInstanceOf('Protobuf\Unknown', $values[6]); - $this->assertInstanceOf('Protobuf\Unknown', $values[7]); - $this->assertInstanceOf('Protobuf\Unknown', $values[8]); - $this->assertInstanceOf('Protobuf\Unknown', $values[9]); - $this->assertInstanceOf('Protobuf\Unknown', $values[12]); - $this->assertInstanceOf('Protobuf\Unknown', $values[13]); - $this->assertInstanceOf('Protobuf\Unknown', $values[15]); - $this->assertInstanceOf('Protobuf\Unknown', $values[16]); - $this->assertInstanceOf('Protobuf\Unknown', $values[17]); - $this->assertInstanceOf('Protobuf\Unknown', $values[18]); - - $this->assertEquals(4728057454355442093, $values[1]->value); - $this->assertEquals(1178657918, $values[2]->value); - $this->assertEquals(-123456789123456789, $values[3]->value); - $this->assertEquals(123456789123456789, $values[4]->value); - $this->assertEquals(-123456789, $values[5]->value); - $this->assertEquals(123456789123456789, $values[6]->value); - $this->assertEquals(123456789, $values[7]->value); - $this->assertEquals(1, $values[8]->value); - $this->assertEquals("foo", $values[9]->value); - $this->assertEquals("bar", $values[12]->value); - $this->assertEquals(123456789, $values[13]->value); - $this->assertEquals(4171510507, $values[15]->value); - $this->assertEquals(-123456789123456789, $values[16]->value); - $this->assertEquals(246913577, $values[17]->value); - $this->assertEquals(246913578246913577, $values[18]->value); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php b/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php deleted file mode 100644 index 3155d44..0000000 --- a/vendor/protobuf-php/protobuf/tests/StreamCollectionTest.php +++ /dev/null @@ -1,63 +0,0 @@ -collection = new StreamCollection(); - } - - public function testCreateStreamCollection() - { - $stream1 = Stream::create(); - $stream2 = Stream::create(); - - $collection = new StreamCollection([$stream1, $stream2]); - - $this->assertCount(2, $collection); - $this->assertEquals([$stream1, $stream2], $collection->getArrayCopy()); - } - - public function testAddStream() - { - $this->assertCount(0, $this->collection); - - $stream1 = Stream::create(); - $stream2 = Stream::create(); - - $this->collection[] = $stream1; - - $this->collection->add($stream2); - - $this->assertCount(2, $this->collection); - $this->assertEquals([$stream1, $stream2], $this->collection->getArrayCopy()); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\StreamCollection::offsetSet must be a \Protobuf\Stream, stdClass given - */ - public function testInvalidArgumentExceptionOffsetSetObject() - { - $this->collection[] = new \stdClass(); - } - - /** - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Argument 2 passed to Protobuf\StreamCollection::offsetSet must be a \Protobuf\Stream, integer given - */ - public function testInvalidArgumentExceptionOffsetSetInteger() - { - $this->collection[] = 123; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/StreamTest.php b/vendor/protobuf-php/protobuf/tests/StreamTest.php deleted file mode 100644 index 6a0e802..0000000 --- a/vendor/protobuf-php/protobuf/tests/StreamTest.php +++ /dev/null @@ -1,202 +0,0 @@ -assertFalse(is_resource($handle)); - } - - public function testConvertsToString() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - fwrite($handle, 'data'); - - $this->assertEquals('data', (string) $stream); - $this->assertEquals('data', (string) $stream); - } - - public function testGetsContents() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - fwrite($handle, 'data'); - - $this->assertEquals('data', $stream->getContents()); - } - - public function testChecksEof() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - fwrite($handle, 'data'); - - $this->assertFalse($stream->eof()); - $stream->read(4); - $this->assertTrue($stream->eof()); - } - - public function testGetSize() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - $this->assertEquals(3, fwrite($handle, 'foo')); - $this->assertEquals(3, $stream->getSize()); - $this->assertEquals(4, $stream->write('test', strlen('test'))); - $this->assertEquals(7, $stream->getSize()); - $this->assertEquals(7, $stream->getSize()); - } - - public function testStreamPosition() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - $this->assertEquals(0, $stream->tell()); - $stream->write('foo', strlen('foo')); - $this->assertEquals(3, $stream->tell()); - - $stream->seek(1); - - $this->assertEquals(1, $stream->tell()); - $this->assertSame(ftell($handle), $stream->tell()); - } - - public function testWriteStream() - { - $source = Stream::create(); - $target = Stream::create(); - - $source->write('foo', strlen('foo')); - $source->seek(0); - - $target->writeStream($source, $source->getSize()); - - $this->assertEquals(3, $source->getSize()); - $this->assertEquals(3, $target->getSize()); - - $this->assertEquals('foo', (string) $source); - $this->assertEquals('foo', (string) $target); - } - - public function testReadStream() - { - $source = Stream::wrap('FOObar'); - $read1 = $source->readStream(3); - $read2 = $source->readStream(3); - - $this->assertInstanceOf('Protobuf\Stream', $read1); - $this->assertInstanceOf('Protobuf\Stream', $read2); - - $this->assertEquals(3, $read1->getSize()); - $this->assertEquals(3, $read2->getSize()); - - $this->assertEquals('FOO', (string) $read1); - $this->assertEquals('bar', (string) $read2); - } - - public function testPositionOfResource() - { - $handle = fopen(__FILE__, 'r'); - - fseek($handle, 10); - - $stream = Stream::wrap($handle); - - $this->assertEquals(10, $stream->tell()); - } - - public function testCreateStreamFromString() - { - $stream = Stream::wrap('foo'); - - $this->assertInstanceOf('Protobuf\Stream', $stream); - $this->assertEquals('foo', $stream->getContents()); - } - - public function testCreateStreamFromEmptyString() - { - $this->assertInstanceOf('Protobuf\Stream', Stream::wrap()); - } - - public function testCreateStreamFromResource() - { - $handle = fopen(__FILE__, 'r'); - $stream = Stream::wrap($handle); - $content = file_get_contents(__FILE__); - - $this->assertInstanceOf('Protobuf\Stream', $stream); - $this->assertSame($content, (string) $stream); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Failed to write 2 bytes - */ - public function testWriteException() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - $stream->write('', 2); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Unable to seek stream position to -1 - */ - public function testSeekException() - { - $handle = fopen('php://temp', 'w+'); - $stream = new Stream($handle); - - $stream->seek(-1); - } - - /** - * @expectedException \RuntimeException - * @expectedExceptionMessage Failed to write stream with 3 bytes - */ - public function testWriteStreamException() - { - $source = Stream::create(); - $target = Stream::create(); - - $target->writeStream($source, 3); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testThrowsExceptionForUnknown() - { - Stream::wrap(new \stdClass()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testThrowsExceptionOnInvalidArgument() - { - new Stream(null); - } - - public function testCanSetSize() - { - $this->assertEquals(10, Stream::wrap('', 10)->getSize()); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/TestCase.php b/vendor/protobuf-php/protobuf/tests/TestCase.php deleted file mode 100644 index 187a738..0000000 --- a/vendor/protobuf-php/protobuf/tests/TestCase.php +++ /dev/null @@ -1,76 +0,0 @@ -config = new Configuration(); - } - - /** - * @param object $object - * @param string $method - * @param array $args - * - * @return mixed - */ - protected function invokeMethod($object, $method, array $args= []) - { - $reflection = new \ReflectionMethod($object, $method); - - $reflection->setAccessible(true); - - return $reflection->invokeArgs($object, $args); - } - - /** - * @param object $object - * @param string $property - * - * @return mixed - */ - protected function getPropertyValue($object, $property) - { - $reflection = new \ReflectionProperty($object, $property); - - $reflection->setAccessible(true); - - return $reflection->getValue($object); - } - - /** - * @param object $object - * @param string $property - * @param mixed $value - */ - protected function setPropertyValue($object, $property, $value) - { - $reflection = new \ReflectionProperty($object, $property); - - $reflection->setAccessible(true); - $reflection->setValue($object, $value); - } - - /** - * @param string $name - * - * @return string - */ - protected function getProtoContent($name) - { - $basepath = __DIR__ . '/Resources'; - $content = file_get_contents($basepath . '/' . $name); - - return $content; - } -} diff --git a/vendor/protobuf-php/protobuf/tests/TextFormatTest.php b/vendor/protobuf-php/protobuf/tests/TextFormatTest.php deleted file mode 100644 index b654662..0000000 --- a/vendor/protobuf-php/protobuf/tests/TextFormatTest.php +++ /dev/null @@ -1,185 +0,0 @@ -textFormat = new TextFormat($this->config); - } - - public function testFormatSimple() - { - $simple = new Simple(); - - $simple->setBool(true); - $simple->setBytes("bar"); - $simple->setString("foo"); - $simple->setFloat(12345.123); - $simple->setUint32(123456789); - $simple->setInt32(-123456789); - $simple->setFixed32(123456789); - $simple->setSint32(-123456789); - $simple->setSfixed32(-123456789); - $simple->setDouble(123456789.12345); - $simple->setInt64(-123456789123456789); - $simple->setUint64(123456789123456789); - $simple->setFixed64(123456789123456789); - $simple->setSint64(-123456789123456789); - $simple->setSfixed64(-123456789123456789); - - $expected = $this->getProtoContent('simple.txt'); - $actual = $this->textFormat->encodeMessage($simple); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatRepeatedString() - { - $repeated = new Repeated(); - - $repeated->addString('one'); - $repeated->addString('two'); - $repeated->addString('three'); - - $expected = $this->getProtoContent('repeated-string.txt'); - $actual = $this->textFormat->encodeMessage($repeated); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatRepeatedInt() - { - $repeated = new Repeated(); - - $repeated->addInt(1); - $repeated->addInt(2); - $repeated->addInt(3); - - $expected = $this->getProtoContent('repeated-int32.txt'); - $actual = $this->textFormat->encodeMessage($repeated); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatRepeatedNested() - { - $repeated = new Repeated(); - $nested1 = new Repeated\Nested(); - $nested2 = new Repeated\Nested(); - $nested3 = new Repeated\Nested(); - - $nested1->setId(1); - $nested2->setId(2); - $nested3->setId(3); - - $repeated->addNested($nested1); - $repeated->addNested($nested2); - $repeated->addNested($nested3); - - $expected = $this->getProtoContent('repeated-nested.txt'); - $actual = $this->textFormat->encodeMessage($repeated); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatComplexMessage() - { - $book = new AddressBook(); - $person = new Person(); - - $person->setId(2051); - $person->setName('John Doe'); - $person->setEmail('john.doe@gmail.com'); - - $phone = new Person\PhoneNumber(); - - $phone->setNumber('1231231212'); - $phone->setType(Person\PhoneType::HOME()); - - $person->addPhone($phone); - - $phone = new Person\PhoneNumber(); - - $phone->setNumber('55512321312'); - $phone->setType(Person\PhoneType::MOBILE()); - - $person->addPhone($phone); - $book->addPerson($person); - - $person = new Person(); - - $person->setId(23); - $person->setName('Iván Montes'); - $person->setEmail('drslump@pollinimini.net'); - - $phone = new Person\PhoneNumber(); - - $phone->setNumber('3493123123'); - $phone->setType(Person\PhoneType::WORK()); - - $person->addPhone($phone); - $book->addPerson($person); - - $expected = $this->getProtoContent('addressbook.txt'); - $actual = $this->textFormat->encodeMessage($book); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatTreeMessage() - { - $root = new Tree\Node(); - $admin = new Tree\Node(); - $fabio = new Tree\Node(); - - $root->setPath('/Users'); - $fabio->setPath('/Users/fabio'); - $admin->setPath('/Users/admin'); - - // avoid recursion - $parent = clone $root; - - $admin->setParent($parent); - $fabio->setParent($parent); - - $root->addChildren($fabio); - $root->addChildren($admin); - - $expected = $this->getProtoContent('tree.txt'); - $actual = $root->__toString(); - - $this->assertEquals($expected, (string) $actual); - } - - public function testFormatTotring() - { - $repeated = new Repeated(); - - $repeated->addString('one'); - $repeated->addString('two'); - $repeated->addString('three'); - - $expected = $this->getProtoContent('repeated-string.txt'); - $actual = $repeated->__toString(); - - $this->assertEquals($expected, (string) $actual); - } -} diff --git a/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh b/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh deleted file mode 100755 index fb64118..0000000 --- a/vendor/protobuf-php/protobuf/tests/travis/install-protobuf.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -set -e - -if [ -z "$PROTOBUF_VERSION" ]; then - echo 'PROTOBUF_VERSION env var is not defined.'; - exit 1; -fi - -if [ -d "$HOME/protobuf/$PROTOBUF_VERSION/lib" ]; then - echo 'Using cached instalation.'; - exit 0; -fi - -case "$PROTOBUF_VERSION" in -2*) - PROTOBUF_RELEASE_FILE=protobuf-$PROTOBUF_VERSION - ;; -3*) - PROTOBUF_RELEASE_FILE=protobuf-cpp-$PROTOBUF_VERSION - ;; -*) - echo "Unknown protobuf version: $PROTOBUF_VERSION" - exit 1; - ;; -esac - -wget https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/$PROTOBUF_RELEASE_FILE.tar.gz - -tar xf $PROTOBUF_RELEASE_FILE.tar.gz - -cd protobuf-$PROTOBUF_VERSION && ./configure --prefix=$HOME/protobuf/$PROTOBUF_VERSION && make && make install - diff --git a/vendor/psr/cache/CHANGELOG.md b/vendor/psr/cache/CHANGELOG.md deleted file mode 100644 index 58ddab0..0000000 --- a/vendor/psr/cache/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.0.1 - 2016-08-06 - -### Fixed - -- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr -- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr -- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell -- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell - -## 1.0.0 - 2015-12-11 - -Initial stable release; reflects accepted PSR-6 specification diff --git a/vendor/psr/cache/LICENSE.txt b/vendor/psr/cache/LICENSE.txt deleted file mode 100644 index b1c2c97..0000000 --- a/vendor/psr/cache/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 PHP Framework Interoperability Group - -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/vendor/psr/cache/README.md b/vendor/psr/cache/README.md deleted file mode 100644 index 9855a31..0000000 --- a/vendor/psr/cache/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Caching Interface -============== - -This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url]. - -Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism. - -The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. - -[psr-url]: https://www.php-fig.org/psr/psr-6/ -[package-url]: https://packagist.org/packages/psr/cache -[implementation-url]: https://packagist.org/providers/psr/cache-implementation diff --git a/vendor/psr/cache/composer.json b/vendor/psr/cache/composer.json deleted file mode 100644 index 4b68797..0000000 --- a/vendor/psr/cache/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/cache", - "description": "Common interface for caching libraries", - "keywords": ["psr", "psr-6", "cache"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": ">=8.0.0" - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/vendor/psr/cache/src/CacheException.php b/vendor/psr/cache/src/CacheException.php deleted file mode 100644 index bb785f4..0000000 --- a/vendor/psr/cache/src/CacheException.php +++ /dev/null @@ -1,10 +0,0 @@ -logger = $logger; - } - - public function doSomething() - { - if ($this->logger) { - $this->logger->info('Doing work'); - } - - try { - $this->doSomethingElse(); - } catch (Exception $exception) { - $this->logger->error('Oh no!', array('exception' => $exception)); - } - - // do something useful - } -} -``` - -You can then pick one of the implementations of the interface to get a logger. - -If you want to implement the interface, you can require this package and -implement `Psr\Log\LoggerInterface` in your code. Please read the -[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) -for details. diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json deleted file mode 100644 index 879fc6f..0000000 --- a/vendor/psr/log/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "psr/log", - "description": "Common interface for logging libraries", - "keywords": ["psr", "psr-3", "log"], - "homepage": "https://github.com/php-fig/log", - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": ">=8.0.0" - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - } -} diff --git a/vendor/psr/log/src/AbstractLogger.php b/vendor/psr/log/src/AbstractLogger.php deleted file mode 100644 index d60a091..0000000 --- a/vendor/psr/log/src/AbstractLogger.php +++ /dev/null @@ -1,15 +0,0 @@ -logger = $logger; - } -} diff --git a/vendor/psr/log/src/LoggerInterface.php b/vendor/psr/log/src/LoggerInterface.php deleted file mode 100644 index b3a24b5..0000000 --- a/vendor/psr/log/src/LoggerInterface.php +++ /dev/null @@ -1,125 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function alert(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function critical(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function error(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function warning(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function notice(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function info(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function debug(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::DEBUG, $message, $context); - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string|\Stringable $message - * @param array $context - * - * @return void - * - * @throws \Psr\Log\InvalidArgumentException - */ - abstract public function log($level, string|\Stringable $message, array $context = []): void; -} diff --git a/vendor/psr/log/src/NullLogger.php b/vendor/psr/log/src/NullLogger.php deleted file mode 100644 index c1cc3c0..0000000 --- a/vendor/psr/log/src/NullLogger.php +++ /dev/null @@ -1,30 +0,0 @@ -logger) { }` - * blocks. - */ -class NullLogger extends AbstractLogger -{ - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string|\Stringable $message - * @param array $context - * - * @return void - * - * @throws \Psr\Log\InvalidArgumentException - */ - public function log($level, string|\Stringable $message, array $context = []): void - { - // noop - } -} diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md deleted file mode 100644 index 9e2fc5a..0000000 --- a/vendor/symfony/finder/CHANGELOG.md +++ /dev/null @@ -1,92 +0,0 @@ -CHANGELOG -========= - -6.0 ---- - - * Remove `Comparator::setTarget()` and `Comparator::setOperator()` - -5.4.0 ------ - - * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` - * Add a constructor to `Comparator` that allows setting target and operator - * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified - * Add recursive .gitignore files support - -5.0.0 ------ - - * added `$useNaturalSort` argument to `Finder::sortByName()` - -4.3.0 ------ - - * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore - -4.2.0 ------ - - * added $useNaturalSort option to Finder::sortByName() method - * the `Finder::sortByName()` method will have a new `$useNaturalSort` - argument in version 5.0, not defining it is deprecated - * added `Finder::reverseSorting()` to reverse the sorting - -4.0.0 ------ - - * removed `ExceptionInterface` - * removed `Symfony\Component\Finder\Iterator\FilterIterator` - -3.4.0 ------ - - * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` - * added Finder::hasResults() method to check if any results were found - -3.3.0 ------ - - * added double-star matching to Glob::toRegex() - -3.0.0 ------ - - * removed deprecated classes - -2.8.0 ------ - - * deprecated adapters and related classes - -2.5.0 ------ - * added support for GLOB_BRACE in the paths passed to Finder::in() - -2.3.0 ------ - - * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) - * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception - -2.2.0 ------ - - * added Finder::path() and Finder::notPath() methods - * added finder adapters to improve performance on specific platforms - * added support for wildcard characters (glob patterns) in the paths passed - to Finder::in() - -2.1.0 ------ - - * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and - Finder::sortByModifiedTime() - * added Countable to Finder - * added support for an array of directories as an argument to - Finder::exclude() - * added searching based on the file content via Finder::contains() and - Finder::notContains() - * added support for the != operator in the Comparator - * [BC BREAK] filter expressions (used for file name and content) are no more - considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/vendor/symfony/finder/Comparator/Comparator.php b/vendor/symfony/finder/Comparator/Comparator.php deleted file mode 100644 index bd68583..0000000 --- a/vendor/symfony/finder/Comparator/Comparator.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * @author Fabien Potencier - */ -class Comparator -{ - private string $target; - private string $operator; - - public function __construct(string $target, string $operator = '==') - { - if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { - throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); - } - - $this->target = $target; - $this->operator = $operator; - } - - /** - * Gets the target value. - */ - public function getTarget(): string - { - return $this->target; - } - - /** - * Gets the comparison operator. - */ - public function getOperator(): string - { - return $this->operator; - } - - /** - * Tests against the target. - */ - public function test(mixed $test): bool - { - return match ($this->operator) { - '>' => $test > $this->target, - '>=' => $test >= $this->target, - '<' => $test < $this->target, - '<=' => $test <= $this->target, - '!=' => $test != $this->target, - default => $test == $this->target, - }; - } -} diff --git a/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/symfony/finder/Comparator/DateComparator.php deleted file mode 100644 index 159964d..0000000 --- a/vendor/symfony/finder/Comparator/DateComparator.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * DateCompare compiles date comparisons. - * - * @author Fabien Potencier - */ -class DateComparator extends Comparator -{ - /** - * @param string $test A comparison string - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct(string $test) - { - if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); - } - - try { - $date = new \DateTime($matches[2]); - $target = $date->format('U'); - } catch (\Exception) { - throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); - } - - $operator = $matches[1] ?? '=='; - if ('since' === $operator || 'after' === $operator) { - $operator = '>'; - } - - if ('until' === $operator || 'before' === $operator) { - $operator = '<'; - } - - parent::__construct($target, $operator); - } -} diff --git a/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Comparator/NumberComparator.php deleted file mode 100644 index ff85d96..0000000 --- a/vendor/symfony/finder/Comparator/NumberComparator.php +++ /dev/null @@ -1,78 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * NumberComparator compiles a simple comparison to an anonymous - * subroutine, which you can call with a value to be tested again. - * - * Now this would be very pointless, if NumberCompare didn't understand - * magnitudes. - * - * The target value may use magnitudes of kilobytes (k, ki), - * megabytes (m, mi), or gigabytes (g, gi). Those suffixed - * with an i use the appropriate 2**n version in accordance with the - * IEC standard: http://physics.nist.gov/cuu/Units/binary.html - * - * Based on the Perl Number::Compare module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - * - * @see http://physics.nist.gov/cuu/Units/binary.html - */ -class NumberComparator extends Comparator -{ - /** - * @param string|int $test A comparison string or an integer - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct(?string $test) - { - if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); - } - - $target = $matches[2]; - if (!is_numeric($target)) { - throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); - } - if (isset($matches[3])) { - // magnitude - switch (strtolower($matches[3])) { - case 'k': - $target *= 1000; - break; - case 'ki': - $target *= 1024; - break; - case 'm': - $target *= 1000000; - break; - case 'mi': - $target *= 1024 * 1024; - break; - case 'g': - $target *= 1000000000; - break; - case 'gi': - $target *= 1024 * 1024 * 1024; - break; - } - } - - parent::__construct($target, $matches[1] ?: '=='); - } -} diff --git a/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/symfony/finder/Exception/AccessDeniedException.php deleted file mode 100644 index ee195ea..0000000 --- a/vendor/symfony/finder/Exception/AccessDeniedException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Jean-François Simon - */ -class AccessDeniedException extends \UnexpectedValueException -{ -} diff --git a/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php deleted file mode 100644 index c6cc0f2..0000000 --- a/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Andreas Erhard - */ -class DirectoryNotFoundException extends \InvalidArgumentException -{ -} diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php deleted file mode 100644 index 4636f05..0000000 --- a/vendor/symfony/finder/Finder.php +++ /dev/null @@ -1,798 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -use Symfony\Component\Finder\Comparator\DateComparator; -use Symfony\Component\Finder\Comparator\NumberComparator; -use Symfony\Component\Finder\Exception\DirectoryNotFoundException; -use Symfony\Component\Finder\Iterator\CustomFilterIterator; -use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; -use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; -use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; -use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; -use Symfony\Component\Finder\Iterator\FilenameFilterIterator; -use Symfony\Component\Finder\Iterator\LazyIterator; -use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; -use Symfony\Component\Finder\Iterator\SortableIterator; - -/** - * Finder allows to build rules to find files and directories. - * - * It is a thin wrapper around several specialized iterator classes. - * - * All rules may be invoked several times. - * - * All methods return the current Finder object to allow chaining: - * - * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); - * - * @author Fabien Potencier - * - * @implements \IteratorAggregate - */ -class Finder implements \IteratorAggregate, \Countable -{ - public const IGNORE_VCS_FILES = 1; - public const IGNORE_DOT_FILES = 2; - public const IGNORE_VCS_IGNORED_FILES = 4; - - private int $mode = 0; - private array $names = []; - private array $notNames = []; - private array $exclude = []; - private array $filters = []; - private array $depths = []; - private array $sizes = []; - private bool $followLinks = false; - private bool $reverseSorting = false; - private \Closure|int|false $sort = false; - private int $ignore = 0; - private array $dirs = []; - private array $dates = []; - private array $iterators = []; - private array $contains = []; - private array $notContains = []; - private array $paths = []; - private array $notPaths = []; - private bool $ignoreUnreadableDirs = false; - - private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; - - public function __construct() - { - $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; - } - - /** - * Creates a new Finder. - */ - public static function create(): static - { - return new static(); - } - - /** - * Restricts the matching to directories only. - * - * @return $this - */ - public function directories(): static - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; - - return $this; - } - - /** - * Restricts the matching to files only. - * - * @return $this - */ - public function files(): static - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; - - return $this; - } - - /** - * Adds tests for the directory depth. - * - * Usage: - * - * $finder->depth('> 1') // the Finder will start matching at level 1. - * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. - * $finder->depth(['>= 1', '< 3']) - * - * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels - * - * @return $this - * - * @see DepthRangeFilterIterator - * @see NumberComparator - */ - public function depth(string|int|array $levels): static - { - foreach ((array) $levels as $level) { - $this->depths[] = new Comparator\NumberComparator($level); - } - - return $this; - } - - /** - * Adds tests for file dates (last modified). - * - * The date must be something that strtotime() is able to parse: - * - * $finder->date('since yesterday'); - * $finder->date('until 2 days ago'); - * $finder->date('> now - 2 hours'); - * $finder->date('>= 2005-10-15'); - * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); - * - * @param string|string[] $dates A date range string or an array of date ranges - * - * @return $this - * - * @see strtotime - * @see DateRangeFilterIterator - * @see DateComparator - */ - public function date(string|array $dates): static - { - foreach ((array) $dates as $date) { - $this->dates[] = new Comparator\DateComparator($date); - } - - return $this; - } - - /** - * Adds rules that files must match. - * - * You can use patterns (delimited with / sign), globs or simple strings. - * - * $finder->name('*.php') - * $finder->name('/\.php$/') // same as above - * $finder->name('test.php') - * $finder->name(['test.py', 'test.php']) - * - * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function name(string|array $patterns): static - { - $this->names = array_merge($this->names, (array) $patterns); - - return $this; - } - - /** - * Adds rules that files must not match. - * - * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function notName(string|array $patterns): static - { - $this->notNames = array_merge($this->notNames, (array) $patterns); - - return $this; - } - - /** - * Adds tests that file contents must match. - * - * Strings or PCRE patterns can be used: - * - * $finder->contains('Lorem ipsum') - * $finder->contains('/Lorem ipsum/i') - * $finder->contains(['dolor', '/ipsum/i']) - * - * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns - * - * @return $this - * - * @see FilecontentFilterIterator - */ - public function contains(string|array $patterns): static - { - $this->contains = array_merge($this->contains, (array) $patterns); - - return $this; - } - - /** - * Adds tests that file contents must not match. - * - * Strings or PCRE patterns can be used: - * - * $finder->notContains('Lorem ipsum') - * $finder->notContains('/Lorem ipsum/i') - * $finder->notContains(['lorem', '/dolor/i']) - * - * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns - * - * @return $this - * - * @see FilecontentFilterIterator - */ - public function notContains(string|array $patterns): static - { - $this->notContains = array_merge($this->notContains, (array) $patterns); - - return $this; - } - - /** - * Adds rules that filenames must match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->path('some/special/dir') - * $finder->path('/some\/special\/dir/') // same as above - * $finder->path(['some dir', 'another/dir']) - * - * Use only / as dirname separator. - * - * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function path(string|array $patterns): static - { - $this->paths = array_merge($this->paths, (array) $patterns); - - return $this; - } - - /** - * Adds rules that filenames must not match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->notPath('some/special/dir') - * $finder->notPath('/some\/special\/dir/') // same as above - * $finder->notPath(['some/file.txt', 'another/file.log']) - * - * Use only / as dirname separator. - * - * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function notPath(string|array $patterns): static - { - $this->notPaths = array_merge($this->notPaths, (array) $patterns); - - return $this; - } - - /** - * Adds tests for file sizes. - * - * $finder->size('> 10K'); - * $finder->size('<= 1Ki'); - * $finder->size(4); - * $finder->size(['> 10K', '< 20K']) - * - * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges - * - * @return $this - * - * @see SizeRangeFilterIterator - * @see NumberComparator - */ - public function size(string|int|array $sizes): static - { - foreach ((array) $sizes as $size) { - $this->sizes[] = new Comparator\NumberComparator($size); - } - - return $this; - } - - /** - * Excludes directories. - * - * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: - * - * $finder->in(__DIR__)->exclude('ruby'); - * - * @param string|array $dirs A directory path or an array of directories - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function exclude(string|array $dirs): static - { - $this->exclude = array_merge($this->exclude, (array) $dirs); - - return $this; - } - - /** - * Excludes "hidden" directories and files (starting with a dot). - * - * This option is enabled by default. - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function ignoreDotFiles(bool $ignoreDotFiles): static - { - if ($ignoreDotFiles) { - $this->ignore |= static::IGNORE_DOT_FILES; - } else { - $this->ignore &= ~static::IGNORE_DOT_FILES; - } - - return $this; - } - - /** - * Forces the finder to ignore version control directories. - * - * This option is enabled by default. - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function ignoreVCS(bool $ignoreVCS): static - { - if ($ignoreVCS) { - $this->ignore |= static::IGNORE_VCS_FILES; - } else { - $this->ignore &= ~static::IGNORE_VCS_FILES; - } - - return $this; - } - - /** - * Forces Finder to obey .gitignore and ignore files based on rules listed there. - * - * This option is disabled by default. - * - * @return $this - */ - public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static - { - if ($ignoreVCSIgnored) { - $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; - } else { - $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; - } - - return $this; - } - - /** - * Adds VCS patterns. - * - * @see ignoreVCS() - * - * @param string|string[] $pattern VCS patterns to ignore - */ - public static function addVCSPattern(string|array $pattern) - { - foreach ((array) $pattern as $p) { - self::$vcsPatterns[] = $p; - } - - self::$vcsPatterns = array_unique(self::$vcsPatterns); - } - - /** - * Sorts files and directories by an anonymous function. - * - * The anonymous function receives two \SplFileInfo instances to compare. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sort(\Closure $closure): static - { - $this->sort = $closure; - - return $this; - } - - /** - * Sorts files and directories by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByName(bool $useNaturalSort = false): static - { - $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; - - return $this; - } - - /** - * Sorts files and directories by type (directories before files), then by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByType(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; - - return $this; - } - - /** - * Sorts files and directories by the last accessed time. - * - * This is the time that the file was last accessed, read or written to. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByAccessedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; - - return $this; - } - - /** - * Reverses the sorting. - * - * @return $this - */ - public function reverseSorting(): static - { - $this->reverseSorting = true; - - return $this; - } - - /** - * Sorts files and directories by the last inode changed time. - * - * This is the time that the inode information was last modified (permissions, owner, group or other metadata). - * - * On Windows, since inode is not available, changed time is actually the file creation time. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByChangedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; - - return $this; - } - - /** - * Sorts files and directories by the last modified time. - * - * This is the last time the actual contents of the file were last modified. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByModifiedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; - - return $this; - } - - /** - * Filters the iterator with an anonymous function. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @return $this - * - * @see CustomFilterIterator - */ - public function filter(\Closure $closure): static - { - $this->filters[] = $closure; - - return $this; - } - - /** - * Forces the following of symlinks. - * - * @return $this - */ - public function followLinks(): static - { - $this->followLinks = true; - - return $this; - } - - /** - * Tells finder to ignore unreadable directories. - * - * By default, scanning unreadable directories content throws an AccessDeniedException. - * - * @return $this - */ - public function ignoreUnreadableDirs(bool $ignore = true): static - { - $this->ignoreUnreadableDirs = $ignore; - - return $this; - } - - /** - * Searches files and directories which match defined rules. - * - * @param string|string[] $dirs A directory path or an array of directories - * - * @return $this - * - * @throws DirectoryNotFoundException if one of the directories does not exist - */ - public function in(string|array $dirs): static - { - $resolvedDirs = []; - - foreach ((array) $dirs as $dir) { - if (is_dir($dir)) { - $resolvedDirs[] = [$this->normalizeDir($dir)]; - } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { - sort($glob); - $resolvedDirs[] = array_map($this->normalizeDir(...), $glob); - } else { - throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); - } - } - - $this->dirs = array_merge($this->dirs, ...$resolvedDirs); - - return $this; - } - - /** - * Returns an Iterator for the current Finder configuration. - * - * This method implements the IteratorAggregate interface. - * - * @return \Iterator - * - * @throws \LogicException if the in() method has not been called - */ - public function getIterator(): \Iterator - { - if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { - throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); - } - - if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { - $iterator = $this->searchInDirectory($this->dirs[0]); - - if ($this->sort || $this->reverseSorting) { - $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); - } - - return $iterator; - } - - $iterator = new \AppendIterator(); - foreach ($this->dirs as $dir) { - $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { - return $this->searchInDirectory($dir); - }))); - } - - foreach ($this->iterators as $it) { - $iterator->append($it); - } - - if ($this->sort || $this->reverseSorting) { - $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); - } - - return $iterator; - } - - /** - * Appends an existing set of files/directories to the finder. - * - * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. - * - * @return $this - * - * @throws \InvalidArgumentException when the given argument is not iterable - */ - public function append(iterable $iterator): static - { - if ($iterator instanceof \IteratorAggregate) { - $this->iterators[] = $iterator->getIterator(); - } elseif ($iterator instanceof \Iterator) { - $this->iterators[] = $iterator; - } elseif (is_iterable($iterator)) { - $it = new \ArrayIterator(); - foreach ($iterator as $file) { - $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); - $it[$file->getPathname()] = $file; - } - $this->iterators[] = $it; - } else { - throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); - } - - return $this; - } - - /** - * Check if any results were found. - */ - public function hasResults(): bool - { - foreach ($this->getIterator() as $_) { - return true; - } - - return false; - } - - /** - * Counts all the results collected by the iterators. - */ - public function count(): int - { - return iterator_count($this->getIterator()); - } - - private function searchInDirectory(string $dir): \Iterator - { - $exclude = $this->exclude; - $notPaths = $this->notPaths; - - if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { - $exclude = array_merge($exclude, self::$vcsPatterns); - } - - if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { - $notPaths[] = '#(^|/)\..+(/|$)#'; - } - - $minDepth = 0; - $maxDepth = \PHP_INT_MAX; - - foreach ($this->depths as $comparator) { - switch ($comparator->getOperator()) { - case '>': - $minDepth = $comparator->getTarget() + 1; - break; - case '>=': - $minDepth = $comparator->getTarget(); - break; - case '<': - $maxDepth = $comparator->getTarget() - 1; - break; - case '<=': - $maxDepth = $comparator->getTarget(); - break; - default: - $minDepth = $maxDepth = $comparator->getTarget(); - } - } - - $flags = \RecursiveDirectoryIterator::SKIP_DOTS; - - if ($this->followLinks) { - $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; - } - - $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); - - if ($exclude) { - $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); - } - - $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); - - if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { - $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); - } - - if ($this->mode) { - $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); - } - - if ($this->names || $this->notNames) { - $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); - } - - if ($this->contains || $this->notContains) { - $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); - } - - if ($this->sizes) { - $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); - } - - if ($this->dates) { - $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); - } - - if ($this->filters) { - $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); - } - - if ($this->paths || $notPaths) { - $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); - } - - if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { - $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); - } - - return $iterator; - } - - /** - * Normalizes given directory names by removing trailing slashes. - * - * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper - */ - private function normalizeDir(string $dir): string - { - if ('/' === $dir) { - return $dir; - } - - $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); - - if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { - $dir .= '/'; - } - - return $dir; - } -} diff --git a/vendor/symfony/finder/Gitignore.php b/vendor/symfony/finder/Gitignore.php deleted file mode 100644 index 070074b..0000000 --- a/vendor/symfony/finder/Gitignore.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Gitignore matches against text. - * - * @author Michael Voříšek - * @author Ahmed Abdou - */ -class Gitignore -{ - /** - * Returns a regexp which is the equivalent of the gitignore pattern. - * - * Format specification: https://git-scm.com/docs/gitignore#_pattern_format - */ - public static function toRegex(string $gitignoreFileContent): string - { - return self::buildRegex($gitignoreFileContent, false); - } - - public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string - { - return self::buildRegex($gitignoreFileContent, true); - } - - private static function buildRegex(string $gitignoreFileContent, bool $inverted): string - { - $gitignoreFileContent = preg_replace('~(? - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Glob matches globbing patterns against text. - * - * if match_glob("foo.*", "foo.bar") echo "matched\n"; - * - * // prints foo.bar and foo.baz - * $regex = glob_to_regex("foo.*"); - * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) - * { - * if (/$regex/) echo "matched: $car\n"; - * } - * - * Glob implements glob(3) style matching that can be used to match - * against text, rather than fetching names from a filesystem. - * - * Based on the Perl Text::Glob module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - */ -class Glob -{ - /** - * Returns a regexp which is the equivalent of the glob pattern. - */ - public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#'): string - { - $firstByte = true; - $escaping = false; - $inCurlies = 0; - $regex = ''; - $sizeGlob = \strlen($glob); - for ($i = 0; $i < $sizeGlob; ++$i) { - $car = $glob[$i]; - if ($firstByte && $strictLeadingDot && '.' !== $car) { - $regex .= '(?=[^\.])'; - } - - $firstByte = '/' === $car; - - if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { - $car = '[^/]++/'; - if (!isset($glob[$i + 3])) { - $car .= '?'; - } - - if ($strictLeadingDot) { - $car = '(?=[^\.])'.$car; - } - - $car = '/(?:'.$car.')*'; - $i += 2 + isset($glob[$i + 3]); - - if ('/' === $delimiter) { - $car = str_replace('/', '\\/', $car); - } - } - - if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { - $regex .= "\\$car"; - } elseif ('*' === $car) { - $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); - } elseif ('?' === $car) { - $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); - } elseif ('{' === $car) { - $regex .= $escaping ? '\\{' : '('; - if (!$escaping) { - ++$inCurlies; - } - } elseif ('}' === $car && $inCurlies) { - $regex .= $escaping ? '}' : ')'; - if (!$escaping) { - --$inCurlies; - } - } elseif (',' === $car && $inCurlies) { - $regex .= $escaping ? ',' : '|'; - } elseif ('\\' === $car) { - if ($escaping) { - $regex .= '\\\\'; - $escaping = false; - } else { - $escaping = true; - } - - continue; - } else { - $regex .= $car; - } - $escaping = false; - } - - return $delimiter.'^'.$regex.'$'.$delimiter; - } -} diff --git a/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Iterator/CustomFilterIterator.php deleted file mode 100644 index 82ee81d..0000000 --- a/vendor/symfony/finder/Iterator/CustomFilterIterator.php +++ /dev/null @@ -1,61 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * CustomFilterIterator filters files by applying anonymous functions. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class CustomFilterIterator extends \FilterIterator -{ - private array $filters = []; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param callable[] $filters An array of PHP callbacks - * - * @throws \InvalidArgumentException - */ - public function __construct(\Iterator $iterator, array $filters) - { - foreach ($filters as $filter) { - if (!\is_callable($filter)) { - throw new \InvalidArgumentException('Invalid PHP callback.'); - } - } - $this->filters = $filters; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - - foreach ($this->filters as $filter) { - if (false === $filter($fileinfo)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php deleted file mode 100644 index 718d42b..0000000 --- a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\DateComparator; - -/** - * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class DateRangeFilterIterator extends \FilterIterator -{ - private array $comparators = []; - - /** - * @param \Iterator $iterator - * @param DateComparator[] $comparators - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - - if (!file_exists($fileinfo->getPathname())) { - return false; - } - - $filedate = $fileinfo->getMTime(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filedate)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php deleted file mode 100644 index 1cddb5f..0000000 --- a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * DepthRangeFilterIterator limits the directory depth. - * - * @author Fabien Potencier - * - * @template-covariant TKey - * @template-covariant TValue - * - * @extends \FilterIterator - */ -class DepthRangeFilterIterator extends \FilterIterator -{ - private int $minDepth = 0; - - /** - * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter - * @param int $minDepth The min depth - * @param int $maxDepth The max depth - */ - public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) - { - $this->minDepth = $minDepth; - $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - return $this->getInnerIterator()->getDepth() >= $this->minDepth; - } -} diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php deleted file mode 100644 index efe9364..0000000 --- a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * ExcludeDirectoryFilterIterator filters out directories. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - * @implements \RecursiveIterator - */ -class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator -{ - /** @var \Iterator */ - private \Iterator $iterator; - private bool $isRecursive; - private array $excludedDirs = []; - private ?string $excludedPattern = null; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param string[] $directories An array of directories to exclude - */ - public function __construct(\Iterator $iterator, array $directories) - { - $this->iterator = $iterator; - $this->isRecursive = $iterator instanceof \RecursiveIterator; - $patterns = []; - foreach ($directories as $directory) { - $directory = rtrim($directory, '/'); - if (!$this->isRecursive || str_contains($directory, '/')) { - $patterns[] = preg_quote($directory, '#'); - } else { - $this->excludedDirs[$directory] = true; - } - } - if ($patterns) { - $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; - } - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { - return false; - } - - if ($this->excludedPattern) { - $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); - $path = str_replace('\\', '/', $path); - - return !preg_match($this->excludedPattern, $path); - } - - return true; - } - - public function hasChildren(): bool - { - return $this->isRecursive && $this->iterator->hasChildren(); - } - - public function getChildren(): self - { - $children = new self($this->iterator->getChildren(), []); - $children->excludedDirs = $this->excludedDirs; - $children->excludedPattern = $this->excludedPattern; - - return $children; - } -} diff --git a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php deleted file mode 100644 index 2130378..0000000 --- a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * FileTypeFilterIterator only keeps files, directories, or both. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class FileTypeFilterIterator extends \FilterIterator -{ - public const ONLY_FILES = 1; - public const ONLY_DIRECTORIES = 2; - - private int $mode; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) - */ - public function __construct(\Iterator $iterator, int $mode) - { - $this->mode = $mode; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { - return false; - } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { - return false; - } - - return true; - } -} diff --git a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php deleted file mode 100644 index bdc71ff..0000000 --- a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). - * - * @author Fabien Potencier - * @author Włodzimierz Gajda - * - * @extends MultiplePcreFilterIterator - */ -class FilecontentFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - if (!$this->matchRegexps && !$this->noMatchRegexps) { - return true; - } - - $fileinfo = $this->current(); - - if ($fileinfo->isDir() || !$fileinfo->isReadable()) { - return false; - } - - $content = $fileinfo->getContents(); - if (!$content) { - return false; - } - - return $this->isAccepted($content); - } - - /** - * Converts string to regexp if necessary. - * - * @param string $str Pattern: string or regexp - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} diff --git a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php deleted file mode 100644 index 05d9535..0000000 --- a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Glob; - -/** - * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). - * - * @author Fabien Potencier - * - * @extends MultiplePcreFilterIterator - */ -class FilenameFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - return $this->isAccepted($this->current()->getFilename()); - } - - /** - * Converts glob to regexp. - * - * PCRE patterns are left unchanged. - * Glob strings are transformed with Glob::toRegex(). - * - * @param string $str Pattern: glob or regexp - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : Glob::toRegex($str); - } -} diff --git a/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/symfony/finder/Iterator/LazyIterator.php deleted file mode 100644 index 5b5806b..0000000 --- a/vendor/symfony/finder/Iterator/LazyIterator.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * @author Jérémy Derussé - * - * @internal - */ -class LazyIterator implements \IteratorAggregate -{ - private \Closure $iteratorFactory; - - public function __construct(callable $iteratorFactory) - { - $this->iteratorFactory = $iteratorFactory(...); - } - - public function getIterator(): \Traversable - { - yield from ($this->iteratorFactory)(); - } -} diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php deleted file mode 100644 index 82a9df3..0000000 --- a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ /dev/null @@ -1,111 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). - * - * @author Fabien Potencier - * - * @template-covariant TKey - * @template-covariant TValue - * - * @extends \FilterIterator - */ -abstract class MultiplePcreFilterIterator extends \FilterIterator -{ - protected $matchRegexps = []; - protected $noMatchRegexps = []; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param string[] $matchPatterns An array of patterns that need to match - * @param string[] $noMatchPatterns An array of patterns that need to not match - */ - public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) - { - foreach ($matchPatterns as $pattern) { - $this->matchRegexps[] = $this->toRegex($pattern); - } - - foreach ($noMatchPatterns as $pattern) { - $this->noMatchRegexps[] = $this->toRegex($pattern); - } - - parent::__construct($iterator); - } - - /** - * Checks whether the string is accepted by the regex filters. - * - * If there is no regexps defined in the class, this method will accept the string. - * Such case can be handled by child classes before calling the method if they want to - * apply a different behavior. - */ - protected function isAccepted(string $string): bool - { - // should at least not match one rule to exclude - foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $string)) { - return false; - } - } - - // should at least match one rule - if ($this->matchRegexps) { - foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $string)) { - return true; - } - } - - return false; - } - - // If there is no match rules, the file is accepted - return true; - } - - /** - * Checks whether the string is a regex. - */ - protected function isRegex(string $str): bool - { - $availableModifiers = 'imsxuADU'; - - if (\PHP_VERSION_ID >= 80200) { - $availableModifiers .= 'n'; - } - - if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { - $start = substr($m[1], 0, 1); - $end = substr($m[1], -1); - - if ($start === $end) { - return !preg_match('/[*?[:alnum:] \\\\]/', $start); - } - - foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { - if ($start === $delimiters[0] && $end === $delimiters[1]) { - return true; - } - } - } - - return false; - } - - /** - * Converts string into regexp. - */ - abstract protected function toRegex(string $str): string; -} diff --git a/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/symfony/finder/Iterator/PathFilterIterator.php deleted file mode 100644 index c6d5813..0000000 --- a/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ /dev/null @@ -1,56 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * PathFilterIterator filters files by path patterns (e.g. some/special/dir). - * - * @author Fabien Potencier - * @author Włodzimierz Gajda - * - * @extends MultiplePcreFilterIterator - */ -class PathFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $filename = $this->current()->getRelativePathname(); - - if ('\\' === \DIRECTORY_SEPARATOR) { - $filename = str_replace('\\', '/', $filename); - } - - return $this->isAccepted($filename); - } - - /** - * Converts strings to regexp. - * - * PCRE patterns are left unchanged. - * - * Default conversion: - * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' - * - * Use only / as directory separator (on Windows also). - * - * @param string $str Pattern: regexp or dirname - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php deleted file mode 100644 index c321aee..0000000 --- a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ /dev/null @@ -1,146 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Exception\AccessDeniedException; -use Symfony\Component\Finder\SplFileInfo; - -/** - * Extends the \RecursiveDirectoryIterator to support relative paths. - * - * @author Victor Berchet - * @extends \RecursiveDirectoryIterator - */ -class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator -{ - private bool $ignoreUnreadableDirs; - private ?bool $rewindable = null; - - // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations - private string $rootPath; - private string $subPath; - private string $directorySeparator = '/'; - - /** - * @throws \RuntimeException - */ - public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) - { - if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { - throw new \RuntimeException('This iterator only support returning current as fileinfo.'); - } - - parent::__construct($path, $flags); - $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; - $this->rootPath = $path; - if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { - $this->directorySeparator = \DIRECTORY_SEPARATOR; - } - } - - /** - * Return an instance of SplFileInfo with support for relative paths. - */ - public function current(): SplFileInfo - { - // the logic here avoids redoing the same work in all iterations - - if (!isset($this->subPath)) { - $this->subPath = $this->getSubPath(); - } - $subPathname = $this->subPath; - if ('' !== $subPathname) { - $subPathname .= $this->directorySeparator; - } - $subPathname .= $this->getFilename(); - - if ('/' !== $basePath = $this->rootPath) { - $basePath .= $this->directorySeparator; - } - - return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); - } - - public function hasChildren(bool $allowLinks = false): bool - { - $hasChildren = parent::hasChildren($allowLinks); - - if (!$hasChildren || !$this->ignoreUnreadableDirs) { - return $hasChildren; - } - - try { - parent::getChildren(); - - return true; - } catch (\UnexpectedValueException) { - // If directory is unreadable and finder is set to ignore it, skip children - return false; - } - } - - /** - * @throws AccessDeniedException - */ - public function getChildren(): \RecursiveDirectoryIterator - { - try { - $children = parent::getChildren(); - - if ($children instanceof self) { - // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore - $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; - - // performance optimization to avoid redoing the same work in all children - $children->rewindable = &$this->rewindable; - $children->rootPath = $this->rootPath; - } - - return $children; - } catch (\UnexpectedValueException $e) { - throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); - } - } - - /** - * Do nothing for non rewindable stream. - */ - public function rewind(): void - { - if (false === $this->isRewindable()) { - return; - } - - parent::rewind(); - } - - /** - * Checks if the stream is rewindable. - */ - public function isRewindable(): bool - { - if (null !== $this->rewindable) { - return $this->rewindable; - } - - if (false !== $stream = @opendir($this->getPath())) { - $infos = stream_get_meta_data($stream); - closedir($stream); - - if ($infos['seekable']) { - return $this->rewindable = true; - } - } - - return $this->rewindable = false; - } -} diff --git a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php deleted file mode 100644 index 925830a..0000000 --- a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\NumberComparator; - -/** - * SizeRangeFilterIterator filters out files that are not in the given size range. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class SizeRangeFilterIterator extends \FilterIterator -{ - private array $comparators = []; - - /** - * @param \Iterator $iterator - * @param NumberComparator[] $comparators - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - if (!$fileinfo->isFile()) { - return true; - } - - $filesize = $fileinfo->getSize(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filesize)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php deleted file mode 100644 index 1c663e2..0000000 --- a/vendor/symfony/finder/Iterator/SortableIterator.php +++ /dev/null @@ -1,101 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * SortableIterator applies a sort on a given Iterator. - * - * @author Fabien Potencier - * - * @implements \IteratorAggregate - */ -class SortableIterator implements \IteratorAggregate -{ - public const SORT_BY_NONE = 0; - public const SORT_BY_NAME = 1; - public const SORT_BY_TYPE = 2; - public const SORT_BY_ACCESSED_TIME = 3; - public const SORT_BY_CHANGED_TIME = 4; - public const SORT_BY_MODIFIED_TIME = 5; - public const SORT_BY_NAME_NATURAL = 6; - - /** @var \Traversable $iterator */ - private \Traversable $iterator; - private \Closure|int $sort; - - /** - * @param \Traversable $iterator - * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) - * - * @throws \InvalidArgumentException - */ - public function __construct(\Traversable $iterator, int|callable $sort, bool $reverseOrder = false) - { - $this->iterator = $iterator; - $order = $reverseOrder ? -1 : 1; - - if (self::SORT_BY_NAME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_NAME_NATURAL === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_TYPE === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - if ($a->isDir() && $b->isFile()) { - return -$order; - } elseif ($a->isFile() && $b->isDir()) { - return $order; - } - - return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getATime() - $b->getATime()); - }; - } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getCTime() - $b->getCTime()); - }; - } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getMTime() - $b->getMTime()); - }; - } elseif (self::SORT_BY_NONE === $sort) { - $this->sort = $order; - } elseif (\is_callable($sort)) { - $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); - } else { - throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); - } - } - - public function getIterator(): \Traversable - { - if (1 === $this->sort) { - return $this->iterator; - } - - $array = iterator_to_array($this->iterator, true); - - if (-1 === $this->sort) { - $array = array_reverse($array); - } else { - uasort($array, $this->sort); - } - - return new \ArrayIterator($array); - } -} diff --git a/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php deleted file mode 100644 index 29fc2d9..0000000 --- a/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +++ /dev/null @@ -1,178 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Gitignore; - -/** - * @extends \FilterIterator - */ -final class VcsIgnoredFilterIterator extends \FilterIterator -{ - /** - * @var string - */ - private $baseDir; - - /** - * @var array - */ - private $gitignoreFilesCache = []; - - /** - * @var array - */ - private $ignoredPathsCache = []; - - /** - * @param \Iterator $iterator - */ - public function __construct(\Iterator $iterator, string $baseDir) - { - $this->baseDir = $this->normalizePath($baseDir); - - foreach ($this->parentDirectoriesUpwards($this->baseDir) as $parentDirectory) { - if (@is_dir("{$parentDirectory}/.git")) { - $this->baseDir = $parentDirectory; - break; - } - } - - parent::__construct($iterator); - } - - public function accept(): bool - { - $file = $this->current(); - - $fileRealPath = $this->normalizePath($file->getRealPath()); - - return !$this->isIgnored($fileRealPath); - } - - private function isIgnored(string $fileRealPath): bool - { - if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { - $fileRealPath .= '/'; - } - - if (isset($this->ignoredPathsCache[$fileRealPath])) { - return $this->ignoredPathsCache[$fileRealPath]; - } - - $ignored = false; - - foreach ($this->parentDirectoriesDownwards($fileRealPath) as $parentDirectory) { - if ($this->isIgnored($parentDirectory)) { - // rules in ignored directories are ignored, no need to check further. - break; - } - - $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); - - if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { - continue; - } - - [$exclusionRegex, $inclusionRegex] = $regexps; - - if (preg_match($exclusionRegex, $fileRelativePath)) { - $ignored = true; - - continue; - } - - if (preg_match($inclusionRegex, $fileRelativePath)) { - $ignored = false; - } - } - - return $this->ignoredPathsCache[$fileRealPath] = $ignored; - } - - /** - * @return list - */ - private function parentDirectoriesUpwards(string $from): array - { - $parentDirectories = []; - - $parentDirectory = $from; - - while (true) { - $newParentDirectory = \dirname($parentDirectory); - - // dirname('/') = '/' - if ($newParentDirectory === $parentDirectory) { - break; - } - - $parentDirectories[] = $parentDirectory = $newParentDirectory; - } - - return $parentDirectories; - } - - private function parentDirectoriesUpTo(string $from, string $upTo): array - { - return array_filter( - $this->parentDirectoriesUpwards($from), - static function (string $directory) use ($upTo): bool { - return str_starts_with($directory, $upTo); - } - ); - } - - /** - * @return list - */ - private function parentDirectoriesDownwards(string $fileRealPath): array - { - return array_reverse( - $this->parentDirectoriesUpTo($fileRealPath, $this->baseDir) - ); - } - - /** - * @return array{0: string, 1: string}|null - */ - private function readGitignoreFile(string $path): ?array - { - if (\array_key_exists($path, $this->gitignoreFilesCache)) { - return $this->gitignoreFilesCache[$path]; - } - - if (!file_exists($path)) { - return $this->gitignoreFilesCache[$path] = null; - } - - if (!is_file($path) || !is_readable($path)) { - throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); - } - - $gitignoreFileContent = file_get_contents($path); - - return $this->gitignoreFilesCache[$path] = [ - Gitignore::toRegex($gitignoreFileContent), - Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), - ]; - } - - private function normalizePath(string $path): string - { - if ('\\' === \DIRECTORY_SEPARATOR) { - return str_replace('\\', '/', $path); - } - - return $path; - } -} diff --git a/vendor/symfony/finder/LICENSE b/vendor/symfony/finder/LICENSE deleted file mode 100644 index 88bf75b..0000000 --- a/vendor/symfony/finder/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/vendor/symfony/finder/README.md b/vendor/symfony/finder/README.md deleted file mode 100644 index 22bdeb9..0000000 --- a/vendor/symfony/finder/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Finder Component -================ - -The Finder component finds files and directories via an intuitive fluent -interface. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/finder.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/finder/SplFileInfo.php b/vendor/symfony/finder/SplFileInfo.php deleted file mode 100644 index 867e8e8..0000000 --- a/vendor/symfony/finder/SplFileInfo.php +++ /dev/null @@ -1,82 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Extends \SplFileInfo to support relative paths. - * - * @author Fabien Potencier - */ -class SplFileInfo extends \SplFileInfo -{ - private string $relativePath; - private string $relativePathname; - - /** - * @param string $file The file name - * @param string $relativePath The relative path - * @param string $relativePathname The relative path name - */ - public function __construct(string $file, string $relativePath, string $relativePathname) - { - parent::__construct($file); - $this->relativePath = $relativePath; - $this->relativePathname = $relativePathname; - } - - /** - * Returns the relative path. - * - * This path does not contain the file name. - */ - public function getRelativePath(): string - { - return $this->relativePath; - } - - /** - * Returns the relative path name. - * - * This path contains the file name. - */ - public function getRelativePathname(): string - { - return $this->relativePathname; - } - - public function getFilenameWithoutExtension(): string - { - $filename = $this->getFilename(); - - return pathinfo($filename, \PATHINFO_FILENAME); - } - - /** - * Returns the contents of the file. - * - * @throws \RuntimeException - */ - public function getContents(): string - { - set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); - try { - $content = file_get_contents($this->getPathname()); - } finally { - restore_error_handler(); - } - if (false === $content) { - throw new \RuntimeException($error); - } - - return $content; - } -} diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json deleted file mode 100644 index 06d129c..0000000 --- a/vendor/symfony/finder/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "symfony/finder", - "type": "library", - "description": "Finds files and directories via an intuitive fluent interface", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/symfony/polyfill-ctype/Ctype.php deleted file mode 100644 index ba75a2c..0000000 --- a/vendor/symfony/polyfill-ctype/Ctype.php +++ /dev/null @@ -1,232 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Ctype; - -/** - * Ctype implementation through regex. - * - * @internal - * - * @author Gert de Pagter - */ -final class Ctype -{ - /** - * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. - * - * @see https://php.net/ctype-alnum - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alnum($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is a letter, FALSE otherwise. - * - * @see https://php.net/ctype-alpha - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alpha($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); - } - - /** - * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. - * - * @see https://php.net/ctype-cntrl - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_cntrl($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); - } - - /** - * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. - * - * @see https://php.net/ctype-digit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_digit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. - * - * @see https://php.net/ctype-graph - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_graph($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); - } - - /** - * Returns TRUE if every character in text is a lowercase letter. - * - * @see https://php.net/ctype-lower - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_lower($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); - } - - /** - * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. - * - * @see https://php.net/ctype-print - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_print($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); - } - - /** - * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. - * - * @see https://php.net/ctype-punct - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_punct($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); - } - - /** - * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. - * - * @see https://php.net/ctype-space - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_space($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); - } - - /** - * Returns TRUE if every character in text is an uppercase letter. - * - * @see https://php.net/ctype-upper - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_upper($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); - } - - /** - * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. - * - * @see https://php.net/ctype-xdigit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_xdigit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); - } - - /** - * Converts integers to their char versions according to normal ctype behaviour, if needed. - * - * If an integer between -128 and 255 inclusive is provided, - * it is interpreted as the ASCII value of a single character - * (negative values have 256 added in order to allow characters in the Extended ASCII range). - * Any other integer is interpreted as a string containing the decimal digits of the integer. - * - * @param mixed $int - * @param string $function - * - * @return mixed - */ - private static function convert_int_to_char_for_ctype($int, $function) - { - if (!\is_int($int)) { - return $int; - } - - if ($int < -128 || $int > 255) { - return (string) $int; - } - - if (\PHP_VERSION_ID >= 80100) { - @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); - } - - if ($int < 0) { - $int += 256; - } - - return \chr($int); - } -} diff --git a/vendor/symfony/polyfill-ctype/LICENSE b/vendor/symfony/polyfill-ctype/LICENSE deleted file mode 100644 index 3f853aa..0000000 --- a/vendor/symfony/polyfill-ctype/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -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/vendor/symfony/polyfill-ctype/README.md b/vendor/symfony/polyfill-ctype/README.md deleted file mode 100644 index b144d03..0000000 --- a/vendor/symfony/polyfill-ctype/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Ctype -======================== - -This component provides `ctype_*` functions to users who run php versions without the ctype extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/symfony/polyfill-ctype/bootstrap.php deleted file mode 100644 index d54524b..0000000 --- a/vendor/symfony/polyfill-ctype/bootstrap.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (\PHP_VERSION_ID >= 80000) { - return require __DIR__.'/bootstrap80.php'; -} - -if (!function_exists('ctype_alnum')) { - function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit($text) { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph($text) { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower($text) { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print($text) { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct($text) { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space($text) { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper($text) { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } -} diff --git a/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/symfony/polyfill-ctype/bootstrap80.php deleted file mode 100644 index ab2f861..0000000 --- a/vendor/symfony/polyfill-ctype/bootstrap80.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (!function_exists('ctype_alnum')) { - function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } -} diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json deleted file mode 100644 index ee5c931..0000000 --- a/vendor/symfony/polyfill-ctype/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/polyfill-ctype", - "type": "library", - "description": "Symfony polyfill for ctype functions", - "keywords": ["polyfill", "compatibility", "portable", "ctype"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/vendor/symfony/yaml/CHANGELOG.md b/vendor/symfony/yaml/CHANGELOG.md deleted file mode 100644 index 3fb33a8..0000000 --- a/vendor/symfony/yaml/CHANGELOG.md +++ /dev/null @@ -1,242 +0,0 @@ -CHANGELOG -========= - -6.1 ---- - - * In cases where it will likely improve readability, strings containing single quotes will be double-quoted - -5.4 ---- - - * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` - option to exclude one or more specific files from multiple file list - * Allow negatable for the parse tags option with `--no-parse-tags` - -5.3 ---- - - * Added `github` format support & autodetection to render errors as annotations - when running the YAML linter command in a Github Action environment. - -5.1.0 ------ - - * Added support for parsing numbers prefixed with `0o` as octal numbers. - * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` - so that they are parsed as octal numbers. - - Before: - - ```yaml - Yaml::parse('072'); - ``` - - After: - - ```yaml - Yaml::parse('0o72'); - ``` - - * Added `yaml-lint` binary. - * Deprecated using the `!php/object` and `!php/const` tags without a value. - -5.0.0 ------ - - * Removed support for mappings inside multi-line strings. - * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.4.0 ------ - - * Added support for parsing the inline notation spanning multiple lines. - * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. - * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.3.0 ------ - - * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. - -4.2.0 ------ - - * added support for multiple files or directories in `LintCommand` - -4.0.0 ------ - - * The behavior of the non-specific tag `!` is changed and now forces - non-evaluating your values. - * complex mappings will throw a `ParseException` - * support for the comma as a group separator for floats has been dropped, use - the underscore instead - * support for the `!!php/object` tag has been dropped, use the `!php/object` - tag instead - * duplicate mapping keys throw a `ParseException` - * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` - flag to cast them to strings - * `%` at the beginning of an unquoted string throw a `ParseException` - * mappings with a colon (`:`) that is not followed by a whitespace throw a - `ParseException` - * the `Dumper::setIndentation()` method has been removed - * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, - `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of - the parser and dumper is no longer supported, pass bitmask flags instead - * the constructor arguments of the `Parser` class have been removed - * the `Inline` class is internal and no longer part of the BC promise - * removed support for the `!str` tag, use the `!!str` tag instead - * added support for tagged scalars. - - ```yml - Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); - // returns TaggedValue('foo', 'bar'); - ``` - -3.4.0 ------ - - * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method - - * the `Dumper`, `Parser`, and `Yaml` classes are marked as final - - * Deprecated the `!php/object:` tag which will be replaced by the - `!php/object` tag (without the colon) in 4.0. - - * Deprecated the `!php/const:` tag which will be replaced by the - `!php/const` tag (without the colon) in 4.0. - - * Support for the `!str` tag is deprecated, use the `!!str` tag instead. - - * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. - It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. - -3.3.0 ------ - - * Starting an unquoted string with a question mark followed by a space is - deprecated and will throw a `ParseException` in Symfony 4.0. - - * Deprecated support for implicitly parsing non-string mapping keys as strings. - Mapping keys that are no strings will lead to a `ParseException` in Symfony - 4.0. Use quotes to opt-in for keys to be parsed as strings. - - Before: - - ```php - $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); - ``` - -3.0.0 ------ - - * Yaml::parse() now throws an exception when a blackslash is not escaped - in double-quoted strings - -2.8.0 ------ - - * Deprecated usage of a colon in an unquoted mapping value - * Deprecated usage of @, \`, | and > at the beginning of an unquoted string - * When surrounding strings with double-quotes, you must now escape `\` characters. Not - escaping those characters (when surrounded by double-quotes) is deprecated. - - Before: - - ```yml - class: "Foo\Var" - ``` - - After: - - ```yml - class: "Foo\\Var" - ``` - -2.1.0 ------ - - * Yaml::parse() does not evaluate loaded files as PHP files by default - anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/vendor/symfony/yaml/Command/LintCommand.php b/vendor/symfony/yaml/Command/LintCommand.php deleted file mode 100644 index 66eb250..0000000 --- a/vendor/symfony/yaml/Command/LintCommand.php +++ /dev/null @@ -1,279 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Command; - -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\CI\GithubActionReporter; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Completion\CompletionInput; -use Symfony\Component\Console\Completion\CompletionSuggestions; -use Symfony\Component\Console\Exception\InvalidArgumentException; -use Symfony\Component\Console\Exception\RuntimeException; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Style\SymfonyStyle; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Parser; -use Symfony\Component\Yaml\Yaml; - -/** - * Validates YAML files syntax and outputs encountered errors. - * - * @author Grégoire Pineau - * @author Robin Chalas - */ -#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')] -class LintCommand extends Command -{ - private Parser $parser; - private ?string $format = null; - private bool $displayCorrectFiles; - private ?\Closure $directoryIteratorProvider; - private ?\Closure $isReadableProvider; - - public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) - { - parent::__construct($name); - - $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); - $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') - ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format') - ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude') - ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null) - ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT -the first encountered syntax error. - -You can validates YAML contents passed from STDIN: - - cat filename | php %command.full_name% - - -You can also validate the syntax of a file: - - php %command.full_name% filename - -Or of a whole directory: - - php %command.full_name% dirname - php %command.full_name% dirname --format=json - -You can also exclude one or more specific files: - - php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml" - -EOF - ) - ; - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $io = new SymfonyStyle($input, $output); - $filenames = (array) $input->getArgument('filename'); - $excludes = $input->getOption('exclude'); - $this->format = $input->getOption('format'); - $flags = $input->getOption('parse-tags'); - - if ('github' === $this->format && !class_exists(GithubActionReporter::class)) { - throw new \InvalidArgumentException('The "github" format is only available since "symfony/console" >= 5.3.'); - } - - if (null === $this->format) { - // Autodetect format according to CI environment - $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt'; - } - - $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0; - - $this->displayCorrectFiles = $output->isVerbose(); - - if (['-'] === $filenames) { - return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); - } - - if (!$filenames) { - throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); - } - - $filesInfo = []; - foreach ($filenames as $filename) { - if (!$this->isReadable($filename)) { - throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); - } - - foreach ($this->getFiles($filename) as $file) { - if (!\in_array($file->getPathname(), $excludes, true)) { - $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); - } - } - } - - return $this->display($io, $filesInfo); - } - - private function validate(string $content, int $flags, string $file = null) - { - $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { - if (\E_USER_DEPRECATED === $level) { - throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); - } - - return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; - }); - - try { - $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); - } catch (ParseException $e) { - return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; - } finally { - restore_error_handler(); - } - - return ['file' => $file, 'valid' => true]; - } - - private function display(SymfonyStyle $io, array $files): int - { - return match ($this->format) { - 'txt' => $this->displayTxt($io, $files), - 'json' => $this->displayJson($io, $files), - 'github' => $this->displayTxt($io, $files, true), - default => throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)), - }; - } - - private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int - { - $countFiles = \count($filesInfo); - $erroredFiles = 0; - $suggestTagOption = false; - - if ($errorAsGithubAnnotations) { - $githubReporter = new GithubActionReporter($io); - } - - foreach ($filesInfo as $info) { - if ($info['valid'] && $this->displayCorrectFiles) { - $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); - } elseif (!$info['valid']) { - ++$erroredFiles; - $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); - $io->text(sprintf(' >> %s', $info['message'])); - - if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) { - $suggestTagOption = true; - } - - if ($errorAsGithubAnnotations) { - $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']); - } - } - } - - if (0 === $erroredFiles) { - $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); - } else { - $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); - } - - return min($erroredFiles, 1); - } - - private function displayJson(SymfonyStyle $io, array $filesInfo): int - { - $errors = 0; - - array_walk($filesInfo, function (&$v) use (&$errors) { - $v['file'] = (string) $v['file']; - if (!$v['valid']) { - ++$errors; - } - - if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) { - $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; - } - }); - - $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); - - return min($errors, 1); - } - - private function getFiles(string $fileOrDirectory): iterable - { - if (is_file($fileOrDirectory)) { - yield new \SplFileInfo($fileOrDirectory); - - return; - } - - foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { - if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { - continue; - } - - yield $file; - } - } - - private function getParser(): Parser - { - return $this->parser ??= new Parser(); - } - - private function getDirectoryIterator(string $directory): iterable - { - $default = function ($directory) { - return new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - }; - - if (null !== $this->directoryIteratorProvider) { - return ($this->directoryIteratorProvider)($directory, $default); - } - - return $default($directory); - } - - private function isReadable(string $fileOrDirectory): bool - { - $default = function ($fileOrDirectory) { - return is_readable($fileOrDirectory); - }; - - if (null !== $this->isReadableProvider) { - return ($this->isReadableProvider)($fileOrDirectory, $default); - } - - return $default($fileOrDirectory); - } - - public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void - { - if ($input->mustSuggestOptionValuesFor('format')) { - $suggestions->suggestValues(['txt', 'json', 'github']); - } - } -} diff --git a/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php deleted file mode 100644 index 56979c7..0000000 --- a/vendor/symfony/yaml/Dumper.php +++ /dev/null @@ -1,138 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Dumper dumps PHP variables to YAML strings. - * - * @author Fabien Potencier - * - * @final - */ -class Dumper -{ - /** - * The amount of spaces to use for indentation of nested nodes. - */ - private int $indentation; - - public function __construct(int $indentation = 4) - { - if ($indentation < 1) { - throw new \InvalidArgumentException('The indentation must be greater than zero.'); - } - - $this->indentation = $indentation; - } - - /** - * Dumps a PHP value to YAML. - * - * @param mixed $input The PHP value - * @param int $inline The level where you switch to inline YAML - * @param int $indent The level of indentation (used internally) - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - */ - public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string - { - $output = ''; - $prefix = $indent ? str_repeat(' ', $indent) : ''; - $dumpObjectAsInlineMap = true; - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $input); - } - - if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { - $output .= $prefix.Inline::dump($input, $flags); - } else { - $dumpAsMap = Inline::isHash($input); - - foreach ($input as $key => $value) { - if ('' !== $output && "\n" !== $output[-1]) { - $output .= "\n"; - } - - if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) { - // If the first line starts with a space character, the spec requires a blockIndicationIndicator - // http://www.yaml.org/spec/1.2/spec.html#id2793979 - $blockIndentationIndicator = str_starts_with($value, ' ') ? (string) $this->indentation : ''; - - if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) { - $blockChompingIndicator = '+'; - } elseif ("\n" === $value[-1]) { - $blockChompingIndicator = ''; - } else { - $blockChompingIndicator = '-'; - } - - $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator); - - foreach (explode("\n", $value) as $row) { - if ('' === $row) { - $output .= "\n"; - } else { - $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); - } - } - - continue; - } - - if ($value instanceof TaggedValue) { - $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); - - if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) { - // If the first line starts with a space character, the spec requires a blockIndicationIndicator - // http://www.yaml.org/spec/1.2/spec.html#id2793979 - $blockIndentationIndicator = str_starts_with($value->getValue(), ' ') ? (string) $this->indentation : ''; - $output .= sprintf(' |%s', $blockIndentationIndicator); - - foreach (explode("\n", $value->getValue()) as $row) { - $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); - } - - continue; - } - - if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { - $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; - } else { - $output .= "\n"; - $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); - } - - continue; - } - - $dumpObjectAsInlineMap = true; - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $value); - } - - $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); - - $output .= sprintf('%s%s%s%s', - $prefix, - $dumpAsMap ? Inline::dump($key, $flags).':' : '-', - $willBeInlined ? ' ' : "\n", - $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) - ).($willBeInlined ? "\n" : ''); - } - } - - return $output; - } -} diff --git a/vendor/symfony/yaml/Escaper.php b/vendor/symfony/yaml/Escaper.php deleted file mode 100644 index e8090d8..0000000 --- a/vendor/symfony/yaml/Escaper.php +++ /dev/null @@ -1,95 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -/** - * Escaper encapsulates escaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - * - * @internal - */ -class Escaper -{ - // Characters that would cause a dumped string to require double quoting. - public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; - - // Mapping arrays for escaping a double quoted string. The backslash is - // first to ensure proper escaping because str_replace operates iteratively - // on the input arrays. This ordering of the characters avoids the use of strtr, - // which performs more slowly. - private const ESCAPEES = ['\\', '\\\\', '\\"', '"', - "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", - "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", - "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", - "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", - "\x7f", - "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", - ]; - private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"', - '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', - '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', - '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', - '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', - '\\x7f', - '\\N', '\\_', '\\L', '\\P', - ]; - - /** - * Determines if a PHP value would require double quoting in YAML. - * - * @param string $value A PHP value - */ - public static function requiresDoubleQuoting(string $value): bool - { - return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); - } - - /** - * Escapes and surrounds a PHP value with double quotes. - * - * @param string $value A PHP value - */ - public static function escapeWithDoubleQuotes(string $value): string - { - return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value)); - } - - /** - * Determines if a PHP value would require single quoting in YAML. - * - * @param string $value A PHP value - */ - public static function requiresSingleQuoting(string $value): bool - { - // Determines if a PHP value is entirely composed of a value that would - // require single quoting in YAML. - if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { - return true; - } - - // Determines if the PHP value contains any single characters that would - // cause it to require single quoting in YAML. - return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value); - } - - /** - * Escapes and surrounds a PHP value with single quotes. - * - * @param string $value A PHP value - */ - public static function escapeWithSingleQuotes(string $value): string - { - return sprintf("'%s'", str_replace('\'', '\'\'', $value)); - } -} diff --git a/vendor/symfony/yaml/Exception/DumpException.php b/vendor/symfony/yaml/Exception/DumpException.php deleted file mode 100644 index cce972f..0000000 --- a/vendor/symfony/yaml/Exception/DumpException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during dumping. - * - * @author Fabien Potencier - */ -class DumpException extends RuntimeException -{ -} diff --git a/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/symfony/yaml/Exception/ExceptionInterface.php deleted file mode 100644 index 9091316..0000000 --- a/vendor/symfony/yaml/Exception/ExceptionInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception interface for all exceptions thrown by the component. - * - * @author Fabien Potencier - */ -interface ExceptionInterface extends \Throwable -{ -} diff --git a/vendor/symfony/yaml/Exception/ParseException.php b/vendor/symfony/yaml/Exception/ParseException.php deleted file mode 100644 index 07c59b9..0000000 --- a/vendor/symfony/yaml/Exception/ParseException.php +++ /dev/null @@ -1,126 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Fabien Potencier - */ -class ParseException extends RuntimeException -{ - private ?string $parsedFile; - private int $parsedLine; - private ?string $snippet; - private string $rawMessage; - - /** - * @param string $message The error message - * @param int $parsedLine The line where the error occurred - * @param string|null $snippet The snippet of code near the problem - * @param string|null $parsedFile The file name where the error occurred - */ - public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) - { - $this->parsedFile = $parsedFile; - $this->parsedLine = $parsedLine; - $this->snippet = $snippet; - $this->rawMessage = $message; - - $this->updateRepr(); - - parent::__construct($this->message, 0, $previous); - } - - /** - * Gets the snippet of code near the error. - */ - public function getSnippet(): string - { - return $this->snippet; - } - - /** - * Sets the snippet of code near the error. - */ - public function setSnippet(string $snippet) - { - $this->snippet = $snippet; - - $this->updateRepr(); - } - - /** - * Gets the filename where the error occurred. - * - * This method returns null if a string is parsed. - */ - public function getParsedFile(): string - { - return $this->parsedFile; - } - - /** - * Sets the filename where the error occurred. - */ - public function setParsedFile(string $parsedFile) - { - $this->parsedFile = $parsedFile; - - $this->updateRepr(); - } - - /** - * Gets the line where the error occurred. - */ - public function getParsedLine(): int - { - return $this->parsedLine; - } - - /** - * Sets the line where the error occurred. - */ - public function setParsedLine(int $parsedLine) - { - $this->parsedLine = $parsedLine; - - $this->updateRepr(); - } - - private function updateRepr() - { - $this->message = $this->rawMessage; - - $dot = false; - if (str_ends_with($this->message, '.')) { - $this->message = substr($this->message, 0, -1); - $dot = true; - } - - if (null !== $this->parsedFile) { - $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); - } - - if ($this->parsedLine >= 0) { - $this->message .= sprintf(' at line %d', $this->parsedLine); - } - - if ($this->snippet) { - $this->message .= sprintf(' (near "%s")', $this->snippet); - } - - if ($dot) { - $this->message .= '.'; - } - } -} diff --git a/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/symfony/yaml/Exception/RuntimeException.php deleted file mode 100644 index 3f36b73..0000000 --- a/vendor/symfony/yaml/Exception/RuntimeException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Romain Neutron - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php deleted file mode 100644 index 1a862b7..0000000 --- a/vendor/symfony/yaml/Inline.php +++ /dev/null @@ -1,779 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\DumpException; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Inline implements a YAML parser/dumper for the YAML inline syntax. - * - * @author Fabien Potencier - * - * @internal - */ -class Inline -{ - public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; - - public static int $parsedLineNumber = -1; - public static ?string $parsedFilename = null; - - private static bool $exceptionOnInvalidType = false; - private static bool $objectSupport = false; - private static bool $objectForMap = false; - private static bool $constantSupport = false; - - public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) - { - self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); - self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); - self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); - self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); - self::$parsedFilename = $parsedFilename; - - if (null !== $parsedLineNumber) { - self::$parsedLineNumber = $parsedLineNumber; - } - } - - /** - * Converts a YAML string to a PHP value. - * - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * @param array $references Mapping of variable names to values - * - * @throws ParseException - */ - public static function parse(string $value = null, int $flags = 0, array &$references = []): mixed - { - self::initialize($flags); - - $value = trim($value); - - if ('' === $value) { - return ''; - } - - $i = 0; - $tag = self::parseTag($value, $i, $flags); - switch ($value[$i]) { - case '[': - $result = self::parseSequence($value, $flags, $i, $references); - ++$i; - break; - case '{': - $result = self::parseMapping($value, $flags, $i, $references); - ++$i; - break; - default: - $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references); - } - - // some comments are allowed at the end - if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) { - throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if (null !== $tag && '' !== $tag) { - return new TaggedValue($tag, $result); - } - - return $result; - } - - /** - * Dumps a given PHP variable to a YAML string. - * - * @param mixed $value The PHP variable to convert - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - * - * @throws DumpException When trying to dump PHP resource - */ - public static function dump(mixed $value, int $flags = 0): string - { - switch (true) { - case \is_resource($value): - if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { - throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); - } - - return self::dumpNull($flags); - case $value instanceof \DateTimeInterface: - return $value->format('c'); - case $value instanceof \UnitEnum: - return sprintf('!php/const %s::%s', \get_class($value), $value->name); - case \is_object($value): - if ($value instanceof TaggedValue) { - return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); - } - - if (Yaml::DUMP_OBJECT & $flags) { - return '!php/object '.self::dump(serialize($value)); - } - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { - $output = []; - - foreach ($value as $key => $val) { - $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); - } - - return sprintf('{ %s }', implode(', ', $output)); - } - - if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { - throw new DumpException('Object support when dumping a YAML file has been disabled.'); - } - - return self::dumpNull($flags); - case \is_array($value): - return self::dumpArray($value, $flags); - case null === $value: - return self::dumpNull($flags); - case true === $value: - return 'true'; - case false === $value: - return 'false'; - case \is_int($value): - return $value; - case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"): - $locale = setlocale(\LC_NUMERIC, 0); - if (false !== $locale) { - setlocale(\LC_NUMERIC, 'C'); - } - if (\is_float($value)) { - $repr = (string) $value; - if (is_infinite($value)) { - $repr = str_ireplace('INF', '.Inf', $repr); - } elseif (floor($value) == $value && $repr == $value) { - // Preserve float data type since storing a whole number will result in integer value. - if (!str_contains($repr, 'E')) { - $repr = $repr.'.0'; - } - } - } else { - $repr = \is_string($value) ? "'$value'" : (string) $value; - } - if (false !== $locale) { - setlocale(\LC_NUMERIC, $locale); - } - - return $repr; - case '' == $value: - return "''"; - case self::isBinaryString($value): - return '!!binary '.base64_encode($value); - case Escaper::requiresDoubleQuoting($value): - return Escaper::escapeWithDoubleQuotes($value); - case Escaper::requiresSingleQuoting($value): - $singleQuoted = Escaper::escapeWithSingleQuotes($value); - if (!str_contains($value, "'")) { - return $singleQuoted; - } - // Attempt double-quoting the string instead to see if it's more efficient. - $doubleQuoted = Escaper::escapeWithDoubleQuotes($value); - - return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted; - case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): - case Parser::preg_match(self::getHexRegex(), $value): - case Parser::preg_match(self::getTimestampRegex(), $value): - return Escaper::escapeWithSingleQuotes($value); - default: - return $value; - } - } - - /** - * Check if given array is hash or just normal indexed array. - */ - public static function isHash(array|\ArrayObject|\stdClass $value): bool - { - if ($value instanceof \stdClass || $value instanceof \ArrayObject) { - return true; - } - - $expectedKey = 0; - - foreach ($value as $key => $val) { - if ($key !== $expectedKey++) { - return true; - } - } - - return false; - } - - /** - * Dumps a PHP array to a YAML string. - * - * @param array $value The PHP array to dump - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - */ - private static function dumpArray(array $value, int $flags): string - { - // array - if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { - $output = []; - foreach ($value as $val) { - $output[] = self::dump($val, $flags); - } - - return sprintf('[%s]', implode(', ', $output)); - } - - // hash - $output = []; - foreach ($value as $key => $val) { - $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); - } - - return sprintf('{ %s }', implode(', ', $output)); - } - - private static function dumpNull(int $flags): string - { - if (Yaml::DUMP_NULL_AS_TILDE & $flags) { - return '~'; - } - - return 'null'; - } - - /** - * Parses a YAML scalar. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null): mixed - { - if (\in_array($scalar[$i], ['"', "'"], true)) { - // quoted scalar - $isQuoted = true; - $output = self::parseQuotedScalar($scalar, $i); - - if (null !== $delimiters) { - $tmp = ltrim(substr($scalar, $i), " \n"); - if ('' === $tmp) { - throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - if (!\in_array($tmp[0], $delimiters)) { - throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - } - } else { - // "normal" string - $isQuoted = false; - - if (!$delimiters) { - $output = substr($scalar, $i); - $i += \strlen($output); - - // remove comments - if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) { - $output = substr($output, 0, $match[0][1]); - } - } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { - $output = $match[1]; - $i += \strlen($output); - $output = trim($output); - } else { - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) - if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { - throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); - } - - if ($evaluate) { - $output = self::evaluateScalar($output, $flags, $references, $isQuoted); - } - } - - return $output; - } - - /** - * Parses a YAML quoted scalar. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseQuotedScalar(string $scalar, int &$i = 0): string - { - if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - $output = substr($match[0], 1, -1); - - $unescaper = new Unescaper(); - if ('"' == $scalar[$i]) { - $output = $unescaper->unescapeDoubleQuotedString($output); - } else { - $output = $unescaper->unescapeSingleQuotedString($output); - } - - $i += \strlen($match[0]); - - return $output; - } - - /** - * Parses a YAML sequence. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array - { - $output = []; - $len = \strlen($sequence); - ++$i; - - // [foo, bar, ...] - while ($i < $len) { - if (']' === $sequence[$i]) { - return $output; - } - if (',' === $sequence[$i] || ' ' === $sequence[$i]) { - ++$i; - - continue; - } - - $tag = self::parseTag($sequence, $i, $flags); - switch ($sequence[$i]) { - case '[': - // nested sequence - $value = self::parseSequence($sequence, $flags, $i, $references); - break; - case '{': - // nested mapping - $value = self::parseMapping($sequence, $flags, $i, $references); - break; - default: - $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); - - // the value can be an array if a reference has been resolved to an array var - if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { - // embedded mapping? - try { - $pos = 0; - $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); - } catch (\InvalidArgumentException) { - // no, it's not - } - } - - if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { - $references[$matches['ref']] = $matches['value']; - $value = $matches['value']; - } - - --$i; - } - - if (null !== $tag && '' !== $tag) { - $value = new TaggedValue($tag, $value); - } - - $output[] = $value; - - ++$i; - } - - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - /** - * Parses a YAML mapping. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass - { - $output = []; - $len = \strlen($mapping); - ++$i; - $allowOverwrite = false; - - // {foo: bar, bar:foo, ...} - while ($i < $len) { - switch ($mapping[$i]) { - case ' ': - case ',': - case "\n": - ++$i; - continue 2; - case '}': - if (self::$objectForMap) { - return (object) $output; - } - - return $output; - } - - // key - $offsetBeforeKeyParsing = $i; - $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); - $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); - - if ($offsetBeforeKeyParsing === $i) { - throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); - } - - if ('!php/const' === $key) { - $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false); - $key = self::evaluateScalar($key, $flags); - } - - if (false === $i = strpos($mapping, ':', $i)) { - break; - } - - if (!$isKeyQuoted) { - $evaluatedKey = self::evaluateScalar($key, $flags, $references); - - if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { - throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); - } - } - - if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { - throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); - } - - if ('<<' === $key) { - $allowOverwrite = true; - } - - while ($i < $len) { - if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { - ++$i; - - continue; - } - - $tag = self::parseTag($mapping, $i, $flags); - switch ($mapping[$i]) { - case '[': - // nested sequence - $value = self::parseSequence($mapping, $flags, $i, $references); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - foreach ($value as $parsedValue) { - $output += $parsedValue; - } - } elseif ($allowOverwrite || !isset($output[$key])) { - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - break; - case '{': - // nested mapping - $value = self::parseMapping($mapping, $flags, $i, $references); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - $output += $value; - } elseif ($allowOverwrite || !isset($output[$key])) { - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - break; - default: - $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - $output += $value; - } elseif ($allowOverwrite || !isset($output[$key])) { - if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { - $references[$matches['ref']] = $matches['value']; - $value = $matches['value']; - } - - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - --$i; - } - ++$i; - - continue 2; - } - } - - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - /** - * Evaluates scalars and replaces magic values. - * - * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved - */ - private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null): mixed - { - $isQuotedString = false; - $scalar = trim($scalar); - - if (str_starts_with($scalar, '*')) { - if (false !== $pos = strpos($scalar, '#')) { - $value = substr($scalar, 1, $pos - 2); - } else { - $value = substr($scalar, 1); - } - - // an unquoted * - if (false === $value || '' === $value) { - throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if (!\array_key_exists($value, $references)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - return $references[$value]; - } - - $scalarLower = strtolower($scalar); - - switch (true) { - case 'null' === $scalarLower: - case '' === $scalar: - case '~' === $scalar: - return null; - case 'true' === $scalarLower: - return true; - case 'false' === $scalarLower: - return false; - case '!' === $scalar[0]: - switch (true) { - case str_starts_with($scalar, '!!str '): - $s = (string) substr($scalar, 6); - - if (\in_array($s[0] ?? '', ['"', "'"], true)) { - $isQuotedString = true; - $s = self::parseQuotedScalar($s); - } - - return $s; - case str_starts_with($scalar, '! '): - return substr($scalar, 2); - case str_starts_with($scalar, '!php/object'): - if (self::$objectSupport) { - if (!isset($scalar[12])) { - throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return unserialize(self::parseScalar(substr($scalar, 12))); - } - - if (self::$exceptionOnInvalidType) { - throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return null; - case str_starts_with($scalar, '!php/const'): - if (self::$constantSupport) { - if (!isset($scalar[11])) { - throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - $i = 0; - if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { - return \constant($const); - } - - throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - if (self::$exceptionOnInvalidType) { - throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return null; - case str_starts_with($scalar, '!!float '): - return (float) substr($scalar, 8); - case str_starts_with($scalar, '!!binary '): - return self::evaluateBinaryScalar(substr($scalar, 9)); - } - - throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); - case preg_match('/^(?:\+|-)?0o(?P[0-7_]++)$/', $scalar, $matches): - $value = str_replace('_', '', $matches['value']); - - if ('-' === $scalar[0]) { - return -octdec($value); - } - - return octdec($value); - // Optimize for returning strings. - case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]): - if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { - $scalar = str_replace('_', '', $scalar); - } - - switch (true) { - case ctype_digit($scalar): - case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): - $cast = (int) $scalar; - - return ($scalar === (string) $cast) ? $cast : $scalar; - case is_numeric($scalar): - case Parser::preg_match(self::getHexRegex(), $scalar): - $scalar = str_replace('_', '', $scalar); - - return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; - case '.inf' === $scalarLower: - case '.nan' === $scalarLower: - return -log(0); - case '-.inf' === $scalarLower: - return log(0); - case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): - return (float) str_replace('_', '', $scalar); - case Parser::preg_match(self::getTimestampRegex(), $scalar): - // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. - $time = new \DateTime($scalar, new \DateTimeZone('UTC')); - - if (Yaml::PARSE_DATETIME & $flags) { - return $time; - } - - try { - if (false !== $scalar = $time->getTimestamp()) { - return $scalar; - } - } catch (\ValueError) { - // no-op - } - - return $time->format('U'); - } - } - - return (string) $scalar; - } - - private static function parseTag(string $value, int &$i, int $flags): ?string - { - if ('!' !== $value[$i]) { - return null; - } - - $tagLength = strcspn($value, " \t\n[]{},", $i + 1); - $tag = substr($value, $i + 1, $tagLength); - - $nextOffset = $i + $tagLength + 1; - $nextOffset += strspn($value, ' ', $nextOffset); - - if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { - throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - // Is followed by a scalar and is a built-in tag - if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) { - // Manage in {@link self::evaluateScalar()} - return null; - } - - $i = $nextOffset; - - // Built-in tags - if ('' !== $tag && '!' === $tag[0]) { - throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if ('' !== $tag && !isset($value[$i])) { - throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { - return $tag; - } - - throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - public static function evaluateBinaryScalar(string $scalar): string - { - $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); - - if (0 !== (\strlen($parsedBinaryData) % 4)) { - throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { - throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return base64_decode($parsedBinaryData, true); - } - - private static function isBinaryString(string $value): bool - { - return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); - } - - /** - * Gets a regex that matches a YAML date. - * - * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 - */ - private static function getTimestampRegex(): string - { - return <<[0-9][0-9][0-9][0-9]) - -(?P[0-9][0-9]?) - -(?P[0-9][0-9]?) - (?:(?:[Tt]|[ \t]+) - (?P[0-9][0-9]?) - :(?P[0-9][0-9]) - :(?P[0-9][0-9]) - (?:\.(?P[0-9]*))? - (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) - (?::(?P[0-9][0-9]))?))?)? - $~x -EOF; - } - - /** - * Gets a regex that matches a YAML number in hexadecimal notation. - */ - private static function getHexRegex(): string - { - return '~^0x[0-9a-f_]++$~i'; - } -} diff --git a/vendor/symfony/yaml/LICENSE b/vendor/symfony/yaml/LICENSE deleted file mode 100644 index 88bf75b..0000000 --- a/vendor/symfony/yaml/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/vendor/symfony/yaml/Parser.php b/vendor/symfony/yaml/Parser.php deleted file mode 100644 index 9a3741b..0000000 --- a/vendor/symfony/yaml/Parser.php +++ /dev/null @@ -1,1255 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Parser parses YAML strings to convert them to PHP arrays. - * - * @author Fabien Potencier - * - * @final - */ -class Parser -{ - public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; - public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; - public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; - - private ?string $filename = null; - private int $offset = 0; - private int $numberOfParsedLines = 0; - private ?int $totalNumberOfLines = null; - private array $lines = []; - private int $currentLineNb = -1; - private string $currentLine = ''; - private array $refs = []; - private array $skippedLineNumbers = []; - private array $locallySkippedLineNumbers = []; - private array $refsBeingParsed = []; - - /** - * Parses a YAML file into a PHP value. - * - * @param string $filename The path to the YAML file to be parsed - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the file could not be read or the YAML is not valid - */ - public function parseFile(string $filename, int $flags = 0): mixed - { - if (!is_file($filename)) { - throw new ParseException(sprintf('File "%s" does not exist.', $filename)); - } - - if (!is_readable($filename)) { - throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); - } - - $this->filename = $filename; - - try { - return $this->parse(file_get_contents($filename), $flags); - } finally { - $this->filename = null; - } - } - - /** - * Parses a YAML string to a PHP value. - * - * @param string $value A YAML string - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the YAML is not valid - */ - public function parse(string $value, int $flags = 0): mixed - { - if (false === preg_match('//u', $value)) { - throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); - } - - $this->refs = []; - - try { - $data = $this->doParse($value, $flags); - } finally { - $this->refsBeingParsed = []; - $this->offset = 0; - $this->lines = []; - $this->currentLine = ''; - $this->numberOfParsedLines = 0; - $this->refs = []; - $this->skippedLineNumbers = []; - $this->locallySkippedLineNumbers = []; - $this->totalNumberOfLines = null; - } - - return $data; - } - - private function doParse(string $value, int $flags) - { - $this->currentLineNb = -1; - $this->currentLine = ''; - $value = $this->cleanup($value); - $this->lines = explode("\n", $value); - $this->numberOfParsedLines = \count($this->lines); - $this->locallySkippedLineNumbers = []; - - if (null === $this->totalNumberOfLines) { - $this->totalNumberOfLines = $this->numberOfParsedLines; - } - - if (!$this->moveToNextLine()) { - return null; - } - - $data = []; - $context = null; - $allowOverwrite = false; - - while ($this->isCurrentLineEmpty()) { - if (!$this->moveToNextLine()) { - return null; - } - } - - // Resolves the tag and returns if end of the document - if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { - return new TaggedValue($tag, ''); - } - - do { - if ($this->isCurrentLineEmpty()) { - continue; - } - - // tab? - if ("\t" === $this->currentLine[0]) { - throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); - - $isRef = $mergeNode = false; - if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { - if ($context && 'mapping' == $context) { - throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - $context = 'sequence'; - - if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { - $isRef = $matches['ref']; - $this->refsBeingParsed[] = $isRef; - $values['value'] = $matches['value']; - } - - if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { - throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // array - if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) { - // Inline first child - $currentLineNumber = $this->getRealCurrentLineNb(); - - $sequenceIndentation = \strlen($values['leadspaces']) + 1; - $sequenceYaml = substr($this->currentLine, $sequenceIndentation); - $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true); - - $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags); - } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) { - $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); - } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { - $data[] = new TaggedValue( - $subTag, - $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) - ); - } else { - if ( - isset($values['leadspaces']) - && ( - '!' === $values['value'][0] - || self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) - ) - ) { - // this is a compact notation element, add to next block and parse - $block = $values['value']; - if ($this->isNextLineIndented()) { - $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); - } - - $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); - } else { - $data[] = $this->parseValue($values['value'], $flags, $context); - } - } - if ($isRef) { - $this->refs[$isRef] = end($data); - array_pop($this->refsBeingParsed); - } - } elseif ( - self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values) - && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) - ) { - if ($context && 'sequence' == $context) { - throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - $context = 'mapping'; - - try { - $key = Inline::parseScalar($values['key']); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - if (!\is_string($key) && !\is_int($key)) { - throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // Convert float keys to strings, to avoid being converted to integers by PHP - if (\is_float($key)) { - $key = (string) $key; - } - - if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { - $mergeNode = true; - $allowOverwrite = true; - if (isset($values['value'][0]) && '*' === $values['value'][0]) { - $refName = substr(rtrim($values['value']), 1); - if (!\array_key_exists($refName, $this->refs)) { - if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { - throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - $refValue = $this->refs[$refName]; - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { - $refValue = (array) $refValue; - } - - if (!\is_array($refValue)) { - throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - $data += $refValue; // array union - } else { - if (isset($values['value']) && '' !== $values['value']) { - $value = $values['value']; - } else { - $value = $this->getNextEmbedBlock(); - } - $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { - $parsed = (array) $parsed; - } - - if (!\is_array($parsed)) { - throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if (isset($parsed[0])) { - // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes - // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier - // in the sequence override keys specified in later mapping nodes. - foreach ($parsed as $parsedItem) { - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { - $parsedItem = (array) $parsedItem; - } - - if (!\is_array($parsedItem)) { - throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); - } - - $data += $parsedItem; // array union - } - } else { - // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the - // current mapping, unless the key already exists in it. - $data += $parsed; // array union - } - } - } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { - $isRef = $matches['ref']; - $this->refsBeingParsed[] = $isRef; - $values['value'] = $matches['value']; - } - - $subTag = null; - if ($mergeNode) { - // Merge keys - } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { - // hash - // if next line is less indented or equal, then it means that the current value is null - if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if ($allowOverwrite || !isset($data[$key])) { - if (null !== $subTag) { - $data[$key] = new TaggedValue($subTag, ''); - } else { - $data[$key] = null; - } - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } else { - // remember the parsed line number here in case we need it to provide some contexts in error messages below - $realCurrentLineNbKey = $this->getRealCurrentLineNb(); - $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); - if ('<<' === $key) { - $this->refs[$refMatches['ref']] = $value; - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { - $value = (array) $value; - } - - $data += $value; - } elseif ($allowOverwrite || !isset($data[$key])) { - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if (null !== $subTag) { - $data[$key] = new TaggedValue($subTag, $value); - } else { - $data[$key] = $value; - } - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); - } - } - } else { - $value = $this->parseValue(rtrim($values['value']), $flags, $context); - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if ($allowOverwrite || !isset($data[$key])) { - $data[$key] = $value; - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } - if ($isRef) { - $this->refs[$isRef] = $data[$key]; - array_pop($this->refsBeingParsed); - } - } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } elseif ('{' === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); - - while ($this->moveToNextLine()) { - if (!$this->isCurrentLineEmpty()) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return $parsedMapping; - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } elseif ('[' === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); - - while ($this->moveToNextLine()) { - if (!$this->isCurrentLineEmpty()) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return $parsedSequence; - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } else { - // multiple documents are not supported - if ('---' === $this->currentLine) { - throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { - throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // 1-liner optionally followed by newline(s) - if (\is_string($value) && $this->lines[0] === trim($value)) { - try { - $value = Inline::parse($this->lines[0], $flags, $this->refs); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - return $value; - } - - // try to parse the value as a multi-line string as a last resort - if (0 === $this->currentLineNb) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - $value = ''; - - foreach ($this->lines as $line) { - $trimmedLine = trim($line); - if ('#' === ($trimmedLine[0] ?? '')) { - continue; - } - // If the indentation is not consistent at offset 0, it is to be considered as a ParseError - if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if (str_contains($line, ': ')) { - throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if ('' === $trimmedLine) { - $value .= "\n"; - } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { - $value .= ' '; - } - - if ('' !== $trimmedLine && str_ends_with($line, '\\')) { - $value .= ltrim(substr($line, 0, -1)); - } elseif ('' !== $trimmedLine) { - $value .= $trimmedLine; - } - - if ('' === $trimmedLine) { - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - } elseif (str_ends_with($line, '\\')) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = true; - } else { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - } - } - - try { - return Inline::parse(trim($value)); - } catch (ParseException) { - // fall-through to the ParseException thrown below - } - } - - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } while ($this->moveToNextLine()); - - if (null !== $tag) { - $data = new TaggedValue($tag, $data); - } - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) { - $object = new \stdClass(); - - foreach ($data as $key => $value) { - $object->$key = $value; - } - - $data = $object; - } - - return empty($data) ? null : $data; - } - - private function parseBlock(int $offset, string $yaml, int $flags) - { - $skippedLineNumbers = $this->skippedLineNumbers; - - foreach ($this->locallySkippedLineNumbers as $lineNumber) { - if ($lineNumber < $offset) { - continue; - } - - $skippedLineNumbers[] = $lineNumber; - } - - $parser = new self(); - $parser->offset = $offset; - $parser->totalNumberOfLines = $this->totalNumberOfLines; - $parser->skippedLineNumbers = $skippedLineNumbers; - $parser->refs = &$this->refs; - $parser->refsBeingParsed = $this->refsBeingParsed; - - return $parser->doParse($yaml, $flags); - } - - /** - * Returns the current line number (takes the offset into account). - * - * @internal - */ - public function getRealCurrentLineNb(): int - { - $realCurrentLineNumber = $this->currentLineNb + $this->offset; - - foreach ($this->skippedLineNumbers as $skippedLineNumber) { - if ($skippedLineNumber > $realCurrentLineNumber) { - break; - } - - ++$realCurrentLineNumber; - } - - return $realCurrentLineNumber; - } - - private function getCurrentLineIndentation(): int - { - if (' ' !== ($this->currentLine[0] ?? '')) { - return 0; - } - - return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); - } - - /** - * Returns the next embed block of YAML. - * - * @param int|null $indentation The indent level at which the block is to be read, or null for default - * @param bool $inSequence True if the enclosing data structure is a sequence - * - * @throws ParseException When indentation problem are detected - */ - private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string - { - $oldLineIndentation = $this->getCurrentLineIndentation(); - - if (!$this->moveToNextLine()) { - return ''; - } - - if (null === $indentation) { - $newIndent = null; - $movements = 0; - - do { - $EOF = false; - - // empty and comment-like lines do not influence the indentation depth - if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } else { - $newIndent = $this->getCurrentLineIndentation(); - } - } while (!$EOF && null === $newIndent); - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); - - if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } else { - $newIndent = $indentation; - } - - $data = []; - - if ($this->getCurrentLineIndentation() >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent ?? 0); - } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { - $data[] = $this->currentLine; - } else { - $this->moveToPreviousLine(); - - return ''; - } - - if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { - // the previous line contained a dash but no item content, this line is a sequence item with the same indentation - // and therefore no nested list or mapping - $this->moveToPreviousLine(); - - return ''; - } - - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); - $isItComment = $this->isCurrentLineComment(); - - while ($this->moveToNextLine()) { - if ($isItComment && !$isItUnindentedCollection) { - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); - $isItComment = $this->isCurrentLineComment(); - } - - $indent = $this->getCurrentLineIndentation(); - - if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { - $this->moveToPreviousLine(); - break; - } - - if ($this->isCurrentLineBlank()) { - $data[] = substr($this->currentLine, $newIndent); - continue; - } - - if ($indent >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent); - } elseif ($this->isCurrentLineComment()) { - $data[] = $this->currentLine; - } elseif (0 == $indent) { - $this->moveToPreviousLine(); - - break; - } else { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return implode("\n", $data); - } - - private function hasMoreLines(): bool - { - return (\count($this->lines) - 1) > $this->currentLineNb; - } - - /** - * Moves the parser to the next line. - */ - private function moveToNextLine(): bool - { - if ($this->currentLineNb >= $this->numberOfParsedLines - 1) { - return false; - } - - $this->currentLine = $this->lines[++$this->currentLineNb]; - - return true; - } - - /** - * Moves the parser to the previous line. - */ - private function moveToPreviousLine(): bool - { - if ($this->currentLineNb < 1) { - return false; - } - - $this->currentLine = $this->lines[--$this->currentLineNb]; - - return true; - } - - /** - * Parses a YAML value. - * - * @param string $value A YAML value - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * @param string $context The parser context (either sequence or mapping) - * - * @throws ParseException When reference does not exist - */ - private function parseValue(string $value, int $flags, string $context): mixed - { - if (str_starts_with($value, '*')) { - if (false !== $pos = strpos($value, '#')) { - $value = substr($value, 1, $pos - 2); - } else { - $value = substr($value, 1); - } - - if (!\array_key_exists($value, $this->refs)) { - if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { - throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - return $this->refs[$value]; - } - - if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { - $modifiers = $matches['modifiers'] ?? ''; - - $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers)); - - if ('' !== $matches['tag'] && '!' !== $matches['tag']) { - if ('!!binary' === $matches['tag']) { - return Inline::evaluateBinaryScalar($data); - } - - return new TaggedValue(substr($matches['tag'], 1), $data); - } - - return $data; - } - - try { - if ('' !== $value && '{' === $value[0]) { - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - - return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); - } elseif ('' !== $value && '[' === $value[0]) { - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - - return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); - } - - switch ($value[0] ?? '') { - case '"': - case "'": - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); - - if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { - throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); - } - - return $parsedValue; - default: - $lines = []; - - while ($this->moveToNextLine()) { - // unquoted strings end before the first unindented line - if (0 === $this->getCurrentLineIndentation()) { - $this->moveToPreviousLine(); - - break; - } - - $lines[] = trim($this->currentLine); - } - - for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { - if ('' === $lines[$i]) { - $value .= "\n"; - $previousLineBlank = true; - } elseif ($previousLineBlank) { - $value .= $lines[$i]; - $previousLineBlank = false; - } else { - $value .= ' '.$lines[$i]; - $previousLineBlank = false; - } - } - - Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); - - $parsedValue = Inline::parse($value, $flags, $this->refs); - - if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { - throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - return $parsedValue; - } - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } - - /** - * Parses a block scalar. - * - * @param string $style The style indicator that was used to begin this block scalar (| or >) - * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) - * @param int $indentation The indentation indicator that was used to begin this block scalar - */ - private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string - { - $notEOF = $this->moveToNextLine(); - if (!$notEOF) { - return ''; - } - - $isCurrentLineBlank = $this->isCurrentLineBlank(); - $blockLines = []; - - // leading blank lines are consumed before determining indentation - while ($notEOF && $isCurrentLineBlank) { - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $blockLines[] = ''; - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - - // determine indentation if not specified - if (0 === $indentation) { - $currentLineLength = \strlen($this->currentLine); - - for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { - ++$indentation; - } - } - - if ($indentation > 0) { - $pattern = sprintf('/^ {%d}(.*)$/', $indentation); - - while ( - $notEOF && ( - $isCurrentLineBlank || - self::preg_match($pattern, $this->currentLine, $matches) - ) - ) { - if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { - $blockLines[] = substr($this->currentLine, $indentation); - } elseif ($isCurrentLineBlank) { - $blockLines[] = ''; - } else { - $blockLines[] = $matches[1]; - } - - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - } elseif ($notEOF) { - $blockLines[] = ''; - } - - if ($notEOF) { - $blockLines[] = ''; - $this->moveToPreviousLine(); - } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { - $blockLines[] = ''; - } - - // folded style - if ('>' === $style) { - $text = ''; - $previousLineIndented = false; - $previousLineBlank = false; - - for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { - if ('' === $blockLines[$i]) { - $text .= "\n"; - $previousLineIndented = false; - $previousLineBlank = true; - } elseif (' ' === $blockLines[$i][0]) { - $text .= "\n".$blockLines[$i]; - $previousLineIndented = true; - $previousLineBlank = false; - } elseif ($previousLineIndented) { - $text .= "\n".$blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } elseif ($previousLineBlank || 0 === $i) { - $text .= $blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } else { - $text .= ' '.$blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } - } - } else { - $text = implode("\n", $blockLines); - } - - // deal with trailing newlines - if ('' === $chomping) { - $text = preg_replace('/\n+$/', "\n", $text); - } elseif ('-' === $chomping) { - $text = preg_replace('/\n+$/', '', $text); - } - - return $text; - } - - /** - * Returns true if the next line is indented. - */ - private function isNextLineIndented(): bool - { - $currentIndentation = $this->getCurrentLineIndentation(); - $movements = 0; - - do { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); - - if ($EOF) { - return false; - } - - $ret = $this->getCurrentLineIndentation() > $currentIndentation; - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - return $ret; - } - - private function isCurrentLineEmpty(): bool - { - return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); - } - - private function isCurrentLineBlank(): bool - { - return '' === $this->currentLine || '' === trim($this->currentLine, ' '); - } - - private function isCurrentLineComment(): bool - { - //checking explicitly the first char of the trim is faster than loops or strpos - $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine; - - return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; - } - - private function isCurrentLineLastLineInDocument(): bool - { - return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); - } - - private function cleanup(string $value): string - { - $value = str_replace(["\r\n", "\r"], "\n", $value); - - // strip YAML header - $count = 0; - $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); - $this->offset += $count; - - // remove leading comments - $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); - if (1 === $count) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - } - - // remove start of the document marker (---) - $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); - if (1 === $count) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - - // remove end of the document marker (...) - $value = preg_replace('#\.\.\.\s*$#', '', $value); - } - - return $value; - } - - private function isNextLineUnIndentedCollection(): bool - { - $currentIndentation = $this->getCurrentLineIndentation(); - $movements = 0; - - do { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); - - if ($EOF) { - return false; - } - - $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - return $ret; - } - - private function isStringUnIndentedCollectionItem(): bool - { - return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- '); - } - - /** - * A local wrapper for "preg_match" which will throw a ParseException if there - * is an internal error in the PCRE engine. - * - * This avoids us needing to check for "false" every time PCRE is used - * in the YAML engine - * - * @throws ParseException on a PCRE internal error - * - * @see preg_last_error() - * - * @internal - */ - public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int - { - if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { - $error = match (preg_last_error()) { - \PREG_INTERNAL_ERROR => 'Internal PCRE error.', - \PREG_BACKTRACK_LIMIT_ERROR => 'pcre.backtrack_limit reached.', - \PREG_RECURSION_LIMIT_ERROR => 'pcre.recursion_limit reached.', - \PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data.', - \PREG_BAD_UTF8_OFFSET_ERROR => 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.', - default => 'Error.', - }; - - throw new ParseException($error); - } - - return $ret; - } - - /** - * Trim the tag on top of the value. - * - * Prevent values such as "!foo {quz: bar}" to be considered as - * a mapping block. - */ - private function trimTag(string $value): string - { - if ('!' === $value[0]) { - return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); - } - - return $value; - } - - private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string - { - if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { - return null; - } - - if ($nextLineCheck && !$this->isNextLineIndented()) { - return null; - } - - $tag = substr($matches['tag'], 1); - - // Built-in tags - if ($tag && '!' === $tag[0]) { - throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - if (Yaml::PARSE_CUSTOM_TAGS & $flags) { - return $tag; - } - - throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - private function lexInlineQuotedString(int &$cursor = 0): string - { - $quotation = $this->currentLine[$cursor]; - $value = $quotation; - ++$cursor; - - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - $lineNumber = 0; - - do { - if (++$lineNumber > 1) { - $cursor += strspn($this->currentLine, ' ', $cursor); - } - - if ($this->isCurrentLineBlank()) { - $value .= "\n"; - } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { - $value .= ' '; - } - - for (; \strlen($this->currentLine) > $cursor; ++$cursor) { - switch ($this->currentLine[$cursor]) { - case '\\': - if ("'" === $quotation) { - $value .= '\\'; - } elseif (isset($this->currentLine[++$cursor])) { - $value .= '\\'.$this->currentLine[$cursor]; - } - - break; - case $quotation: - ++$cursor; - - if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) { - $value .= "''"; - break; - } - - return $value.$quotation; - default: - $value .= $this->currentLine[$cursor]; - } - } - - if ($this->isCurrentLineBlank()) { - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - } elseif ('\\' === $this->currentLine[-1]) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = true; - } else { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - throw new ParseException('Malformed inline YAML string.'); - } - - private function lexUnquotedString(int &$cursor): string - { - $offset = $cursor; - $cursor += strcspn($this->currentLine, '[]{},: ', $cursor); - - if ($cursor === $offset) { - throw new ParseException('Malformed unquoted YAML string.'); - } - - return substr($this->currentLine, $offset, $cursor - $offset); - } - - private function lexInlineMapping(int &$cursor = 0): string - { - return $this->lexInlineStructure($cursor, '}'); - } - - private function lexInlineSequence(int &$cursor = 0): string - { - return $this->lexInlineStructure($cursor, ']'); - } - - private function lexInlineStructure(int &$cursor, string $closingTag): string - { - $value = $this->currentLine[$cursor]; - ++$cursor; - - do { - $this->consumeWhitespaces($cursor); - - while (isset($this->currentLine[$cursor])) { - switch ($this->currentLine[$cursor]) { - case '"': - case "'": - $value .= $this->lexInlineQuotedString($cursor); - break; - case ':': - case ',': - $value .= $this->currentLine[$cursor]; - ++$cursor; - break; - case '{': - $value .= $this->lexInlineMapping($cursor); - break; - case '[': - $value .= $this->lexInlineSequence($cursor); - break; - case $closingTag: - $value .= $this->currentLine[$cursor]; - ++$cursor; - - return $value; - case '#': - break 2; - default: - $value .= $this->lexUnquotedString($cursor); - } - - if ($this->consumeWhitespaces($cursor)) { - $value .= ' '; - } - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - throw new ParseException('Malformed inline YAML string.'); - } - - private function consumeWhitespaces(int &$cursor): bool - { - $whitespacesConsumed = 0; - - do { - $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor); - $whitespacesConsumed += $whitespaceOnlyTokenLength; - $cursor += $whitespaceOnlyTokenLength; - - if (isset($this->currentLine[$cursor])) { - return 0 < $whitespacesConsumed; - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - return 0 < $whitespacesConsumed; - } -} diff --git a/vendor/symfony/yaml/README.md b/vendor/symfony/yaml/README.md deleted file mode 100644 index ac25024..0000000 --- a/vendor/symfony/yaml/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Yaml Component -============== - -The Yaml component loads and dumps YAML files. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/yaml.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/yaml/Resources/bin/yaml-lint b/vendor/symfony/yaml/Resources/bin/yaml-lint deleted file mode 100755 index 0ad73d7..0000000 --- a/vendor/symfony/yaml/Resources/bin/yaml-lint +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Runs the Yaml lint command. - * - * @author Jan Schädlich - */ - -use Symfony\Component\Console\Application; -use Symfony\Component\Yaml\Command\LintCommand; - -function includeIfExists(string $file): bool -{ - return file_exists($file) && include $file; -} - -if ( - !includeIfExists(__DIR__ . '/../../../../autoload.php') && - !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && - !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') -) { - fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); - exit(1); -} - -if (!class_exists(Application::class)) { - fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL); - exit(1); -} - -(new Application())->add($command = new LintCommand()) - ->getApplication() - ->setDefaultCommand($command->getName(), true) - ->run() -; diff --git a/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/symfony/yaml/Tag/TaggedValue.php deleted file mode 100644 index c7946c2..0000000 --- a/vendor/symfony/yaml/Tag/TaggedValue.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Tag; - -/** - * @author Nicolas Grekas - * @author Guilhem N. - */ -final class TaggedValue -{ - private string $tag; - private mixed $value; - - public function __construct(string $tag, mixed $value) - { - $this->tag = $tag; - $this->value = $value; - } - - public function getTag(): string - { - return $this->tag; - } - - public function getValue() - { - return $this->value; - } -} diff --git a/vendor/symfony/yaml/Unescaper.php b/vendor/symfony/yaml/Unescaper.php deleted file mode 100644 index 2238210..0000000 --- a/vendor/symfony/yaml/Unescaper.php +++ /dev/null @@ -1,110 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Unescaper encapsulates unescaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - * - * @internal - */ -class Unescaper -{ - /** - * Regex fragment that matches an escaped character in a double quoted string. - */ - public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; - - /** - * Unescapes a single quoted string. - * - * @param string $value A single quoted string - */ - public function unescapeSingleQuotedString(string $value): string - { - return str_replace('\'\'', '\'', $value); - } - - /** - * Unescapes a double quoted string. - * - * @param string $value A double quoted string - */ - public function unescapeDoubleQuotedString(string $value): string - { - $callback = function ($match) { - return $this->unescapeCharacter($match[0]); - }; - - // evaluate the string - return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); - } - - /** - * Unescapes a character that was found in a double-quoted string. - * - * @param string $value An escaped character - */ - private function unescapeCharacter(string $value): string - { - return match ($value[1]) { - '0' => "\x0", - 'a' => "\x7", - 'b' => "\x8", - 't' => "\t", - "\t" => "\t", - 'n' => "\n", - 'v' => "\xB", - 'f' => "\xC", - 'r' => "\r", - 'e' => "\x1B", - ' ' => ' ', - '"' => '"', - '/' => '/', - '\\' => '\\', - // U+0085 NEXT LINE - 'N' => "\xC2\x85", - // U+00A0 NO-BREAK SPACE - '_' => "\xC2\xA0", - // U+2028 LINE SEPARATOR - 'L' => "\xE2\x80\xA8", - // U+2029 PARAGRAPH SEPARATOR - 'P' => "\xE2\x80\xA9", - 'x' => self::utf8chr(hexdec(substr($value, 2, 2))), - 'u' => self::utf8chr(hexdec(substr($value, 2, 4))), - 'U' => self::utf8chr(hexdec(substr($value, 2, 8))), - default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)), - }; - } - - /** - * Get the UTF-8 character for the given code point. - */ - private static function utf8chr(int $c): string - { - if (0x80 > $c %= 0x200000) { - return \chr($c); - } - if (0x800 > $c) { - return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); - } - if (0x10000 > $c) { - return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); - } - - return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); - } -} diff --git a/vendor/symfony/yaml/Yaml.php b/vendor/symfony/yaml/Yaml.php deleted file mode 100644 index 4978421..0000000 --- a/vendor/symfony/yaml/Yaml.php +++ /dev/null @@ -1,96 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Yaml offers convenience methods to load and dump YAML. - * - * @author Fabien Potencier - * - * @final - */ -class Yaml -{ - public const DUMP_OBJECT = 1; - public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; - public const PARSE_OBJECT = 4; - public const PARSE_OBJECT_FOR_MAP = 8; - public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; - public const PARSE_DATETIME = 32; - public const DUMP_OBJECT_AS_MAP = 64; - public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; - public const PARSE_CONSTANT = 256; - public const PARSE_CUSTOM_TAGS = 512; - public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; - public const DUMP_NULL_AS_TILDE = 2048; - - /** - * Parses a YAML file into a PHP value. - * - * Usage: - * - * $array = Yaml::parseFile('config.yml'); - * print_r($array); - * - * @param string $filename The path to the YAML file to be parsed - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the file could not be read or the YAML is not valid - */ - public static function parseFile(string $filename, int $flags = 0): mixed - { - $yaml = new Parser(); - - return $yaml->parseFile($filename, $flags); - } - - /** - * Parses YAML into a PHP value. - * - * Usage: - * - * $array = Yaml::parse(file_get_contents('config.yml')); - * print_r($array); - * - * - * @param string $input A string containing YAML - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the YAML is not valid - */ - public static function parse(string $input, int $flags = 0): mixed - { - $yaml = new Parser(); - - return $yaml->parse($input, $flags); - } - - /** - * Dumps a PHP value to a YAML string. - * - * The dump method, when supplied with an array, will do its best - * to convert the array into friendly YAML. - * - * @param mixed $input The PHP value - * @param int $inline The level where you switch to inline YAML - * @param int $indent The amount of spaces to use for indentation of nested nodes - * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string - */ - public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string - { - $yaml = new Dumper($indent); - - return $yaml->dump($input, $inline, 0, $flags); - } -} diff --git a/vendor/symfony/yaml/composer.json b/vendor/symfony/yaml/composer.json deleted file mode 100644 index 839314b..0000000 --- a/vendor/symfony/yaml/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/yaml", - "type": "library", - "description": "Loads and dumps YAML files", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "minimum-stability": "dev" -} diff --git a/vendor/zircote/swagger-php/Changelog.md b/vendor/zircote/swagger-php/Changelog.md deleted file mode 100644 index 08943b3..0000000 --- a/vendor/zircote/swagger-php/Changelog.md +++ /dev/null @@ -1,3 +0,0 @@ -# Changelog - -The changelog is moved to the [releases page](https://github.com/zircote/swagger-php/releases) diff --git a/vendor/zircote/swagger-php/Examples/Readme.md b/vendor/zircote/swagger-php/Examples/Readme.md deleted file mode 100644 index d0c2790..0000000 --- a/vendor/zircote/swagger-php/Examples/Readme.md +++ /dev/null @@ -1,71 +0,0 @@ -## Code/Annotation examples - -Collection of code/annotation examples and their corresponding OpenAPI specs generated using swagger-php. - -* **petstore.swagger.io** - - The [swagger-ui](http://petstore.swagger.io/) petstore example using swagger-php annotations. - - * petstore.swagger.io: [source](petstore.swagger.io) / [spec](petstore.swagger.io/petstore.swagger.io.yaml) - - -* **swagger-spec** - - Some more examples based on the (now defunct) [swagger-api](https://github.com/swagger-api/) specs. - - * petstore: [source](swagger-spec/petstore) / [spec](swagger-spec/petstore/petstore.yaml) - * petstore-simple: [source](swagger-spec/petstore-simple) - / [spec](swagger-spec/petstore-simple/petstore-simple.yaml) - * petstore-with-external-docs: [source](swagger-spec/petstore-with-external-docs) - / [spec](swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml) - * petstore-3.0 (includes oauth2 auth flow): [source](petstore-3.0) / [spec](openapi-spec/petstore-3.0.yaml) - - -* **Other** - - * using-links: [source](using-links) / [spec](using-links/using-links.yaml) - * using-links-php81: [source](using-links-php81) / [spec](using-links-php81/using-links-php81.yaml) - **requires PHP 8.1** - * simple response object: [source](example-object) / [spec](example-object/example-object.yaml) - * misc: [source](misc) / [spec](misc/misc.yaml) - * using interfaces: [source](using-interfaces) / [spec](using-interfaces/using-interfaces.yaml) - * using traits: [source](using-traits) / [spec](using-traits/using-traits.yaml) - * using refs: [source](using-refs) / [spec](using-refs/using-refs.yaml) - * nested schemas and class hierachies: [source](nesting) / [spec](nesting/nesting.yaml) - * polymorphism using `@OA\Discriminator`: [source](polymorphism) / [spec](polymorphism/polymorphism.yaml) - - -## Custom processors - -[Processors](../src/Processors) implement the various steps involved in converting annotations into an OpenAPI spec. - -Writing a custom processor is the recommended way to extend swagger-php in a clean way. - -Processors are expected to implement the `__invoke()` method expecting the current `Analysis` object as single parameter: - -```php - - */ -class Pet -{ - /** - * Add a new pet to the store. - * - * @OA\Post( - * path="/pet", - * tags={"pet"}, - * operationId="addPet", - * @OA\Response( - * response=405, - * description="Invalid input" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody(ref="#/components/requestBodies/Pet") - * ) - */ - public function addPet() - { - } - - /** - * Update an existing pet. - * - * @OA\Put( - * path="/pet", - * tags={"pet"}, - * operationId="updatePet", - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Pet not found" - * ), - * @OA\Response( - * response=405, - * description="Validation exception" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody(ref="#/components/requestBodies/Pet") - * ) - */ - public function updatePet() - { - } - - /** - * @OA\Get( - * path="/pet/findByStatus", - * tags={"pet"}, - * summary="Finds Pets by status", - * description="Multiple status values can be provided with comma separated string", - * operationId="findPetsByStatus", - * deprecated=true, - * @OA\Parameter( - * name="status", - * in="query", - * description="Status values that needed to be considered for filter", - * required=true, - * explode=true, - * @OA\Schema( - * default="available", - * type="string", - * enum={"available", "pending", "sold"}, - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ), - * @OA\XmlContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid status value" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * } - * ) - */ - public function findPetsByStatus() - { - } - - /** - * @OA\Get( - * path="/pet/findByTags", - * tags={"pet"}, - * summary="Finds Pets by tags", - * description="Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", - * operationId="findByTags", - * @OA\Parameter( - * name="tags", - * in="query", - * description="Tags to filter by", - * required=true, - * explode=true, - * @OA\Schema( - * type="array", - * @OA\Items( - * type="string", - * ) - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ), - * @OA\XmlContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid status value" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * } - * ) - */ - public function findByTags() - { - } - - /** - * @OA\Get( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Find pet by ID", - * description="Returns a single pet", - * operationId="getPetById", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet to return", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Pet"), - * @OA\XmlContent(ref="#/components/schemas/Pet"), - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplier" - * ), - * @OA\Response( - * response=404, - * description="Pet not found" - * ), - * security={ - * {"api_key": {}} - * } - * ) - * - * @param int $id - */ - public function getPetById($id) - { - } - - /** - * @OA\Post( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Updates a pet in the store with form data", - * operationId="updatePetWithForm", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet that needs to be updated", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ) - * ), - * @OA\Response( - * response=405, - * description="Invalid input" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody( - * description="Input data format", - * @OA\MediaType( - * mediaType="application/x-www-form-urlencoded", - * @OA\Schema( - * type="object", - * @OA\Property( - * property="name", - * description="Updated name of the pet", - * type="string", - * ), - * @OA\Property( - * property="status", - * description="Updated status of the pet", - * type="string" - * ) - * ) - * ) - * ) - * ) - */ - public function updatePetWithForm() - { - } - - /** - * @OA\Delete( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Deletes a pet", - * operationId="deletePet", - * @OA\Parameter( - * name="api_key", - * in="header", - * required=false, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Parameter( - * name="petId", - * in="path", - * description="Pet id to delete", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ), - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied", - * ), - * @OA\Response( - * response=404, - * description="Pet not found", - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * ) - */ - public function deletePet() - { - } - - /** - * @OA\Post( - * path="/pet/{petId}/uploadImage", - * tags={"pet"}, - * summary="uploads an image", - * operationId="uploadFile", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet to update", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * example=1 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/ApiResponse") - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody( - * description="Upload images request body", - * @OA\MediaType( - * mediaType="application/octet-stream", - * @OA\Schema( - * type="string", - * format="binary" - * ) - * ) - * ) - * ) - */ - public function uploadFile() - { - } -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php deleted file mode 100644 index 937ab74..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php +++ /dev/null @@ -1,137 +0,0 @@ - - */ -class Store -{ - /** - * @OA\Get( - * path="/store", - * tags={"store"}, - * summary="Returns pet inventories by status", - * description="Returns a map of status codes to quantities", - * operationId="getInventory", - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * @OA\AdditionalProperties( - * type="integer", - * format="int32" - * ) - * ) - * ), - * security={ - * {"api_key": {}} - * } - * ) - */ - public function getInventory() - { - } - - /** - * @OA\Post( - * path="/store/order", - * tags={"store"}, - * summary="Place an order for a pet", - * operationId="placeOrder", - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Order"), - * @OA\XmlContent(ref="#/components/schemas/Order") - * ), - * @OA\RequestBody( - * description="order placed for purchasing th pet", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/Order") - * ) - * ) - */ - public function placeOrder() - { - } - - /** - * @OA\Get( - * path="/store/order/{orderId}", - * tags={"store"}, - * description="For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", - * operationId="getOrderById", - * @OA\Parameter( - * name="orderId", - * in="path", - * description="ID of pet that needs to be fetched", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * maximum=10, - * minimum=1 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Order"), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema(ref="#/components/schemas/Order") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Order not found" - * ) - * ) - */ - public function getOrderById() - { - } - - /** - * @OA\Delete( - * path="/store/order/{orderId}", - * tags={"store"}, - * summary="Delete purchase order by ID", - * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - * operationId="deleteOrder", - * @OA\Parameter( - * name="orderId", - * in="path", - * required=true, - * description="ID of the order that needs to be deleted", - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1 - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Order not found" - * ) - * ), - */ - public function deleteOrder() - { - } -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php deleted file mode 100644 index 52596be..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php +++ /dev/null @@ -1,231 +0,0 @@ - - */ -class User -{ - /** - * @OA\Post( - * path="/user", - * tags={"user"}, - * summary="Create user", - * description="This can only be done by the logged in user.", - * operationId="createUser", - * @OA\Response( - * response="default", - * description="successful operation" - * ), - * @OA\RequestBody( - * description="Create user object", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/User") - * ) - * ) - */ - public function createUser() - { - } - - /** - * @OA\Post( - * path="/user/createWithArray", - * tags={"user"}, - * summary="Create list of users with given input array", - * operationId="createUsersWithListInput", - * @OA\Response( - * response="default", - * description="successful operation" - * ), - * @OA\RequestBody(ref="#/components/requestBodies/UserArray") - * ) - */ - public function createUsersWithListInput() - { - } - - /** - * @OA\Get( - * path="/user/login", - * tags={"user"}, - * summary="Logs user into system", - * operationId="loginUser", - * @OA\Parameter( - * name="username", - * in="query", - * description="The user name for login", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Parameter( - * name="password", - * in="query", - * required=true, - * @OA\Schema( - * type="string", - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\Header( - * header="X-Rate-Limit", - * description="calls per hour allowed by the user", - * @OA\Schema( - * type="integer", - * format="int32" - * ) - * ), - * @OA\Header( - * header="X-Expires-After", - * description="date in UTC when token expires", - * @OA\Schema( - * type="string", - * format="datetime" - * ) - * ), - * @OA\JsonContent( - * type="string" - * ), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema( - * type="string" - * ) - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username/password supplied" - * ) - * ) - */ - public function loginUser() - { - } - - /** - * @OA\Get( - * path="/user/logout", - * tags={"user"}, - * summary="Logs out current logged in user session", - * operationId="logoutUser", - * @OA\Response( - * response="default", - * description="successful operation" - * ) - * ) - */ - public function logoutUser() - { - } - - /** - * @OA\Get( - * path="/user/{username}", - * summary="Get user by user name", - * operationId="getUserByName", - * @OA\Parameter( - * name="username", - * in="path", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/User"), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema(ref="#/components/schemas/User") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username supplied" - * ), - * @OA\Response( - * response=404, - * description="User not found" - * ), - * ) - */ - public function getUserByName() - { - } - - /** - * @OA\Put( - * path="/user/{username}", - * summary="Updated user", - * description="This can pnly be done by the logged in user.", - * operationId="updateUser", - * @OA\Parameter( - * name="username", - * in="path", - * description="name that to be updated", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid user supplied" - * ), - * @OA\Response( - * response=404, - * description="User not found" - * ), - * @OA\RequestBody( - * description="Updated user object", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/User") - * ) - * ) - */ - public function updateUser() - { - } - - /** - * @OA\Delete( - * path="/user/{username}", - * summary="Delete user", - * description="This can only be done by the logged in user.", - * operationId="deleteUser", - * @OA\Parameter( - * name="username", - * in="path", - * description="The name that needs to be deleted", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username supplied", - * ), - * @OA\Response( - * response=404, - * description="User not found", - * ) - * ) - */ - public function deleteUser() - { - } -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php deleted file mode 100644 index 29c8172..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * @OA\Schema( - * description="Api response", - * title="Api response" - * ) - */ -class ApiResponse -{ - /** - * @OA\Property( - * description="Code", - * title="Code", - * format="int32" - * ) - * - * @var int - */ - private $code; - - /** - * OA\Property( - * description="Type", - * title="Type", - * ). - * - * @var string - */ - private $type; - - /** - * @OA\Property( - * description="Message", - * title="Message" - * ) - * - * @var string - */ - private $message; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php deleted file mode 100644 index c178845..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * @OA\Schema( - * title="Pets Category.", - * @OA\Xml( - * name="Category" - * ) - * ) - */ -class Category -{ - /** - * @OA\Property( - * title="ID", - * description="ID", - * format="int64", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * title="Category name", - * description="Category name" - * ) - * - * @var string - */ - private $name; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php deleted file mode 100644 index 36d46c7..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * @OA\Schema( - * title="Order model", - * description="Order model", - * ) - */ -class Order -{ - /** - * @OA\Property( - * format="int64", - * title="ID", - * default=1, - * description="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * default=1, - * format="int64", - * description="Pet ID", - * title="Pet ID", - * ) - * - * @var int - */ - private $petId; - - /** - * @OA\Property( - * default=12, - * format="in32", - * description="Quantity", - * title="Quantity", - * ) - * - * @var int - */ - private $quantity; - - /** - * @OA\Property( - * default="2017-02-02 18:31:45", - * format="datetime", - * description="Shipping date", - * title="Shipping date", - * type="string" - * ) - * - * @var \DateTime - */ - private $shipDate; - - /** - * @OA\Property( - * default="placed", - * title="Order status.", - * description="Order status.", - * enum={"placed", "approved", "delivered"}, - * ) - * - * @var string - */ - private $status; - - /** - * @OA\Property( - * default=false, - * format="int64", - * description="Complete status", - * title="Complete status", - * ) - * - * @var bool - */ - private $complete; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php deleted file mode 100644 index ade5557..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * @OA\Schema( - * description="Pet model", - * title="Pet model", - * required={"name", "photoUrls"}, - * @OA\Xml( - * name="Pet" - * ) - * ) - */ -class Pet -{ - - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * title="Category", - * ) - * - * @var Category - */ - private $category; - - /** - * @OA\Property( - * format="int64", - * description="Pet name", - * title="Pet name", - * ) - * - * @var int - */ - private $name; - - /** - * @OA\Property( - * description="Photo urls", - * title="Photo urls", - * @OA\Xml( - * name="photoUrl", - * wrapped=true - * ), - * @OA\Items( - * type="string", - * default="images/image-1.png" - * ) - * ) - * - * @var array - */ - private $photoUrls; - - /** - * @OA\Property( - * description="Pet tags", - * title="Pet tags", - * @OA\Xml( - * name="tag", - * wrapped=true - * ), - * ) - * - * @var Tag[] - */ - private $tags; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php deleted file mode 100644 index 97e2661..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * @OA\Schema( - * title="Tag", - * @OA\Xml( - * name="Tag" - * ) - * ) - */ -class Tag -{ - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID" - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * description="Name", - * title="Name" - * ) - * - * @var string - */ - private $name; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php deleted file mode 100644 index c9c32ad..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * @OA\Schema( - * title="User model", - * description="User model", - * ) - */ -class User -{ - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * description="Username", - * title="Username", - * ) - * - * @var string - */ - private $username; - - /** - * @OA\Property( - * description="First name", - * title="First name", - * ) - * - * @var string - */ - private $firstName; - - /** - * @OA\Property( - * description="Last name", - * title="Last name", - * ) - * - * @var string - */ - private $lastName; - - /** - * @OA\Property( - * format="email", - * description="Email", - * title="Email", - * ) - * - * @var string - */ - private $email; - - /** - * @OA\Property( - * format="int64", - * description="Password", - * title="Password", - * maximum=255 - * ) - * - * @var string - */ - private $password; - - /** - * @OA\Property( - * format="msisdn", - * description="Phone", - * title="Phone", - * ) - * - * @var string - */ - private $phone; - - /** - * @OA\Property( - * format="int32", - * description="User status", - * title="User status", - * ) - * - * @var int - */ - private $userStatus; -} diff --git a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php b/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php deleted file mode 100644 index 79d0124..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php +++ /dev/null @@ -1,22 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions' - operationId: getOrderById - parameters: - - - name: orderId - in: path - description: 'ID of pet that needs to be fetched' - required: true - schema: - type: integer - format: int64 - maximum: 10 - minimum: 1 - responses: - '200': - description: 'successful operation' - content: - application/xml: - schema: - $ref: '#/components/schemas/Order' - application/json: - schema: - $ref: '#/components/schemas/Order' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - delete: - tags: - - store - summary: 'Delete purchase order by ID' - description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' - operationId: deleteOrder - parameters: - - - name: orderId - in: path - description: 'ID of the order that needs to be deleted' - required: true - schema: - type: integer - format: int64 - minimum: 1 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - /user: - post: - tags: - - user - summary: 'Create user' - description: 'This can only be done by the logged in user.' - operationId: createUser - requestBody: - description: 'Create user object' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithArray: - post: - tags: - - user - summary: 'Create list of users with given input array' - operationId: createUsersWithListInput - requestBody: - $ref: '#/components/requestBodies/UserArray' - responses: - default: - description: 'successful operation' - /user/login: - get: - tags: - - user - summary: 'Logs user into system' - operationId: loginUser - parameters: - - - name: username - in: query - description: 'The user name for login' - required: true - schema: - type: string - - - name: password - in: query - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - headers: - X-Rate-Limit: - description: 'calls per hour allowed by the user' - schema: - type: integer - format: int32 - X-Expires-After: - description: 'date in UTC when token expires' - schema: - type: string - format: datetime - content: - application/xml: - schema: - type: string - application/json: - schema: - type: string - '400': - description: 'Invalid username/password supplied' - /user/logout: - get: - tags: - - user - summary: 'Logs out current logged in user session' - operationId: logoutUser - responses: - default: - description: 'successful operation' - '/user/{username}': - get: - summary: 'Get user by user name' - operationId: getUserByName - parameters: - - - name: username - in: path - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - content: - application/xml: - schema: - $ref: '#/components/schemas/User' - application/json: - schema: - $ref: '#/components/schemas/User' - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' - put: - summary: 'Updated user' - description: 'This can pnly be done by the logged in user.' - operationId: updateUser - parameters: - - - name: username - in: path - description: 'name that to be updated' - required: true - schema: - type: string - requestBody: - description: 'Updated user object' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/User' - responses: - '400': - description: 'Invalid user supplied' - '404': - description: 'User not found' - delete: - summary: 'Delete user' - description: 'This can only be done by the logged in user.' - operationId: deleteUser - parameters: - - - name: username - in: path - description: 'The name that needs to be deleted' - required: true - schema: - type: string - responses: - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' -components: - schemas: - ApiResponse: - title: 'Api response' - description: 'Api response' - properties: - code: - title: Code - description: Code - type: integer - format: int32 - message: - title: Message - description: Message - type: string - type: object - Category: - title: 'Pets Category.' - description: 'Pets Category.' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - name: - title: 'Category name' - description: 'Category name' - type: string - type: object - xml: - name: Category - Order: - title: 'Order model' - description: 'Order model' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - default: 1 - petId: - title: 'Pet ID' - description: 'Pet ID' - type: integer - format: int64 - default: 1 - quantity: - title: Quantity - description: Quantity - type: integer - format: in32 - default: 12 - shipDate: - title: 'Shipping date' - description: 'Shipping date' - type: string - format: datetime - default: '2017-02-02 18:31:45' - status: - title: 'Order status.' - description: 'Order status.' - type: string - default: placed - enum: - - placed - - approved - - delivered - complete: - title: 'Complete status' - description: 'Complete status' - type: boolean - format: int64 - default: false - type: object - Pet: - title: 'Pet model' - description: 'Pet model' - required: - - name - - photoUrls - properties: - id: - title: ID - description: ID - type: integer - format: int64 - category: - $ref: '#/components/schemas/Category' - name: - title: 'Pet name' - description: 'Pet name' - type: integer - format: int64 - photoUrls: - title: 'Photo urls' - description: 'Photo urls' - type: array - items: - type: string - default: images/image-1.png - xml: - name: photoUrl - wrapped: true - tags: - title: 'Pet tags' - description: 'Pet tags' - type: array - items: - $ref: '#/components/schemas/Tag' - xml: - name: tag - wrapped: true - type: object - xml: - name: Pet - Tag: - title: Tag - description: Tag. - properties: - id: - title: ID - description: ID - type: integer - format: int64 - name: - title: Name - description: Name - type: string - type: object - xml: - name: Tag - User: - title: 'User model' - description: 'User model' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - username: - title: Username - description: Username - type: string - firstName: - title: 'First name' - description: 'First name' - type: string - lastName: - title: 'Last name' - description: 'Last name' - type: string - email: - title: Email - description: Email - type: string - format: email - password: - title: Password - description: Password - type: string - format: int64 - maximum: 255 - phone: - title: Phone - description: Phone - type: string - format: msisdn - userStatus: - title: 'User status' - description: 'User status' - type: integer - format: int32 - type: object - requestBodies: - Pet: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - UserArray: - description: 'List of user object' - required: true - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/User' - securitySchemes: - petstore_auth: - type: oauth2 - flows: - implicit: - authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' - scopes: - 'write:pets': 'modify pets in your account' - 'read:pets': 'read your pets' - api_key: - type: apiKey - name: api_key - in: header -tags: - - - name: pet - description: 'Everything about your Pets' - externalDocs: - description: 'Find out more' - url: 'http://swagger.io' - - - name: store - description: 'Access to Petstore orders' - - - name: user - description: 'Operations about user' - externalDocs: - description: 'Find out more about store' - url: 'http://swagger.io' -externalDocs: - description: 'Find out more about Swagger' - url: 'http://swagger.io' diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php deleted file mode 100644 index 4653df6..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php +++ /dev/null @@ -1,31 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions", - * operationId="getOrderById", - * @OA\Parameter( - * name="orderId", - * in="path", - * description="ID of pet that needs to be fetched", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1.0, - * maximum=10.0 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\Schema(ref="#/components/schemas/Order") - * ), - * @OA\Response(response=400, description="Invalid ID supplied"), - * @OA\Response(response=404, description="Order not found") - * ) - */ - public function getOrderById() - { - } - - /** - * @OA\Delete(path="/store/order/{orderId}", - * tags={"store"}, - * summary="Delete purchase order by ID", - * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - * operationId="deleteOrder", - * @OA\Parameter( - * name="orderId", - * in="path", - * required=true, - * description="ID of the order that needs to be deleted", - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1.0 - * ) - * ), - * @OA\Response(response=400, description="Invalid ID supplied"), - * @OA\Response(response=404, description="Order not found") - * ) - */ - public function deleteOrder() - { - } -} diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php deleted file mode 100644 index caf7e92..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php +++ /dev/null @@ -1,218 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions", - "operationId": "getOrderById", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of pet that needs to be fetched", - "required": true, - "schema": { - "type": "integer", - "format": "int64", - "maximum": 10, - "minimum": 1 - } - } - ], - "responses": { - "200": { - "description": "successful operation" - }, - "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Order not found" - } - } - }, - "delete": { - "tags": [ - "store" - ], - "summary": "Delete purchase order by ID", - "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - "operationId": "deleteOrder", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of the order that needs to be deleted", - "required": true, - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1 - } - } - ], - "responses": { - "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Order not found" - } - } - } - }, - "/user": { - "post": { - "tags": [ - "user" - ], - "summary": "Create user", - "description": "This can only be done by the logged in user.", - "operationId": "createUser", - "requestBody": { - "description": "Created user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/createWithArray": { - "post": { - "tags": [ - "user" - ], - "summary": "Creates list of users with given input array", - "description": "", - "operationId": "createUsersWithArrayInput", - "requestBody": { - "description": "List of user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/createWithList": { - "post": { - "tags": [ - "user" - ], - "summary": "Creates list of users with given input array", - "description": "", - "operationId": "createUsersWithListInput", - "requestBody": { - "description": "List of user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/login": { - "get": { - "tags": [ - "user" - ], - "summary": "Logs user into the system", - "description": "", - "operationId": "loginUser", - "parameters": [ - { - "name": "username", - "in": "query", - "description": "The user name for login", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "password", - "in": "query", - "description": "The password for login in clear text", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "headers": { - "X-Rate-Limit": { - "description": "calls per hour allowed by the user", - "schema": { - "type": "integer", - "format": "int32" - } - }, - "X-Expires-After": { - "description": "date in UTC when token expires", - "schema": { - "type": "string", - "format": "date-time" - } - } - } - }, - "400": { - "description": "Invalid username/password supplied" - } - } - } - }, - "/user/logout": { - "get": { - "tags": [ - "user" - ], - "summary": "Logs out current logged in user session", - "description": "", - "operationId": "logoutUser", - "parameters": [], - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/{username}": { - "get": { - "tags": [ - "user" - ], - "summary": "Get user by user name", - "description": "", - "operationId": "getUserByName", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be fetched. Use user1 for testing. ", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation" - }, - "400": { - "description": "Invalid username supplied" - }, - "404": { - "description": "User not found" - } - } - }, - "put": { - "tags": [ - "user" - ], - "summary": "Updated user", - "description": "This can only be done by the logged in user.", - "operationId": "updateUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "name that need to be updated", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "Updated user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "responses": { - "400": { - "description": "Invalid user supplied" - }, - "404": { - "description": "User not found" - } - } - }, - "delete": { - "tags": [ - "user" - ], - "summary": "Delete user", - "description": "This can only be done by the logged in user.", - "operationId": "deleteUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be deleted", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "400": { - "description": "Invalid username supplied" - }, - "404": { - "description": "User not found" - } - } - } - } - }, - "components": { - "schemas": { - "ApiResponse": { - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "Category": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "xml": { - "name": "Category" - } - }, - "Order": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "petId": { - "type": "integer", - "format": "int64" - }, - "complete": { - "type": "boolean", - "default": false - }, - "quantity": { - "type": "integer", - "format": "int32" - }, - "shipDate": { - "type": "string", - "format": "date-time" - }, - "status": { - "description": "Order Status.", - "type": "string", - "enum": [ - "placed", - "approved", - "delivered" - ] - } - }, - "type": "object", - "xml": { - "name": "Order" - } - }, - "Pet": { - "required": [ - "name", - "photoUrls" - ], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string", - "example": "doggie" - }, - "category": { - "$ref": "#/components/schemas/Category" - }, - "photoUrls": { - "type": "array", - "items": { - "type": "string" - }, - "xml": { - "name": "photoUrl", - "wrapped": true - } - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Tag" - }, - "xml": { - "name": "tag", - "wrapped": true - } - }, - "status": { - "description": "pet status in the store", - "type": "string", - "enum": [ - "available", - "pending", - "sold" - ] - } - }, - "type": "object", - "xml": { - "name": "Pet" - } - }, - "Tag": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "xml": { - "name": "Tag" - } - }, - "User": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "email": { - "type": "string" - }, - "password": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "userStatus": { - "description": "User Status", - "type": "integer", - "format": "int32" - } - }, - "type": "object", - "xml": { - "name": "User" - } - } - }, - "securitySchemes": { - "api_key": { - "type": "apiKey", - "name": "api_key", - "in": "header" - }, - "petstore_auth": { - "type": "oauth2", - "flows": { - "implicit": { - "authorizationUrl": "http://petstore.swagger.io/oauth/dialog", - "scopes": { - "read:pets": "read your pets", - "write:pets": "modify pets in your account" - } - } - } - } - } - }, - "tags": [ - { - "name": "pet", - "description": "Everything about your Pets", - "externalDocs": { - "description": "Find out more", - "url": "http://swagger.io" - } - }, - { - "name": "store", - "description": "Access to Petstore orders" - }, - { - "name": "user", - "description": "Operations about user", - "externalDocs": { - "description": "Find out more about our store", - "url": "http://swagger.io" - } - } - ], - "externalDocs": { - "description": "Find out more about Swagger", - "url": "http://swagger.io" - } -} diff --git a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml b/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml deleted file mode 100644 index ec62cd3..0000000 --- a/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml +++ /dev/null @@ -1,669 +0,0 @@ -openapi: 3.0.0 -info: - title: 'Swagger Petstore' - description: 'This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.' - termsOfService: 'http://swagger.io/terms/' - contact: - email: apiteam@swagger.io - license: - name: 'Apache 2.0' - url: 'http://www.apache.org/licenses/LICENSE-2.0.html' - version: 1.0.0 -servers: - - - url: 'https://petstore.swagger.io/v3' - description: 'OpenApi host' -paths: - /pet/findByTags: - get: - tags: - - pet - summary: 'Finds Pets by tags' - description: 'Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.' - operationId: findPetsByTags - parameters: - - - name: tags - in: query - description: 'Tags to filter by' - required: true - style: form - schema: - type: array - items: - type: string - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid tag value' - deprecated: true - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - /pet/findByStatus: - get: - tags: - - pet - summary: 'Finds Pets by status' - description: 'Multiple status values can be provided with comma separated strings' - operationId: findPetsByStatus - parameters: - - - name: status - in: query - description: 'Status values that need to be considered for filter' - required: true - style: form - schema: - type: array - items: - type: string - default: available - enum: - - available - - pending - - sold - responses: - '200': - description: 'successful operation' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Pet' - '400': - description: 'Invalid status value' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - '/pet/{petId}': - get: - tags: - - pet - summary: 'Find pet by ID' - description: 'Returns a single pet' - operationId: getPetById - parameters: - - - name: petId - in: path - description: 'ID of pet to return' - required: true - schema: - type: integer - format: int64 - responses: - '200': - description: 'successful operation' - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - security: - - - api_key: [] - post: - tags: - - pet - summary: 'Updates a pet in the store with form data' - description: '' - operationId: updatePetWithForm - parameters: - - - name: petId - in: path - description: 'ID of pet that needs to be updated' - required: true - schema: - type: integer - format: int64 - requestBody: - required: false - content: - application/x-www-form-urlencoded: - schema: - properties: - name: - description: 'Updated name of the pet' - type: string - status: - description: 'Updated status of the pet' - type: string - type: object - responses: - '405': - description: 'Invalid input' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - delete: - tags: - - pet - summary: 'Deletes a pet' - description: '' - operationId: deletePet - parameters: - - - name: petId - in: path - description: 'Pet id to delete' - required: true - schema: - type: integer - format: int64 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - /pet: - put: - tags: - - pet - summary: 'Update an existing pet.' - description: '' - operationId: updatePet - requestBody: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - '405': - description: 'Validation exception' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - post: - tags: - - pet - summary: 'Add a new pet to the store' - description: '' - operationId: addPet - requestBody: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - responses: - '405': - description: 'Invalid input' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - '/pet/{petId}/uploadImage': - post: - tags: - - pet - summary: 'uploads an image' - description: '' - operationId: uploadFile - parameters: - - - name: petId - in: path - description: 'ID of pet to update' - required: true - schema: - type: integer - format: int64 - requestBody: - required: true - content: - multipart/form-data: - schema: - required: - - file - properties: - additionalMetadata: - description: 'Additional data to pass to server' - type: string - file: - description: 'file to upload' - type: string - format: file - type: object - responses: - '200': - description: 'successful operation' - security: - - - petstore_auth: - - 'read:pets' - - 'write:pets' - /store/inventory: - get: - tags: - - store - summary: 'Returns pet inventories by status' - description: 'Returns a map of status codes to quantities' - operationId: getInventory - parameters: [] - responses: - '200': - description: 'successful operation' - security: - - - api_key: [] - /store/order: - post: - tags: - - store - summary: 'Place an order for a pet' - description: '' - operationId: placeOrder - requestBody: - description: 'order placed for purchasing the pet' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Order' - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid Order' - '/store/order/{orderId}': - get: - tags: - - store - summary: 'Find purchase order by ID' - description: 'For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions' - operationId: getOrderById - parameters: - - - name: orderId - in: path - description: 'ID of pet that needs to be fetched' - required: true - schema: - type: integer - format: int64 - maximum: 10 - minimum: 1 - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - delete: - tags: - - store - summary: 'Delete purchase order by ID' - description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' - operationId: deleteOrder - parameters: - - - name: orderId - in: path - description: 'ID of the order that needs to be deleted' - required: true - schema: - type: integer - format: int64 - minimum: 1 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - /user: - post: - tags: - - user - summary: 'Create user' - description: 'This can only be done by the logged in user.' - operationId: createUser - requestBody: - description: 'Created user object' - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithArray: - post: - tags: - - user - summary: 'Creates list of users with given input array' - description: '' - operationId: createUsersWithArrayInput - requestBody: - description: 'List of user object' - required: true - content: - multipart/form-data: - schema: - type: array - items: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithList: - post: - tags: - - user - summary: 'Creates list of users with given input array' - description: '' - operationId: createUsersWithListInput - requestBody: - description: 'List of user object' - required: true - content: - multipart/form-data: - schema: - type: array - items: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/login: - get: - tags: - - user - summary: 'Logs user into the system' - description: '' - operationId: loginUser - parameters: - - - name: username - in: query - description: 'The user name for login' - required: true - schema: - type: string - - - name: password - in: query - description: 'The password for login in clear text' - schema: - type: string - responses: - '200': - description: 'successful operation' - headers: - X-Rate-Limit: - description: 'calls per hour allowed by the user' - schema: - type: integer - format: int32 - X-Expires-After: - description: 'date in UTC when token expires' - schema: - type: string - format: date-time - '400': - description: 'Invalid username/password supplied' - /user/logout: - get: - tags: - - user - summary: 'Logs out current logged in user session' - description: '' - operationId: logoutUser - parameters: [] - responses: - default: - description: 'successful operation' - '/user/{username}': - get: - tags: - - user - summary: 'Get user by user name' - description: '' - operationId: getUserByName - parameters: - - - name: username - in: path - description: 'The name that needs to be fetched. Use user1 for testing. ' - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' - put: - tags: - - user - summary: 'Updated user' - description: 'This can only be done by the logged in user.' - operationId: updateUser - parameters: - - - name: username - in: path - description: 'name that need to be updated' - required: true - schema: - type: string - requestBody: - description: 'Updated user object' - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/User' - responses: - '400': - description: 'Invalid user supplied' - '404': - description: 'User not found' - delete: - tags: - - user - summary: 'Delete user' - description: 'This can only be done by the logged in user.' - operationId: deleteUser - parameters: - - - name: username - in: path - description: 'The name that needs to be deleted' - required: true - schema: - type: string - responses: - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' -components: - schemas: - ApiResponse: - properties: - code: - type: integer - format: int32 - type: - type: string - message: - type: string - type: object - Category: - properties: - id: - type: integer - format: int64 - name: - type: string - type: object - xml: - name: Category - Order: - properties: - id: - type: integer - format: int64 - petId: - type: integer - format: int64 - complete: - type: boolean - default: false - quantity: - type: integer - format: int32 - shipDate: - type: string - format: date-time - status: - description: 'Order Status.' - type: string - enum: - - placed - - approved - - delivered - type: object - xml: - name: Order - Pet: - required: - - name - - photoUrls - properties: - id: - type: integer - format: int64 - name: - type: string - example: doggie - category: - $ref: '#/components/schemas/Category' - photoUrls: - type: array - items: - type: string - xml: - name: photoUrl - wrapped: true - tags: - type: array - items: - $ref: '#/components/schemas/Tag' - xml: - name: tag - wrapped: true - status: - description: 'pet status in the store.' - type: string - enum: - - available - - pending - - sold - type: object - xml: - name: Pet - Tag: - properties: - id: - type: integer - format: int64 - name: - type: string - type: object - xml: - name: Tag - User: - properties: - id: - type: integer - format: int64 - username: - type: string - firstName: - type: string - lastName: - type: string - email: - type: string - password: - type: string - phone: - type: string - userStatus: - description: 'User Status.' - type: integer - format: int32 - type: object - xml: - name: User - securitySchemes: - api_key: - type: apiKey - name: api_key - in: header - petstore_auth: - type: oauth2 - flows: - implicit: - authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' - scopes: - 'read:pets': 'read your pets' - 'write:pets': 'modify pets in your account' -tags: - - - name: pet - description: 'Everything about your Pets' - externalDocs: - description: 'Find out more' - url: 'http://swagger.io' - - - name: store - description: 'Access to Petstore orders' - - - name: user - description: 'Operations about user' - externalDocs: - description: 'Find out more about our store' - url: 'http://swagger.io' -externalDocs: - description: 'Find out more about Swagger' - url: 'http://swagger.io' diff --git a/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php b/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php deleted file mode 100644 index 79c309b..0000000 --- a/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php +++ /dev/null @@ -1,38 +0,0 @@ -type = static::TYPE; - } -} diff --git a/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php b/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php deleted file mode 100644 index 914ef3c..0000000 --- a/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php +++ /dev/null @@ -1,40 +0,0 @@ -getAnnotationsOfType(Schema::class, true); - /** @var Operation[] $operations */ - $operations = $analysis->getAnnotationsOfType(Operation::class); - - foreach ($operations as $operation) { - if ($operation->x !== Generator::UNDEFINED && array_key_exists(self::X_QUERY_AGS_REF, $operation->x)) { - if ($schema = $this->schemaForRef($schemas, $operation->x[self::X_QUERY_AGS_REF])) { - $this->expandQueryArgs($operation, $schema); - $this->cleanUp($operation); - } - } - } - } - - /** - * Find schema for the given ref. - */ - protected function schemaForRef(array $schemas, string $ref) - { - foreach ($schemas as $schema) { - if (Components::ref($schema) === $ref) { - return $schema; - } - } - - return null; - } - - /** - * Expand the given operation by injecting parameters for all properties of the given schema. - */ - protected function expandQueryArgs(Operation $operation, Schema $schema) - { - if ($schema->properties == Generator::UNDEFINED || !$schema->properties) { - return; - } - - $operation->parameters = $operation->parameters == Generator::UNDEFINED ? [] : $operation->parameters; - foreach ($schema->properties as $property) { - $parameter = new Parameter([ - 'name' => $property->property, - 'in' => 'query', - 'required' => false, - ]); - $operation->parameters[] = $parameter; - } - } - - /** - * Clean up. - */ - protected function cleanUp($operation) - { - unset($operation->x[self::X_QUERY_AGS_REF]); - if (!$operation->x) { - $operation->x = Generator::UNDEFINED; - } - } -} diff --git a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php deleted file mode 100644 index 1e78978..0000000 --- a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php +++ /dev/null @@ -1,17 +0,0 @@ -addPsr4('App\\', __DIR__ . '/app'); -// and our custom processor -$classLoader->addPsr4('SchemaQueryParameterProcessor\\', __DIR__); - -$generator = new Generator(); - -// merge our custom processor -$processors = []; -foreach ($generator->getProcessors() as $processor) { - $processors[] = $processor; - if ($processor instanceof BuildPaths) { - $processors[] = new SchemaQueryParameter(); - } -} - -$options = [ - 'processors' => $processors, -]; - -$openapi = $generator - ->setProcessors($processors) - ->generate([__DIR__ . '/app']); -//file_put_contents(__DIR__ . '/schema-query-parameter.yaml', $openapi->toYaml()); -echo $openapi->toYaml(); diff --git a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml b/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml deleted file mode 100644 index c6a86d3..0000000 --- a/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml +++ /dev/null @@ -1,62 +0,0 @@ -openapi: 3.0.0 -info: - title: 'Example of using a custom processor in swagger-php' - version: 1.0.0 -paths: - '/products/{id}': - get: - tags: - - Products - operationId: 399b71a7672f0a46be1b5f4c120c355d - parameters: - - - name: id - in: path - required: true - responses: - '200': - description: 'A single product' - content: - application/json: - schema: - $ref: '#/components/schemas/Product' - /products/search: - get: - tags: - - Products - summary: 'Controller that takes all `Product` properties as query parameter.' - operationId: 178f74de3417eec20dee95709821e6ca - parameters: - - - name: id - in: query - required: false - - - name: name - in: query - required: false - responses: - '200': - description: 'A list of matching products' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Product' -components: - schemas: - Product: - title: Product - description: 'A simple product model' - properties: - id: - description: 'The unique identifier of a product in our catalog.' - type: integer - format: int64 - example: 1 - name: - type: string - format: int64 - example: 1 - type: object diff --git a/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php b/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php deleted file mode 100644 index 92fee26..0000000 --- a/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php +++ /dev/null @@ -1,20 +0,0 @@ -openapi->components) && is_iterable($analysis->openapi->components->schemas)) { - usort($analysis->openapi->components->schemas, function ($a, $b) { - return strcmp($a->schema, $b->schema); - }); - } - } -} diff --git a/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php b/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php deleted file mode 100644 index 8fa6f9b..0000000 --- a/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php +++ /dev/null @@ -1,46 +0,0 @@ - '$response.body#/username'])] - public function getRepositoriesByOwner($username) - { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}', - operationId: 'getRepository', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response( - response: 200, - description: 'The repository', - content: new OAT\JsonContent(ref: '#/components/schemas/repository'), - links: [ - new OAT\Link(link: 'repositoryPullRequests', ref: '#/components/links/RepositoryPullRequests'), - ] - ), - ] - ) - ] - #[OAT\Link(link: 'UserRepository', operationId: 'getRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] - public function getRepository() - { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}/{state}/pullrequests', - operationId: 'getPullRequestsByRepository', - responses: [ - new OAT\Response(response: 200, description: 'An array of pull request objects', content: new OAT\JsonContent(type: 'array', items: new OAT\Items(ref: '#/components/schemas/pullrequest'))), - ] - ) - ] - #[OAT\Link(link: 'RepositoryPullRequests', operationId: 'getPullRequestsByRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] - public function getPullRequestsByRepository( - #[OAT\PathParameter()] string $username, - #[OAT\PathParameter()] string $slug, - #[OAT\PathParameter()] State $state - ) { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}', - operationId: 'getPullRequestsById', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response(response: 200, description: 'A pull request object', content: new OAT\JsonContent(ref: '#/components/schemas/pullrequest'), links: [new OAT\Link(link: 'pullRequestMerge', ref: '#/components/links/PullRequestMerge')]), - ] - ) - ] - public function getPullRequestsById() - { - } - - #[OAT\Post( - path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge', - operationId: 'mergePullRequest', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response(response: 204, description: 'The PR was successfully merged'), - ] - ) - ] - #[OAT\Link(link: 'PullRequestMerge', operationId: 'mergePullRequest', parameters: ['username' => '$response.body#/author/username', 'slug' => '$response.body#/repository/slug', 'pid' => '$response.body#/id'])] - public function mergePullRequest() - { - } -} diff --git a/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php b/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php deleted file mode 100644 index 56e5a4f..0000000 --- a/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php +++ /dev/null @@ -1,19 +0,0 @@ - 'pong'])] - public array $arrayShape; -} diff --git a/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php b/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php deleted file mode 100644 index 7b8f7d7..0000000 --- a/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php +++ /dev/null @@ -1,16 +0,0 @@ -toYaml(); -``` -Documentation of how to use the `Generator` class can be found in the [Generator reference](https://zircote.github.io/swagger-php/reference/generator). - -### Usage from the Command Line Interface - -The `openapi` command line interface can be used to generate the documentation to a static yaml/json file. - -```bash -./vendor/bin/openapi --help -``` -Starting with version 4 the default analyser used on the command line is the new `ReflectionAnalyser`. - -Using the `--legacy` flag (`-l`) the legacy `TokenAnalyser` can still be used. - -### Usage from the Deserializer - -Generate the OpenApi annotation object from a json string, which makes it easier to manipulate objects programmatically. - -```php -deserialize($jsonString, 'OpenApi\Annotations\OpenApi'); -echo $openapi->toJson(); -``` - -### Usage from [docker](https://docker.com) - -Generate the swagger documentation to a static json file. - -``` -docker run -v "$PWD":/app -it tico/swagger-php --help -``` - -## More on OpenApi & Swagger - -- https://swagger.io -- https://www.openapis.org -- [OpenApi Documentation](https://swagger.io/docs/) -- [OpenApi Specification](http://swagger.io/specification/) -- [Related projects](docs/related-projects.md) - -## Contributing - -Feel free to submit [Github Issues](https://github.com/zircote/swagger-php/issues) -or pull requests. - -The documentation website is build from the [docs](docs/) folder with [vuepress](https://vuepress.vuejs.org). - -Make sure pull requests pass [PHPUnit](https://phpunit.de/) -and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PSR-2) tests. - -### To run both unit tests and linting execute: -```bash -composer test -``` - -### Running unit tests only: -```bash -./bin/phpunit -``` - -### Regenerate annotation/attribute reference markup docs -```bash -composer docs:refgen -``` - -### Running linting only: -```bash -composer lint -``` - -### To make `php-cs-fixer` fix linting errors: -```bash -composer cs -``` diff --git a/vendor/zircote/swagger-php/bin/openapi b/vendor/zircote/swagger-php/bin/openapi deleted file mode 100755 index 6f78272..0000000 --- a/vendor/zircote/swagger-php/bin/openapi +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/env php - false, - 'output' => false, - 'format' => 'auto', - 'exclude' => [], - 'pattern' => '*.php', - 'bootstrap' => false, - 'help' => false, - 'debug' => false, - 'processor' => [], - 'version' => null, -]; -$aliases = [ - 'l' => 'legacy', - 'o' => 'output', - 'e' => 'exclude', - 'n' => 'pattern', - 'b' => 'bootstrap', - 'h' => 'help', - 'd' => 'debug', - 'p' => 'processor', - 'f' => 'format' -]; -$needsArgument = [ - 'output', - 'format', - 'exclude', - 'pattern', - 'bootstrap', - 'processor', - 'version', -]; -$paths = []; -$error = false; - -try { - // Parse cli arguments - for ($i = 1; $i < $argc; $i++) { - $arg = $argv[$i]; - if (substr($arg, 0, 2) === '--') { // longopt - $option = substr($arg, 2); - } elseif ($arg[0] === '-') { // shortopt - if (array_key_exists(substr($arg, 1), $aliases)) { - $option = $aliases[$arg[1]]; - } else { - throw new Exception('Unknown option: "' . $arg . '"'); - } - } else { - $paths[] = $arg; - continue; - } - if (array_key_exists($option, $options) === false) { - throw new Exception('Unknown option: "' . $arg . '"'); - } - if (in_array($option, $needsArgument)) { - if (empty($argv[$i + 1]) || $argv[$i + 1][0] === '-') { - throw new Exception('Missing argument for "' . $arg . '"'); - } - if (is_array($options[$option])) { - $options[$option][] = $argv[$i + 1]; - } else { - $options[$option] = $argv[$i + 1]; - } - $i++; - } else { - $options[$option] = true; - } - } -} catch (\Exception $e) { - $error = $e->getMessage(); -} - -if (!$error && $options['bootstrap']) { - if (is_readable($options['bootstrap']) === false) { - $error = 'Invalid `--bootstrap` value: "'.$options['bootstrap'].'"'; - } else { - require_once($options['bootstrap']); - } -} -if (count($paths) === 0) { - $error = 'Specify at least one path.'; -} - -$logger = new ConsoleLogger($options['debug']); - -if ($options['help'] === false && $error) { - $logger->error('', ['prefix' => '']); - $logger->error($error); - // Show help - $options['help'] = true; -} -$defaultVersion = OpenApi::DEFAULT_VERSION; -if ($options['help']) { - $help = <<info($help); - exit(1); -} - -$errorTypes = [ - E_ERROR => 'Error', - E_WARNING => 'Warning', - E_PARSE => 'Parser error', - E_NOTICE => 'Notice', - E_STRICT => 'Strict', - E_DEPRECATED => 'Deprecated', - E_CORE_ERROR => 'Error(Core)', - E_CORE_WARNING => 'Warning(Core)', - E_COMPILE_ERROR => 'Error(compile)', - E_COMPILE_WARNING => 'Warning(Compile)', - E_RECOVERABLE_ERROR => 'Error(Recoverable)', - E_USER_ERROR => 'Error', - E_USER_WARNING => 'Warning', - E_USER_NOTICE => 'Notice', - E_USER_DEPRECATED => 'Deprecated', -]; -set_error_handler(function ($errno, $errstr, $file, $line) use ($errorTypes, $options, $logger) { - if (!(error_reporting() & $errno)) { - // This error code is not included in error_reporting - return; - } - $type = array_key_exists($errno, $errorTypes) ? $errorTypes[$errno] : 'Error'; - if ($type === 'Deprecated') { - $logger->info($errstr, ['prefix' => $type . ': ']); - } else { - $logger->error($errstr, ['prefix' => $type . ': ']); - } - - if ($options['debug']) { - $logger->info(' in '.$file.' on line '.$line); - } - if (substr($type, 0, 5) === 'Error') { - exit($errno); - } -}); - -set_exception_handler(function ($exception) use ($logger) { - $logger->error($exception); - exit($exception->getCode() ?: 1); -}); - -$exclude = null; -if ($options['exclude']) { - $exclude = $options['exclude']; - if (strpos($exclude[0], ',') !== false) { - $exploded = explode(',', $exclude[0]); - $logger->error('Comma-separated exclude paths are deprecated, use multiple --exclude statements: --exclude '.$exploded[0].' --exclude '.$exploded[1]); - $exclude[0] = array_shift($exploded); - $exclude = array_merge($exclude, $exploded); - } -} - -$pattern = "*.php"; -if ($options['pattern']) { - $pattern = $options['pattern']; -} - -$generator = new Generator($logger); -foreach ($options["processor"] as $processor) { - $class = '\OpenApi\Processors\\'.$processor; - if (class_exists($class)) { - $processor = new $class(); - } elseif (class_exists($processor)) { - $processor = new $processor(); - } - $generator->addProcessor($processor); -} - -$analyser = $options['legacy'] - ? new TokenAnalyser() - : new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); - -$openapi = $generator - ->setVersion($options['version']) - ->setAnalyser($analyser) - ->generate(Util::finder($paths, $exclude, $pattern)); - -if ($options['output'] === false) { - if (strtolower($options['format']) === 'json') { - echo $openapi->toJson(); - } else { - echo $openapi->toYaml(); - } - echo "\n"; -} else { - if (is_dir($options['output'])) { - $options['output'] .= '/openapi.yaml'; - } - $openapi->saveAs($options['output'], $options['format']); -} -exit($logger->loggedMessageAboveNotice() ? 1 : 0); diff --git a/vendor/zircote/swagger-php/composer.json b/vendor/zircote/swagger-php/composer.json deleted file mode 100644 index 8728e63..0000000 --- a/vendor/zircote/swagger-php/composer.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "zircote/swagger-php", - "type": "library", - "license": "Apache-2.0", - "bin": [ - "bin/openapi" - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "keywords": [ - "json", - "rest", - "api", - "service discovery" - ], - "homepage": "https://github.com/zircote/swagger-php/", - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "config": { - "bin-dir": "bin", - "optimize-autoloader": true, - "sort-packages": true, - "allow-plugins": { - "composer/package-versions-deprecated": true - } - }, - "minimum-stability": "stable", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "require": { - "php": ">=7.2", - "ext-json": "*", - "doctrine/annotations": "^1.7", - "psr/log": "^1.1 || ^2.0 || 3.0", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "autoload-dev": { - "exclude-from-classmap": [ - "/tests/Fixtures" - ], - "psr-4": { - "OpenApi\\Tools\\": "tools/src/", - "OpenApi\\Tests\\": "tests/", - "AnotherNamespace\\": "tests/Fixtures/AnotherNamespace" - } - }, - "scripts-descriptions": { - "cs": "Fix all codestyle issues", - "lint": "Test codestyle", - "test": "Run all non-legacy and codestyle tests", - "testlegacy": "Run tests using the legacy TokenAnalyser", - "testall": "Run all tests (test + testlegacy)", - "analyse": "Run static analysis (phpstan/psalm)", - "spectral": "Run spectral lint over all .yaml files in the Examples folder", - "docs:refgen": "Rebuild the annotations/attributes reference markup files", - "docs:dev": "Run dev server for local development of gh-pages", - "docs:build": "Re-build static gh-pages" - }, - "scripts": { - "cs": "php-cs-fixer fix --allow-risky=yes", - "lint": "@cs --dry-run", - "test": [ - "phpunit", - "@lint" - ], - "testlegacy": "export PHPUNIT_ANALYSER=legacy && phpunit", - "testall": [ - "@test", - "@testlegacy" - ], - "analyse": [ - "phpstan analyse --memory-limit=2G", - "psalm" - ], - "spectral": "for ff in `find Examples -name '*.yaml'`; do spectral lint $ff; done", - "docs:refgen": "php tools/refgen.php", - "docs:dev": "cd docs && npm run dev", - "docs:build": [ - "@docs:refgen", - "cd docs && npm run build" - ] - } -} diff --git a/vendor/zircote/swagger-php/docs/.vitepress/config.js b/vendor/zircote/swagger-php/docs/.vitepress/config.js deleted file mode 100644 index 468749b..0000000 --- a/vendor/zircote/swagger-php/docs/.vitepress/config.js +++ /dev/null @@ -1,82 +0,0 @@ -function getGuideSidebar() { - return [ - { - text: 'Introduction', - children: [ - { text: 'What is Swagger-PHP?', link: '/guide/' }, - { text: 'Installation', link: '/guide/installation' }, - { text: 'Generating OpenAPI documents', link: '/guide/generating-openapi-documents' }, - ] - }, - { - text: 'Annotating your code', - children: [ - { text: 'Attributes', link: '/guide/attributes' }, - { text: 'Annotations', link: '/guide/annotations' }, - { text: 'Required elements', link: '/guide/required-elements' }, - { text: 'Common techniques', link: '/guide/common-techniques' }, - ] - }, - { - text: 'Upgrading', - children: [ - { text: 'Migration from 3.x to 4.x', link: '/guide/migrating-to-v4' }, - { text: 'Migration from 2.x to 3.x', link: '/guide/migrating-to-v3' }, - ] - }, - { - text: 'Other', - children: [ - { text: 'Cookbook', link: '/guide/cookbook' }, - { text: 'FAQ', link: '/guide/faq' }, - { text: 'Under the hood', link: '/guide/under-the-hood' }, - { text: 'Related Projects', link: '/related-projects' }, - ] - }, - ] -} - -function getReferenceSidebar() { - return [ - { - text: 'Reference', - children: [ - { text: 'Attributes', link: '/reference/attributes' }, - { text: 'Annotations', link: '/reference/annotations' }, - ] - }, - { - text: 'Api', - children: [ - { text: 'Generator', link: '/reference/generator' }, - { text: 'Processors', link: '/reference/processors' }, - ] - }, - ] -} - - -module.exports = { - title: "Swagger-PHP", - base: "/swagger-php/", - description: "Generate OpenAPI documentation for your RESTful API.", - themeConfig: { - repo: 'zircote/swagger-php', - docsDir: 'docs', - docsBranch: 'master', - editLinks: false, - editLinkText: 'Edit this page on GitHub', - - nav: [ - { text: "User Guide", link: "/guide/" }, - { text: "Reference", link: "/reference/" }, - { text: "OpenApi", link: "https://oai.github.io/Documentation/" }, - { text: "Releases", link: "https://github.com/zircote/swagger-php/releases" }, - ], - - sidebar: { - '/guide/': getGuideSidebar(), - '/reference/': getReferenceSidebar() - } - } -}; diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue b/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue deleted file mode 100644 index bec5d06..0000000 --- a/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css b/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css deleted file mode 100644 index 557687d..0000000 --- a/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css +++ /dev/null @@ -1,30 +0,0 @@ -/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */ -:root { - --c-brand: #74a535; - --c-brand-light: #94c73d; - - --c-bg: #fefefe; -} - -.tabs-component { - margin: 2em 0; -} - -.tabs-component-panels { - padding: 0 0; - border: none; -} - -.tabs-component-tab-a { - padding: 0.5em; -} - -.tabs-component-tab { - transform: none; -} - -@media (min-width: 700px) { - .tabs-component-tab.is-active { - border-bottom: solid 1px #ddd; - } -} diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js b/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js deleted file mode 100644 index 9d856a3..0000000 --- a/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import DefaultTheme from "vitepress/theme"; -import {Tabs, Tab} from 'vue3-tabs-component'; -import Codeblock from "./components/Codeblock.vue"; -import "./tabs.css"; -import "./custom.css"; - -export default { - ...DefaultTheme, - enhanceApp({ app, router, siteData }) { - app.component('tabs', Tabs); - app.component('tab', Tab); - app.component('codeblock', Codeblock); - }, -}; diff --git a/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css b/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css deleted file mode 100644 index 9fa151d..0000000 --- a/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css +++ /dev/null @@ -1,80 +0,0 @@ -.tabs-component { - margin: 2em 0; -} - -.tabs-component-tabs { - border: solid 1px #ddd; - border-radius: 6px; - margin-bottom: 5px; -} - -@media (min-width: 700px) { - .tabs-component-tabs { - border: 0; - align-items: stretch; - display: flex; - justify-content: flex-start; - margin-bottom: -1px; - } -} - -.tabs-component-tab { - color: #999; - font-size: 14px; - font-weight: 600; - margin-right: 0; - list-style: none; -} - -.tabs-component-tab:hover { - color: #666; -} - -.tabs-component-tab.is-active { - color: #000; -} - -.tabs-component-tab.is-disabled * { - color: #cdcdcd; - cursor: not-allowed !important; -} - -@media (min-width: 700px) { - .tabs-component-tab { - background-color: #fff; - border: solid 1px #ddd; - border-radius: 3px 3px 0 0; - margin-right: 0.5em; - transform: translateY(2px); - transition: transform 0.3s ease; - } - - .tabs-component-tab.is-active { - border-bottom: solid 1px #fff; - z-index: 2; - transform: translateY(0); - } -} - -.tabs-component-tab-a { - align-items: center; - color: inherit; - display: flex; - padding: 0.5em 1.25em; - text-decoration: none; -} - -.tabs-component-panels { - padding: 1em 0; -} - -@media (min-width: 700px) { - .tabs-component-panels { - background-color: #fff; - border: solid 1px #ddd; - border-radius: 6px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); - padding: 1em 1em; - position: relative; - } -} diff --git a/vendor/zircote/swagger-php/docs/guide/annotations.md b/vendor/zircote/swagger-php/docs/guide/annotations.md deleted file mode 100644 index f73f609..0000000 --- a/vendor/zircote/swagger-php/docs/guide/annotations.md +++ /dev/null @@ -1,141 +0,0 @@ -# Annotations - -::: tip Namespace -Using a namespace alias simplifies typing and improves readability. - -All annotations are in the `OpenApi\Annotations` namespace. -::: - -Since Annotations are technically PHP comments, adding `use OpenApi\Annotations as OA;` is strictly speaking not necessary. -However, doctrine will be quite specific about whether an alias is valid or not. - -`swagger-php` will automatically register the `@OA` alias so all annotations can be used using the `@OA` shortcut without -any additional work. - -## Doctrine -Annotations are PHP comments (docblocks) containing [doctrine style annotations](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). - -::: info -All documentation related to doctrine applies to annotations only. -::: - -**Example:** -```php - openapi --bootstrap constants.php -``` -::: diff --git a/vendor/zircote/swagger-php/docs/guide/attributes.md b/vendor/zircote/swagger-php/docs/guide/attributes.md deleted file mode 100644 index ce6b229..0000000 --- a/vendor/zircote/swagger-php/docs/guide/attributes.md +++ /dev/null @@ -1,41 +0,0 @@ -# Attributes - -::: tip Namespace -Using a namespace alias simplifies typing and improves readability. - -All attributes are in the `OpenApi\Attributes` namespace. -::: - -## Nesting - -Similar to annotations attributes can be top level or nested. However, attributes **may be put at the same level** if -there is no ambiguity. `swagger-php` will then merge attributes according to the defined rules about parent/child -relationships. - -**Example** - -Nested: -```php - #[OA\Get( - path: '/api/users', - responses: [ - new OA\Response(response: 200, description: 'AOK'), - new OA\Response(response: 401, description: 'Not allowed'), - ] - )] - public function users() { /* ... */ } -``` - -Not nested: -```php - #[OA\Get(path: '/api/users')] - #[OA\Response(response: 200, description: 'AOK')] - #[OA\Response(response: 401, description: 'Not allowed')] - public function users() { /* ... */ } -``` - -Depending on how much nesting there is this can make things a bit simpler and easier to read. - -::: warning Top level only -Automatic merging of attributes works only at the top level - in the example that would be the method `users()`. -::: diff --git a/vendor/zircote/swagger-php/docs/guide/common-techniques.md b/vendor/zircote/swagger-php/docs/guide/common-techniques.md deleted file mode 100644 index dd3a19f..0000000 --- a/vendor/zircote/swagger-php/docs/guide/common-techniques.md +++ /dev/null @@ -1,190 +0,0 @@ -# Common techniques - -## Annotation placement - -You shouldn't place all annotations inside one big block, but scatter them throughout your codebase as close to the -relevant source code as appropriate. - -`swagger-php` will scan your project and merge all meta-data into one` @OA\OpenApi` annotation. - -::: warning -As of `swagger-php` v4 all annotations or attributes must be associated with -a structural element (`class`, `method`, `parameter` or `enum`) -::: - -## Context awareness - -`swagger-php` looks at the context of the annotation and will augment it with things like `property name`, -`data type` (doctype and native type hints) as well as a couple other things. - -This means in a lot of cases it is not necessary to explicitly document all details. - -**Example** -```php - new OA\Property(property: 'name', type: 'string'), - 'email' => new OA\Property(property: 'email', type: 'string'), - ] -)] -class User {} -``` - -## Using class name as type instead of references -Typically, when referencing schemas this is done using `$ref`'s - -```php -#[OAT\Schema(schema: 'user')] -class User -{ -} - -#[OAT\Schema()] -class Book -{ - /** - * @var User - */ - #[OAT\Property(ref: '#/components/schemas/user')] - public $author; -} -``` - -This works, but is not very convenient. - -First, when using custom schema names (`schema: 'user'`), this needs to be taken into account everywhere. -Secondly, having to write `ref: '#/components/schemas/user'` is tedious and error-prone. - -Using attributes all this changes as we can take advantage of PHP itself by referring to a schema by its (fully qualified) -class name. - -With the same `User` schema as before, the `Book::author` property could be written in a few different ways - -```php - #[OAT\Property()] - public User author; -``` - -**or** - -```php - /** - * @var User - */ - #[OAT\Property()] - public author; -``` - -**or** - -```php - #[OAT\Property(type: User::class)] - public author; -``` - -## Enums -As of PHP 8.1 there is native support for `enum`'s. - -`swagger-php` supports enums in much the same way as class names can be used to reference schemas. - -**Example** - -```php -#[Schema()] -enum State -{ - case OPEN; - case MERGED; - case DECLINED; -} - -#[Schema()] -class PullRequest - #[OAT\Property()] - public State $state -} -``` - -However, in this case the schema generated for `State` will be an enum: - -```yaml -components: - schemas: - PullRequest: - properties: - state: - $ref: '#/components/schemas/State' - type: object - State: - type: string - enum: - - OPEN - - MERGED - - DECLINED -``` - -## Multi value query parameter: `&q[]=1&q[]=1` - -PHP allows to have query parameters multiple times in the url and will combine the values to an array if the parameter -name uses trailing `[]`. In fact, it is possible to create nested arrays too by using more than one pair of `[]`. - -In terms of OpenAPI, the parameters can be considered a single parameter with a list of values. - -```php -/** - * @OA\Get( - * path="/api/endpoint", - * description="The endpoint", - * operationId="endpoint", - * tags={"endpoints"}, - * @OA\Parameter( - * name="things[]", - * in="query", - * description="A list of things.", - * required=false, - * @OA\Schema( - * type="array", - * @OA\Items(type="integer") - * ) - * ), - * @OA\Response(response="200", description="All good") - * ) - */ -``` - -The corresponding bit of the spec will look like this: - -```yaml - parameters: - - - name: 'things[]' - in: query - description: 'A list of things.' - required: false - schema: - type: array - items: - type: integer -``` - -`swagger-ui` will show a form that allows to add/remove items (`integer` values in this case) to/from a list -and post those values as something like ```?things[]=1&things[]=2&things[]=0``` - -## Custom response classes - -Even with using refs there is a bit of overhead in sharing responses. One way around that is to write -your own response classes. -The beauty is that in your custom `__construct()` method you can prefill as much as you need. - -Best of all, this works for both annotations and attributes. - -Example: -```php -use OpenApi\Attributes as OA; - -/** - * @Annotation - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] -class BadRequest extends OA\Response -{ - public function __construct() - { - parent::__construct(response: 400, description: 'Bad request'); - } -} - -class Controller -{ - - #[OA\Get(path: '/foo', responses: [new BadRequest()])] - public function get() - { - } - - #[OA\Post(path: '/foo')] - #[BadRequest] - public function post() - { - } - - /** - * @OA\Delete( - * path="/foo", - * @BadRequest() - * ) - */ - public function delete() - { - } -} -``` - -::: tip Annotations only? -If you are only interested in annotations you canleave out the attribute setup line (`#[\Attribute...`) for `BadRequest`. - -Furthermore, your custom annotations should extend from the `OpenApi\Annotations` namespace. -::: - -## Annotating class constants -```php -use OpenApi\Attributes as OA; - -#[OA\Schema()] -class Airport -{ - #[OA\Property(property='kind')] - public const KIND = 'Airport'; -} -``` -The `const` property is supported in OpenApi 3.1.0. -```yaml -components: - schemas: - Airport: - properties: - kind: - type: string - const: Airport -``` -For 3.0.0 this is serialized into a single value `enum`. -```yaml -components: - schemas: - Airport: - properties: - kind: - type: string - enum: - - Airport -``` diff --git a/vendor/zircote/swagger-php/docs/guide/faq.md b/vendor/zircote/swagger-php/docs/guide/faq.md deleted file mode 100644 index ee16686..0000000 --- a/vendor/zircote/swagger-php/docs/guide/faq.md +++ /dev/null @@ -1,80 +0,0 @@ -# FAQ - -## Warning: Required `@OA\Info()` not found - -With adding support for [PHP attributes](https://www.php.net/manual/en/language.attributes.php) in version 4, some -architectural changes had to be made. - -One of those changes is that placing annotations in your source files is now subject to the same limitations as attributes. -These limits are dictated by the PHP reflection API, specifically where it provides access to attributes and doc comments. - -This means stand-alone annotations are no longer supported and ignored as `swagger-php` cannot 'see' them any more. - -Supported locations: -* class -* interface -* trait -* method -* property -* class/interface const - -Most commonly this manifests with a warning about the required `@OA\Info` not being found. While most annotations have specific -related code, the info annotation (and a few more) is kind of global. - -The simplest solution to avoid this issue is to add a 'dummy' class to the docblock and add -all 'global' annotations (e.g. `Tag`, `Server`, `SecurityScheme`, etc.) **in a single docblock** to that class. - -```php -/** - * @OA\Tag( - * name="user", - * description="User related operations" - * ) - * @OA\Info( - * version="1.0", - * title="Example API", - * description="Example info", - * @OA\Contact(name="Swagger API Team") - * ) - * @OA\Server( - * url="https://example.localhost", - * description="API server" - * ) - */ -class OpenApiSpec -{ -} -``` - -## Skipping unknown `\SomeClass` - -This message means that `swagger-php` has tried to use reflection to inspect `\SomeClass` and that PHP could not find/load -that class. Effectively, this means that `class_exists("\SomeClass")` returns `false`. - -### Using the `-b` `--bootstrap` option - -There are a number of reasons why this could happen. If you are using the `openapi` command line tool from a global -installation typically the application classloader (composer) is not active. -With you application root being `myapp` you could try: - -```shell -openapi -b myapp/vendor/autoload.php myapp/src -``` - -The `-b` allows to execute some extra PHP code to load whatever is needed to register your apps classloader with PHP. - -### Namespace mismatch - -Another reason for this error could be that your class actually has the wrong namespace (or no namespace at all!). - -Depending on your framework this might still work in the context of your app, but the composer autoloader -alone might not be able to load your class (assuming you are using composer). - -## No output from `openapi` command line tool - -Depending on your PHP configuration, running the `openapi` command line tool might result in no output at all. - -The reason for this is that `openapi` currently uses the [`error_log`](https://www.php.net/manual/en/function.error-log.php) -function for all output. - -So if this is configured to write to a file, then it will seem like the command is broken. diff --git a/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md b/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md deleted file mode 100644 index c2eabcd..0000000 --- a/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md +++ /dev/null @@ -1,60 +0,0 @@ -# Generating OpenAPI documents - -## `./bin/openapi` - -`swagger-php` includes a command line tool `./bin/openapi`. This can be used to generate OpenAPI documents. - -```shell -> ./vendor/bin/openapi app -o openapi.yaml -``` - -::: tip Output Format -By default the output format is YAML. If a filename is given (via `--output` or `-o`) -the tool will use the file extension to determine the format. - -The `--format` option can be used to force a specific format. -::: - -For a list of all available options use the `-h` option - -```shell -> ./bin/openapi -h - -Usage: openapi [--option value] [/path/to/project ...] - -Options: - --legacy (-l) Use legacy TokenAnalyser; default is the new ReflectionAnalyser - --output (-o) Path to store the generated documentation. - ex: --output openapi.yaml - --exclude (-e) Exclude path(s). - ex: --exclude vendor,library/Zend - --pattern (-n) Pattern of files to scan. - ex: --pattern "*.php" or --pattern "/\.(phps|php)$/" - --bootstrap (-b) Bootstrap a php file for defining constants, etc. - ex: --bootstrap config/constants.php - --processor Register an additional processor. - --format Force yaml or json. - --debug Show additional error information. - --version The OpenAPI version; defaults to 3.0.0. - --help (-h) Display this help message. -``` - -## Using PHP - -Depending on your use case PHP code can also be used to generate OpenAPI documents in a more dynamic way. - -In its simplest form this may look something like - -```php -toYaml(); -``` - -::: tip Programming API -Details about the `swagger-php` API can be found in the [reference](../reference/index.md). -::: diff --git a/vendor/zircote/swagger-php/docs/guide/index.md b/vendor/zircote/swagger-php/docs/guide/index.md deleted file mode 100644 index e8c555b..0000000 --- a/vendor/zircote/swagger-php/docs/guide/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# What is Swagger-PHP? - -`swagger-php` is a library that extracts API metadata from your PHP source code files. - -The idea is to add `swagger-php` [annotations](annotations.md) or [attributes](attributes.md) -next to the relevant PHP code in your application. These will contain the details about your API and -`swagger-php` will convert those into machine-readable [OpenAPI documentation](https://oai.github.io/Documentation/specification.html). - -By adding your API documentation next to the corresponding source code (same file!) makes it easy to keep it up-to-date -as all details can be modified in one place. - -::: tip Annotating vs. Annotations -When talking about annotating your code we mean the act of adding meta-data to your codebase. This can be done by -either adding [`Annotations`](annotations.md) or [`Attributes`](attributes.md). -::: - -::: warning Requirements -Using `swagger-php` requires a minimum of **PHP 7.2** for using annotations and -at least **PHP 8.1** to use attributes. -::: diff --git a/vendor/zircote/swagger-php/docs/guide/installation.md b/vendor/zircote/swagger-php/docs/guide/installation.md deleted file mode 100644 index ba07e5b..0000000 --- a/vendor/zircote/swagger-php/docs/guide/installation.md +++ /dev/null @@ -1,20 +0,0 @@ -# Installation - -## Per project - -We recommend adding `swagger-php` to your project using [Composer](https://getcomposer.org) - -```shell -> composer require zircote/swagger-php -``` - -## Globally - -Alternatively, use the composer `global` argument to install `swagger-php` globally. - -```shell -> composer global require zircote/swagger-php -``` -::: warning PATH variables -Remember to add the `~/.composer/vendor/bin` directory to the PATH in your environment. -::: diff --git a/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md b/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md deleted file mode 100644 index 641e72d..0000000 --- a/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md +++ /dev/null @@ -1,58 +0,0 @@ -# Migrating to v3 - -Swagger-PHP 3.x generates an openapi.json file that follows the [OpenAPI Version 3.0.x Specification](https://github.com/OAI/OpenAPI-Specification). - -If you need to output the older 2.x specification use OpenApi-php 2.x - -## The default output changed from json to yaml - -This aligns better with the direction of the swagger documentation and examples. -Annotations can't be used as string anymore, you'll need to call `toYaml()` or `toJson()` if you prefer the json format. - -## Updated CLI - -- Added colors -- No output for successful execution (Removed summary) -- non-zero exit when an error occurred. -- Defaults to yaml -- Defaults to stdout. To save to openapi.yaml use `-o` or `>` - -## Changed annotations - -### SWG is renamed to OA - -The namespace is renamed from SWG (Swagger) to OA (OpenApi) - -### @SWG\Swagger() is renamed to @OA\OpenApi() - -### @SWG\Path() is renamed to @OA\PathItem() - -The specification uses the term "Path Item Object", updated the annotation to reflect that. - -### @SWG\Definition() is removed - -Use @OA\Schema() instead of @OA\Definition() and update the references from "#/definitions/something" to "#/components/schemas/something". - -### @SWG\Path is removed - -Use @OA\PathItem instead of @SWG\Path and update references. - -### Consumes, produces field is removed from OpenAPI specification - -Use @OA\MediaType to set data format. - -### Rename parameter references - -Rename `#/parameters/{parameter_name}` to `#/components/parameters/{parameter_name}` - -### Rename response references - -Rename `#/responses/{response}` to `#/components/responses/{response}` - -### Renamed cli - -Renamed swagger to openapi - -### More details about differences: - -[A Visual Guide to What's New in Swagger 3.0](https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/) diff --git a/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md b/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md deleted file mode 100644 index 3e619a6..0000000 --- a/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md +++ /dev/null @@ -1,138 +0,0 @@ -# Migrating to v4 - -## Overview -* As of PHP 8.1 annotations may be used as - [PHP attributes](https://www.php.net/manual/en/language.attributes.overview.php) instead. - That means all references to annotations in this document also apply to attributes. -* Annotations now **must be** associated with a structural element (class, trait, interface), a method, property or const. -* A new annotation `PathParameter` was added for improved framework support. -* A new annotation `Attachable` was added to simplify custom processing. - `Attachable` can be used to attach arbitrary data to any given annotation. -* Deprecated elements have been removed - * `\Openapi\Analysis::processors()` - * `\Openapi\Analyser::$whitelist` - * `\Openapi\Analyser::$defaultImports` - * `\Openapi\Logger` -* Legacy support is available via the previous `TokenAnalyser` -* Improvements to the `Generator` class - -## Annotations as PHP attributes -While PHP attributes have been around since PHP 8.0 they were lacking the ability to be nested. -This changes with PHP 8.1 which allows to use `new` in initializers. - -Swagger-php attributes also make use of named arguments, so attribute parameters can be (mostly) typed. -There are some limitations to type hints which can only be resolved once support for PHP 7.x is dropped. - -### Using annotations -```php - -use OpenApi\Annotations as OA; - -/** - * @OA\Info( - * version="1.0.0", - * title="My API", - * @OA\License(name="MIT"), - * @OA\Attachable() - * ) - */ -class OpenApiSpec -{ -} -``` -### Using attributes -```php - -use OpenApi\Attributes as OA; - -#[OA\Info( - version: '1.0.0', - title: 'My API', - attachables: [new OA\Attachable()] -)] -#[OA\License(name: 'MIT')] -class OpenApiSpec -{ -} -``` - -## Optional nesting -One of the few differences between annotations and attributes visible in the above example is that the `OA\License` attribute -is not nested within `OA\Info`. Nesting of attributes is possible and required in certain cases however, **in cases where there -is no ambiguity attributes may be all written on the top level** and swagger-php will do the rest. - -## Annotations must be associated with a structural element -The (now legacy) way of parsing PHP files meant that docblocks could live in a file without a single line -of actual PHP code. - -PHP Attributes cannot exist in isolation; they need code to be associated with and then are available -via reflection on the associated structural element. -In order to allow to keep supporting annotations and the code simple it made sense to treat annotations and attributes -the same in this respect. - -## The `PathParameter` annotation -As annotation this is just a short form for -```php - @OA\Parameter(in='body') -``` - -Things get more interesting when it comes to using it as attribute, though. In the context of -a controller you can now do something like -```php -class MyController -{ - #[OA\Get(path: '/products/{product_id}')] - public function getProduct( - #[OA\PathParameter] string $product_id) - { - } -} -``` -Here it avoids having to duplicate details about the `$product_id` parameter and the simple use of the attribute -will pick up typehints automatically. - -## The `Attachable` annotation -Technically these were added in version 3.3.0, however they become really useful only with version 4. - -The attachable annotation is similar to the OpenApi vendor extension `x=`. The main difference are that -1. Attachables allow complex structures and strong typing -2. **Attachables are not added to the generated spec.** - -Their main purpose is to make customizing swagger-php easier by allowing to add arbitrary data to any annotation. - -One possible use case could be custom annotations. Classes extending `Attachable` are allowed to limit -the allowed parent annotations. This means it would be easy to create a new attribute to flag certain endpoints -as private and exclude them under certain conditions from the spec (via a custom processor). - -## Removed deprecated elements -### `\Openapi\Analysis::processors()` -Processors have been moved into the `Generator` class incl. some new convenience methods. -### `\Openapi\Analyser::$whitelist` -This has been replaced with the `Generator` `namespaces` property. -### `\Openapi\Analyser::$defaultImports` -This has been replaced with the `Generator` `aliases` property. -### `\Openapi\Logger` -This class has been removed completely. Instead, you may configure a [PSR-3 logger](https://www.php-fig.org/psr/psr-3/). - -## Improvements to the `Generator` class -The removal of deprecated static config options means that the `Generator` class now is -the main entry point into swagger-php when used programmatically. - -To make the migration as simple as possible a new `Generator::withContext(callable)` has been added. -This allows to use parts of the library (an `Analyser` instance, for example) within the context of a `Generator` instance. - -Example: -```php -$analyser = createMyAnalyser(); - -$analysis = (new Generator()) - ->addAlias('fo', 'My\\Attribute\\Namespace') - ->addNamespace('Other\\Annotations\\') - ->withContext(function (Generator $generator, Analysis $analysis, Context $context) use ($analyser) { - $analyser->setGenerator($generator); - $analysis = $analyser->fromFile('my_code.php', $context); - $analysis->process($generator->getProcessors()); - - return $analysis; - }); -``` diff --git a/vendor/zircote/swagger-php/docs/guide/required-elements.md b/vendor/zircote/swagger-php/docs/guide/required-elements.md deleted file mode 100644 index b14f5a6..0000000 --- a/vendor/zircote/swagger-php/docs/guide/required-elements.md +++ /dev/null @@ -1,41 +0,0 @@ -# Required elements - -The OpenAPI specification defines a minimum set of information for a valid document. - -For the most part that consists of some general information about the API like `name`, `version` -and at least one endpoint. - -The endpoint, in turn, needs to have a path and at least one response. - -## Minimum required annotations - -With the above in mind a minimal API with a single endpoint could look like this - - - - - - -with the resulting OpenAPI document like this - -<<< @/snippets/minimal_api.yaml - -::: warning Code locations -Attributes and annotations can be added anywhere on declarations in code as defined by the PHP docs. -These are limited to the extent of what the PHP Reflection APIs supports. -::: - -## Optional elements - -Looking at the generated document you will notice that there are some elements that `swagger-php` adds automatically -when they are missing. - -For the most part those are `@OA\OpenApi`, `@OA\Components` and `@OA\PathItem`. diff --git a/vendor/zircote/swagger-php/docs/guide/under-the-hood.md b/vendor/zircote/swagger-php/docs/guide/under-the-hood.md deleted file mode 100644 index 7ee2dbb..0000000 --- a/vendor/zircote/swagger-php/docs/guide/under-the-hood.md +++ /dev/null @@ -1,50 +0,0 @@ -# Under the hood - -## Processing flow - -- The `Generator` iterates over the given sources (Symfony `Finder`, file/directory list, etc) -- The configured analyser (`AnalyserInterface`) reads the files and builds an `Analysis` object. - Default (as of v4) is the `ReflectionAnalyser`. Alternatively, there is the `TokenAnalyser` which was the default in v3. -- The `Analysis` object and its annotations are then processed by the configured processors. -- If enabled, the analysis/annotations are validated. -- The root `OpenApi` annotation then contains all annotations and is serialized into YAML/JSON. - -## `Context` - -Each annotation is associated with a unique `Context` instance. This contains details, collected by the parser/analyser, -about the PHP context where the annotation was found. - -Typically, there will be a processor that uses the data to augment/enrich the annotation. - -**Examples of the data collected:** - - class/interface/trait/enum names - - property names - - doctype or native type hints - - file name and line number - -## Analysis - -Contains all detected annotations and other relevant meta-data. - -It uses a `SplObjectStorage` instance to store the parsed annotations. - -## Documentation - -This documentation is generated with [VitePress](https://vitepress.vuejs.org/) - -### Installation -```shell -cd docs -npm install vitepress -``` - -### Workflow - -* Edit `.md` files in the `docs` folder -* Update annotation / attribute PHP docblocks.
These will be extracted during publishing into the [reference](../reference/) section. -* Run 'composer docs:build' to check for any errors -* Run 'composer docs:dev' to test the generated documentation locally (`localhost:3000`) -* Create PR and update `master` -* Manually trigger the `gh-pages` workflow to update the online docs. - -The last step requires commit rights on `zircote/swagger-php`. diff --git a/vendor/zircote/swagger-php/docs/index.md b/vendor/zircote/swagger-php/docs/index.md deleted file mode 100644 index b862797..0000000 --- a/vendor/zircote/swagger-php/docs/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -home: true -actionText: User Guide → -actionLink: /guide/ -features: - - title: OpenAPI conformant - details: Generate OpenAPI documents in version 3.0 or 3.1. - - title: Document your API inside PHP source code - details: Using swagger-php lets you write the API documentation inside the PHP source files - which helps keeping the documentation up-to-date. - - title: Annotation and Attribute support - details: Annotations can be either docblocks or PHP 8.1 attributes. ---- - -### 1. Install with composer: - -```shell -> composer require zircote/swagger-php -``` - -### 2. Update your code - -Add `swagger-php` annotations or attributes to your source code. - - - - - - -### 3. Generate OpenAPI documentation - -```shell -> ./bin/openapi src -o openapi.yaml -``` - -### 4. Explore and interact with your API - -Use an OpenAPI tool like [Swagger UI ](https://swagger.io/tools/swagger-ui/) to explore and interact with your API. - -## Links - -- [User Guide](guide/index.md) -- [Reference](reference/index.md) -- [OpenApi Documentation](https://oai.github.io/Documentation/) -- [OpenApi Specification](https://spec.openapis.org/oas/v3.1.0.html) -- [Learn by example](https://github.com/zircote/swagger-php/tree/master/Examples) -- [Related projects](related-projects.md) -- [Swagger-php 2.x documentation](https://github.com/zircote/swagger-php/tree/2.x/docs) diff --git a/vendor/zircote/swagger-php/docs/package.json b/vendor/zircote/swagger-php/docs/package.json deleted file mode 100644 index 1663db1..0000000 --- a/vendor/zircote/swagger-php/docs/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "swagger-php-docs", - "version": "4.0.0", - "license": "Apache-2.0", - "scripts": { - "dev": "vitepress dev .", - "build": "vitepress build .", - "deploy": "npm run build && git-directory-deploy --branch gh-pages --directory .vitepress/dist/" - }, - "devDependencies": { - "vitepress": "^0.22", - "vue3-tabs-component": "^1.0.8" - } -} diff --git a/vendor/zircote/swagger-php/docs/reference/annotations.md b/vendor/zircote/swagger-php/docs/reference/annotations.md deleted file mode 100644 index 5f83e69..0000000 --- a/vendor/zircote/swagger-php/docs/reference/annotations.md +++ /dev/null @@ -1,1212 +0,0 @@ -# Annotations - -This page is generated automatically from the `swagger-php` sources. - -For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) - -In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. - - -## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Annotations/AdditionalProperties.php) - - - -#### Allowed in ---- -Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Attachable.php) - -A container for custom data to be attached to an annotation. - -These will be ignored by `swagger-php` but can be used for custom processing. - -#### Allowed in ---- -AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent - -## [Components](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Components.php) - -Holds a set of reusable objects for different aspects of the OA. - -All objects defined within the components object will have no effect on the API unless they are explicitly -referenced from properties outside the components object. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable - -#### Properties ---- -
-
callbacks : callable[]
-

Reusable Callbacks.

-
- -#### Reference ---- -- [OAI Components Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#components-object) - -## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Contact.php) - -Contact information for the exposed API. - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

The identifying name of the contact person/organization.

-
url : string
-

The URL pointing to the contact information.

-
email : string
-

The email address of the contact person/organization.

-
- -#### Reference ---- -- [OAI Contact Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#contact-object) - -## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Delete.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Discriminator.php) - -The discriminator is a specific object in a schema which is used to inform the consumer of -the specification of an alternative schema based on the value associated with it. - -This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. -On top of this subset, there are extensions provided by this specification to allow for more complete documentation. - -#### Allowed in ---- -Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
propertyName : string
-

The name of the property in the payload that will hold the discriminator value.

-
mapping : string[]
-

An object to hold mappings between payload values and schema names or references.

-
- -#### Reference ---- -- [OAI Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminatorObject) -- [JSON Schema](http://json-schema.org/) - -## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Examples.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
example : string
-

The key into `#/components/examples`.

-
summary : string
-

Short description for the example.

-
description : string
-

Embedded literal example.
-
-The value field and externalValue field are mutually exclusive.
-
-To represent examples of media types that cannot naturally be represented
-in JSON or YAML, use a string value to contain the example, escaping where necessary.

-
value : int|string|array
-

Embedded literal example.
-
-The value field and externalValue field are mutually exclusive.
-
-To represent examples of media types that cannot naturally be represented
-in JSON or YAML, use a string value to contain the example, escaping where necessary.

-
externalValue : string
-

An URL that points to the literal example.
-
-This provides the capability to reference examples that cannot easily be included
-in JSON or YAML documents.
-
-The value field and externalValue field are mutually exclusive.

-
- -## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ExternalDocumentation.php) - -Allows referencing an external resource for extended documentation. - -#### Allowed in ---- -OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
description : string
-

A short description of the target documentation. GFM syntax can be used for rich text representation.

-
url : string
-

The URL for the target documentation.

-
- -#### Reference ---- -- [OAI External Documentation Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#external-documentation-object) - -## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Flow.php) - -Configuration details for a supported OAuth Flow. - -#### Allowed in ---- -SecurityScheme - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
authorizationUrl : string
-

The authorization url to be used for this flow.
-
-This must be in the form of an url.

-
tokenUrl : string
-

The token URL to be used for this flow.
-
-This must be in the form of an url.

-
refreshUrl : string
-

The URL to be used for obtaining refresh tokens.
-
-This must be in the form of an url.

-
flow : string
-

Flow name.
-
-One of ['implicit', 'password', 'authorizationCode', 'clientCredentials'].

-
scopes : array
-

The available scopes for the OAuth2 security scheme.
-
-A map between the scope name and a short description for it.

-
- -#### Reference ---- -- [OAI OAuth Flow Object](https://swagger.io/specification/#oauthFlowObject) - -## [Get](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Get.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Head](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Head.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Header](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Header.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Schema, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
header : string
-

No details available.

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-CommonMark syntax MAY be used for rich text representation.

-
required : bool
-

No details available.

-
deprecated : bool
-

Specifies that a parameter is deprecated and SHOULD be transitioned out of usage.

-
allowEmptyValue : bool
-

Sets the ability to pass empty-valued parameters.
-
-This is valid only for query parameters and allows sending a parameter with an empty value.
-
-Default value is false.
-
-If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue SHALL be ignored.

-
- -#### Reference ---- -- [OAI Header Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#headerObject). - -## [Info](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Info.php) - -The object provides metadata about the API. - -The metadata may be used by the clients if needed and may be presented in editing or documentation generation tools for convenience. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Contact, License, Attachable - -#### Properties ---- -
-
title : string
-

The title of the application.

-
description : string
-

A short description of the application.
-
-CommonMark syntax may be used for rich text representation.

-
termsOfService : string
-

An URL to the Terms of Service for the API.
-
-Must be in the format of an url.

-
version : string
-

The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API implementation version).

-
- -#### Reference ---- -- [OAI Info Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#info-object) - -## [Items](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Items.php) - -The description of an item in a Schema with type `array`. - -#### Allowed in ---- -Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/JsonContent.php) - -Shorthand for a json response. - -Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/json'` will be generated. - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable - -## [License](https://github.com/zircote/swagger-php/tree/master/src/Annotations/License.php) - -License information for the exposed API. - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

The license name used for the API.

-
identifier : string
-

An SPDX license expression for the API. The `identifier` field is mutually exclusive of the `url` field.

-
url : string
-

An URL to the license used for the API. This MUST be in the form of an URL.
-
-The `url` field is mutually exclusive of the `identifier` field.

-
- -#### Reference ---- -- [OAI License Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#license-object) - -## [Link](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Link.php) - -The Link object represents a possible design-time link for a response. - -The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known -relationship and traversal mechanism between responses and other operations. - -Unlike dynamic links (i.e. links provided in the response payload), the OA linking mechanism does not require -link information in the runtime response. - -For computing links, and providing instructions to execute them, a runtime expression is used for -accessing values in an operation and using them as parameters while invoking the linked operation. - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Server, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
link : string
-

The key into MediaType->links array.

-
operationRef : string
-

A relative or absolute reference to an OA operation.
-
-This field is mutually exclusive of the operationId field, and must point to an Operation object.
-
-Relative values may be used to locate an existing Operation object in the OpenAPI definition.

-
operationId : string
-

The name of an existing, resolvable OA operation, as defined with a unique operationId.
-
-This field is mutually exclusive of the operationRef field.

-
parameters : array<string,mixed>
-

A map representing parameters to pass to an operation as specified with operationId or identified via
-operationRef.
-
-The key is the parameter name to be used, whereas the value can be a constant or an expression to
-be evaluated and passed to the linked operation.
-The parameter name can be qualified using the parameter location [{in}.]{name} for operations
-that use the same parameter name in different locations (e.g. path.id).

-
requestBody
-

A literal value or {expression} to use as a request body when calling the target operation.

-
description : string
-

A description of the link.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Link Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object) - -## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Annotations/MediaType.php) - -Each Media Type object provides schema and examples for the media type identified by its key. - -#### Allowed in ---- -Response, RequestBody - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
mediaType : string
-

The key into Operation->content array.

-
example
-

Example of the media type.
-
-The example object should be in the correct format as specified by the media type.
-The example object is mutually exclusive of the examples object.
-
-Furthermore, if referencing a schema which contains an example,
-the example value shall override the example provided by the schema.

-
encoding : array<string,mixed>
-

A map between a property name and its encoding information.
-
-The key, being the property name, must exist in the schema as a property.
-
-The encoding object shall only apply to requestBody objects when the media type is multipart or
-application/x-www-form-urlencoded.

-
- -#### Reference ---- -- [OAI Media Type Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) - -## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Annotations/OpenApi.php) - -This is the root document object for the API specification. - -#### Nested elements ---- -Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable - -#### Properties ---- -
-
openapi : string
-

The semantic version number of the OpenAPI Specification version that the OpenAPI document uses.
-
-The openapi field should be used by tooling specifications and clients to interpret the OpenAPI document.
-
-A version specified via `Generator::setVersion()` will overwrite this value.
-
-This is not related to the API info::version string.

-
security : array
-

Lists the required security schemes to execute this operation.
-
-The name used for each property must correspond to a security scheme declared
-in the Security Schemes under the Components Object.
-Security Requirement Objects that contain multiple schemes require that
-all schemes must be satisfied for a request to be authorized.
-This enables support for scenarios where multiple query parameters or
-HTTP headers are required to convey security information.
-When a list of Security Requirement Objects is defined on the Open API object or
-Operation Object, only one of Security Requirement Objects in the list needs to
-be satisfied to authorize the request.

-
- -#### Reference ---- -- [OAI OpenApi Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#openapi-object) - -## [Options](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Options.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Parameter.php) - -Describes a single operation parameter. - -A unique parameter is defined by a combination of a name and location. - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
parameter : string
-

The key into Components::parameters or PathItem::parameters array.

-
name : string
-

The (case-sensitive) name of the parameter.
-
-If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object.
-
-If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored.
-For all other cases, the name corresponds to the parameter name used by the in property.

-
in : string
-

The location of the parameter.
-
-Possible values are "query", "header", "path" or "cookie".

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-
-CommonMark syntax may be used for rich text representation.

-
required : bool
-

Determines whether this parameter is mandatory.
-
-If the parameter location is "path", this property is required and its value must be true.
-Otherwise, the property may be included and its default value is false.

-
deprecated : bool
-

Specifies that a parameter is deprecated and should be transitioned out of usage.

-
allowEmptyValue : bool
-

Sets the ability to pass empty-valued parameters.
-
-This is valid only for query parameters and allows sending a parameter with an empty value.
-
-Default value is false.
-
-If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored.

-
style : string
-

Describes how the parameter value will be serialized depending on the type of the parameter value.
-
-Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form.

-
explode : bool
-

When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map.
-
-For other types of parameters this property has no effect.
-
-When style is form, the default value is true.
-For all other styles, the default value is false.

-
allowReserved : bool
-

Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding.
-
-This property only applies to parameters with an in value of query.
-
-The default value is false.

-
example
-

Example of the media type.
-
-The example should match the specified schema and encoding properties if present.
-The example object is mutually exclusive of the examples object.
-Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema.
-To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary.

-
content : MediaType[]
-

A map containing the representations for the parameter.
-
-The key is the media type and the value describes it.
-The map must only contain one entry.

-
matrix
-

Path-style parameters defined by RFC6570.

See: RFC6570

-
label
-

Label style parameters defined by RFC6570.

See: RFC6570

-
form
-

Form style parameters defined by RFC6570.
-
-This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0.

See: RFC6570

-
simple : array
-

Simple style parameters defined by RFC6570.
-
-This option replaces collectionFormat with a csv value from OpenAPI 2.0.

See: RFC6570

-
spaceDelimited : array
-

Space separated array values.
-
-This option replaces collectionFormat equal to ssv from OpenAPI 2.0.

-
pipeDelimited : array
-

Pipe separated array values.
-
-This option replaces collectionFormat equal to pipes from OpenAPI 2.0.

-
deepObject
-

Provides a simple way of rendering nested objects using form parameters.

-
- -#### Reference ---- -- [OAA Parameter Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) - -## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Patch.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathItem.php) - -Describes the operations available on a single path. - -A Path Item may be empty, due to ACL constraints. -The path itself is still exposed to the documentation viewer, but they will not know which operations and parameters are available. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
path : string
-

Key for the Path Object (OpenApi->paths array).

-
summary : string
-

An optional, string summary, intended to apply to all operations in this path.

-
- -#### Reference ---- -- [OAI Path Item Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object) - -## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathParameter.php) - -A `@OA\Request` path parameter. - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
in
-

No details available.

-
required
-

No details available.

-
- -## [Post](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Post.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Property](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Property.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Properties ---- -
-
property : string
-

The key into Schema->properties array.

-
- -## [Put](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Put.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Annotations/RequestBody.php) - -Describes a single request body. - -#### Allowed in ---- -Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put - -#### Nested elements ---- -MediaType, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
request : string
-

Request body model name.

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-
-CommonMark syntax may be used for rich text representation.

-
required : bool
-

Determines whether this parameter is mandatory.
-
-If the parameter location is "path", this property is required and its value must be true.
-Otherwise, the property may be included and its default value is false.

-
- -#### Reference ---- -- [OAI Request Body Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#requestBodyObject) - -## [Response](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Response.php) - -Describes a single response from an API Operation, including design-time, -static links to operations based on the response. - -#### Allowed in ---- -Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace - -#### Nested elements ---- -MediaType, Header, Link, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
response : string|int
-

The key into Operations->responses array.
-
-A HTTP status code or default.

-
description : string
-

A short description of the response.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object) - -## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Schema.php) - -The definition of input and output data types. - -These types can be objects, but also primitives and arrays. - -This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. -On top of this subset, there are extensions provided by this specification to allow for more complete documentation. - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, Header - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
schema : string
-

The key into Components->schemas array.

-
title : string
-

Can be used to decorate a user interface with information about the data produced by this user interface.
-
-Preferably short; use description for more details.

-
description : string
-

A description will provide explanation about the purpose of the instance described by this schema.

-
maxProperties : int
-

An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the
-value of this property.

-
minProperties : int
-

An object instance is valid against "minProperties" if its number of properties is greater than, or equal to,
-the value of this property.

-
required : string[]
-

An object instance is valid against this property if its property set contains all elements in this property's
-array value.

-
type : string
-

The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or
-"object".

-
format : string
-

The extending format for the previously mentioned type. See Data Type Formats for further details.

-
collectionFormat : string
-

Determines the format of the array if type array is used.
-Possible values are:
-- csv: comma separated values foo,bar.
-- ssv: space separated values foo bar.
-- tsv: tab separated values foo\tbar.
-- pipes: pipe separated values foo|bar.
-- multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz.
-This is valid only for parameters of type query or formData.
-Default value is csv.

-
default
-

Sets a default value to the parameter. The type of the value depends on the defined type.

See: JSON schema validation

-
maximum : int|float
-

No details available.

See: JSON schema validation

-
exclusiveMaximum : bool
-

No details available.

See: JSON schema validation

-
minimum : int|float
-

No details available.

See: JSON schema validation

-
exclusiveMinimum : bool
-

No details available.

See: JSON schema validation

-
maxLength : int
-

No details available.

See: JSON schema validation

-
minLength : int
-

No details available.

See: JSON schema validation

-
pattern : string
-

A string instance is considered valid if the regular expression matches the instance successfully.

-
maxItems : int
-

No details available.

See: JSON schema validation

-
minItems : int
-

No details available.

See: JSON schema validation

-
uniqueItems : bool
-

No details available.

See: JSON schema validation

-
enum : string[]|int[]|float[]
-

No details available.

See: JSON schema validation

-
multipleOf : int|float
-

A numeric instance is valid against "multipleOf" if the result of the division of the instance by this
-property's value is an integer.

-
readOnly : bool
-

Declares the property as "read only".
-
-Relevant only for Schema "properties" definitions.
-
-This means that it may be sent as part of a response but should not be sent as part of the request.
-If the property is marked as readOnly being true and is in the required list, the required will take effect on
-the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is
-false.

-
writeOnly : bool
-

Declares the property as "write only".
-
-Relevant only for Schema "properties" definitions.
-Therefore, it may be sent as part of a request but should not be sent as part of the response.
-If the property is marked as writeOnly being true and is in the required list, the required will take effect on
-the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is
-false.

-
example
-

A free-form property to include an example of an instance for this schema.
-
-To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to
-contain the example with escaping where necessary.

-
nullable : bool
-

Allows sending a null value for the defined schema.
-Default value is false.

-
deprecated : bool
-

Specifies that a schema is deprecated and should be transitioned out of usage.
-Default value is false.

-
allOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against all schemas
-defined by this property's value.

-
anyOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against at least one
-schema defined by this property's value.

-
oneOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against exactly one schema
-defined by this property's value.

-
not
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29.

-
additionalItems
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10.

-
contains
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14.

-
patternProperties
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19.

-
dependencies
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21.

-
propertyNames
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22.

-
const : mixed
-

http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3.

-
- -#### Reference ---- -- [OAI Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schemaObject) -- [JSON Schema](http://json-schema.org/) - -## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Annotations/SecurityScheme.php) - - - -#### Allowed in ---- -Components - -#### Nested elements ---- -Flow, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
securityScheme : string
-

The key into OpenApi->security array.

-
type : string
-

The type of the security scheme.

-
description : string
-

A short description for security scheme.

-
name : string
-

The name of the header or query parameter to be used.

-
in : string
-

Required The location of the API key.

-
bearerFormat : string
-

A hint to the client to identify how the bearer token is formatted.
-
-Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.

-
scheme : string
-

The name of the HTTP Authorization scheme.

See: RFC7235

-
openIdConnectUrl : string
-

OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL.

-
- -#### Reference ---- -- [OAI Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#securitySchemeObject). - -## [Server](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Server.php) - -An object representing a server. - -#### Allowed in ---- -OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link - -#### Nested elements ---- -ServerVariable, Attachable - -#### Properties ---- -
-
url : string
-

An URL to the target host.
-
-This URL supports Server Variables and may be relative,
-to indicate that the host location is relative to the location where the OpenAPI document is being served.
-Variable substitutions will be made when a variable is named in {brackets}.

-
description : string
-

An optional string describing the host designated by the URL.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Server Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-object) - -## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ServerVariable.php) - -An object representing a server variable for server URL template substitution. - -#### Allowed in ---- -Server - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
serverVariable : string
-

The key into Server->variables array.

-
enum : string[]|int[]|float[]
-

An enumeration of values to be used if the substitution options are from a limited set.

-
default : string
-

The default value to use for substitution, and to send, if an alternate value is not supplied.
-
-Unlike the Schema Object's default, this value must be provided by the consumer.

-
variables : array
-

A map between a variable name and its value.
-
-The value is used for substitution in the server's URL template.

-
description : string
-

An optional description for the server variable.
-
-CommonMark syntax MAY be used for rich text representation.

-
- -#### Reference ---- -- [OAI Server Variable Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object) - -## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Tag.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -ExternalDocumentation, Attachable - -#### Properties ---- -
-
name : string
-

The name of the tag.

-
description : string
-

A short description for the tag. GFM syntax can be used for rich text representation.

-
- -#### Reference ---- -- [OAI Tag Object]( https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#tagObject). - -## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Trace.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Xml.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, Property, Schema, Items, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

Replaces the name of the element/attribute used for the described schema property.
-
-When defined within the Items Object (items), it will affect the name of the individual XML elements within the list.
-When defined alongside type being array (outside the items), it will affect the wrapping element
-and only if wrapped is true.
-
-If wrapped is false, it will be ignored.

-
namespace : string
-

The URL of the namespace definition. Value SHOULD be in the form of an URL.

-
prefix : string
-

The prefix to be used for the name.

-
attribute : bool
-

Declares whether the property definition translates to an attribute instead of an element.
-
-Default value is false.

-
wrapped : bool
-

MAY be used only for an array definition.
-
-Signifies whether the array is wrapped (for example <books><book/><book/></books>)
-or unwrapped (<book/><book/>).
-
-Default value is false. The definition takes effect only when defined alongside type being array (outside the items).

-
- -#### Reference ---- -- [OAI XML Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#xmlObject). - -## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/XmlContent.php) - -Shorthand for a xml response. - -Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/xml'` will be generated. - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable - diff --git a/vendor/zircote/swagger-php/docs/reference/attributes.md b/vendor/zircote/swagger-php/docs/reference/attributes.md deleted file mode 100644 index 55dfd66..0000000 --- a/vendor/zircote/swagger-php/docs/reference/attributes.md +++ /dev/null @@ -1,1664 +0,0 @@ -# Attributes - -This page is generated automatically from the `swagger-php` sources. - -For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) - -In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. - - -## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Attributes/AdditionalProperties.php) - - - -#### Allowed in ---- -Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Attachable.php) - - - -#### Allowed in ---- -AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent - -#### Parameters ---- -
-
properties : array
-

No details available.

-
- -## [Components](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Components.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable - -#### Parameters ---- -
-
schemas : Schema[]|null
-

No details available.

-
responses : Response[]|null
-

No details available.

-
parameters : Parameter[]|null
-

No details available.

-
requestBodies : RequestBody[]|null
-

No details available.

-
examples : Examples[]|null
-

No details available.

-
headers : Header[]|null
-

No details available.

-
securitySchemes : SecurityScheme[]|null
-

No details available.

-
links : Link[]|null
-

No details available.

-
callbacks : callable[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Contact.php) - - - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
url : string|null
-

No details available.

-
email : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Delete.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Discriminator.php) - - - -#### Allowed in ---- -Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
propertyName : string|null
-

No details available.

-
mapping : string[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Examples.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
example : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
description : string|null
-

No details available.

-
value : array|string|int|null
-

No details available.

-
externalValue : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ExternalDocumentation.php) - - - -#### Allowed in ---- -OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
description : string|null
-

No details available.

-
url : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Flow.php) - - - -#### Allowed in ---- -SecurityScheme - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
authorizationUrl : string|null
-

No details available.

-
tokenUrl : string|null
-

No details available.

-
refreshUrl : string|null
-

No details available.

-
flow : string|null
-

No details available.

-
scopes : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Get](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Get.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Head](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Head.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Header](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Header.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Schema, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
header : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Info](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Info.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Contact, License, Attachable - -#### Parameters ---- -
-
version : string|null
-

No details available.

-
description : string|null
-

No details available.

-
title : string|null
-

No details available.

-
termsOfService : string|null
-

No details available.

-
contact : OpenApi\Attributes\Contact|null
-

No details available.

-
license : OpenApi\Attributes\License|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Items](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Items.php) - - - -#### Allowed in ---- -Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/JsonContent.php) - - - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable - -#### Parameters ---- -
-
examples : array<string,Examples>
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [License](https://github.com/zircote/swagger-php/tree/master/src/Attributes/License.php) - - - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
identifier : string|null
-

No details available.

-
url : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Link](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Link.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Server, Attachable - -#### Parameters ---- -
-
link : string|null
-

No details available.

-
operationRef : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
parameters : array<string,mixed>
-

No details available.

-
requestBody
-

No details available.

-
description : string|null
-

No details available.

-
server : OpenApi\Attributes\Server|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Attributes/MediaType.php) - - - -#### Allowed in ---- -Response, RequestBody - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
mediaType : string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
encoding : array<string,mixed>
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Attributes/OpenApi.php) - - - -#### Nested elements ---- -Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable - -#### Parameters ---- -
-
openapi : string
-

No details available.

-
info : OpenApi\Attributes\Info|null
-

No details available.

-
servers : Server[]|null
-

No details available.

-
security : array|null
-

No details available.

-
tags : Tag[]|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
paths : PathItem[]|null
-

No details available.

-
components : OpenApi\Attributes\Components|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Options](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Options.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Parameter.php) - - - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
parameter : string|null
-

No details available.

-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
in : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
style : string|null
-

No details available.

-
explode : bool|null
-

No details available.

-
allowReserved : bool|null
-

No details available.

-
spaceDelimited : array|null
-

No details available.

-
pipeDelimited : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Patch.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathItem.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
servers : Server[]|null
-

No details available.

-
parameters : Parameter[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathParameter.php) - - - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
parameter : string|null
-

No details available.

-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
in : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
style : string|null
-

No details available.

-
explode : bool|null
-

No details available.

-
allowReserved : bool|null
-

No details available.

-
spaceDelimited : array|null
-

No details available.

-
pipeDelimited : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Post](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Post.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Property](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Property.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
property : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Put](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Put.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Attributes/RequestBody.php) - - - -#### Allowed in ---- -Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put - -#### Nested elements ---- -MediaType, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
request : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
content : array<MediaType>|JsonContent|XmlContent|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Response](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Response.php) - - - -#### Allowed in ---- -Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace - -#### Nested elements ---- -MediaType, Header, Link, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
response : string|int|null
-

No details available.

-
description : string|null
-

No details available.

-
headers : Header[]
-

No details available.

-
content : MediaType|JsonContent|XmlContent|array<MediaType|XmlContent>
-

No details available.

-
links : Link[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Schema.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, Header - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
const : mixed
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Attributes/SecurityScheme.php) - - - -#### Allowed in ---- -Components - -#### Nested elements ---- -Flow, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
securityScheme : string|null
-

No details available.

-
type : string|null
-

No details available.

-
description : string|null
-

No details available.

-
name : string|null
-

No details available.

-
in : string|null
-

No details available.

-
bearerFormat : string|null
-

No details available.

-
scheme : string|null
-

No details available.

-
openIdConnectUrl : string|null
-

No details available.

-
flows : Flow[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Server](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Server.php) - - - -#### Allowed in ---- -OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link - -#### Nested elements ---- -ServerVariable, Attachable - -#### Parameters ---- -
-
url : string|null
-

No details available.

-
description : string|null
-

No details available.

-
variables : ServerVariable[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ServerVariable.php) - - - -#### Allowed in ---- -Server - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
serverVariable : string|null
-

No details available.

-
description : string|null
-

No details available.

-
default : string|null
-

No details available.

-
enum : string[]|int[]|float[]|null
-

No details available.

-
variables : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Tag.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -ExternalDocumentation, Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Trace.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Xml.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, Property, Schema, Items, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
namespace : string|null
-

No details available.

-
prefix : string|null
-

No details available.

-
attribute : bool|null
-

No details available.

-
wrapped : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/XmlContent.php) - - - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable - -#### Parameters ---- -
-
examples : array<string,Examples>
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- diff --git a/vendor/zircote/swagger-php/docs/reference/generator.md b/vendor/zircote/swagger-php/docs/reference/generator.md deleted file mode 100644 index a8f9c99..0000000 --- a/vendor/zircote/swagger-php/docs/reference/generator.md +++ /dev/null @@ -1,161 +0,0 @@ -# Using the `Generator` - -## Introduction -The `Generator` class provides an object-oriented way to use `swagger-php` and all its aspects in a single place. - -## The `\OpenApi\scan()` function - -For a long time the `\OpenApi\scan()` function was the main entry point into using swagger-php from PHP code. - -```php -/** - * Scan the filesystem for OpenAPI annotations and build openapi-documentation. - * - * @param array|Finder|string $directory The directory(s) or filename(s) - * @param array $options - * exclude: string|array $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) - * pattern: string $pattern File pattern(s) to scan (default: *.php) - * analyser: defaults to StaticAnalyser - * analysis: defaults to a new Analysis - * processors: defaults to the registered processors in Analysis - * - * @return OpenApi - */ - function scan($directory, $options = []) { /* ... */ } -``` - -Using it looked typically something like this: -```php -require("vendor/autoload.php"); - -$openapi = \OpenApi\scan(__DIR__, ['exclude' => ['tests'], 'pattern' => '*.php']); -``` - -The two configuration options for the underlying Doctrine doc-block parser `aliases` and `namespaces` -are not part of this function and need to be set separately. - -Being static this means setting them back is the callers responsibility and there is also the fact that -some Doctrine configuration currently can not be reverted easily. - -Therefore, having a single side effect free way of using swagger-php seemed like a good idea... - -## The `\OpenApi\Generator` class - -The `Generator` class can be used in object-oriented (and fluent) style which allows for easy customization -if needed. - -In that case to actually process the given input files the **non-static** method `generate()` is to be used. - -Full example of using the `Generator` class to generate OpenApi specs. - -```php -require("vendor/autoload.php"); - -$validate = true; -$logger = new \Psr\Log\NullLogger(); -$processors = [/* my processors */]; -$finder = \Symfony\Component\Finder\Finder::create()->files()->name('*.php')->in(__DIR__); - -$openapi = (new \OpenApi\Generator($logger)) - ->setProcessors($processors) - ->setAliases(['MY' => 'My\Annotations']) - ->setNamespaces(['My\\Annotations\\']) - ->setAnalyser(new \OpenApi\Analysers\TokenAnalyser()) - ->setVersion(\OpenApi\Annotations\OpenApi::VERSION_3_0_0) - ->generate(['/path1/to/project', $finder], new \OpenApi\Analysis(), $validate); -``` - -`Aliases` and `namespaces` are additional options that allow to customize the parsing of docblocks. - -Defaults: -* **aliases**: `['oa' => 'OpenApi\\Annotations']` - - Aliases help the underlying `doctrine annotations library` to parse annotations. Effectively they avoid having - to write `use OpenApi\Annotations as OA;` in your code and make `@OA\property(..)` annotations still work. - -* **namespaces**: `['OpenApi\\Annotations\\']` - - Namespaces control which annotation namespaces can be autoloaded automatically. Under the hood this - is handled by registering a custom loader with the `doctrine annotation library`. - -Advantages: -* The `Generator` code will handle configuring things as before in a single place -* Static settings will be reverted to the default once finished -* The get/set methods allow for using type hints -* Static configuration is deprecated and can be removed at some point without code changes -* Build in support for PSR logger -* Support for [Symfony Finder](https://symfony.com/doc/current/components/finder.html), `\SplInfo` and file/directory names (`string) as source. - -The minimum code required, using the `generate()` method, looks quite similar to the old `scan()` code: - -```php - /** - * Generate OpenAPI spec by scanning the given source files. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - file / directory name - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param null|Analysis $analysis custom analysis instance - * @param bool $validate flag to enable/disable validation of the returned spec - */ - public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): \OpenApi\OpenApi { /* ... */ } -``` - -```php -require("vendor/autoload.php"); - -$openapi = (new \OpenApi\Generator())->generate(['/path1/to/project']); -``` - -For those that want to type even less and keep using a plain array to configure `swagger-php` there is also a static version: - -```php -toYaml(); -``` - -**Note:** While using the same name as the old `scan()` function, the `Generator::scan` method is not -100% backwards compatible. - -```php - /** - * Static wrapper around `Generator::generate()`. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param array $options - * aliases: null|array Defaults to `['oa' => 'OpenApi\\Annotations']`. - * namespaces: null|array Defaults to `['OpenApi\\Annotations\\']`. - * analyser: null|AnalyserInterface Defaults to a new `ReflectionAnalyser` supporting both docblocks and attributes. - * analysis: null|Analysis Defaults to a new `Analysis`. - * processors: null|array Defaults to `Analysis::processors()`. - * logger: null|\Psr\Log\LoggerInterface If not set logging will use \OpenApi\Logger as before. - * validate: bool Defaults to `true`. - */ - public static function scan(iterable $sources, array $options = []): OpenApi { /* ... */ } -``` - -Most notably the `exclude` and `pattern` keys are no longer supported. Instead, a Symfony `Finder` instance can be passed in -as source directly (same as with `Generator::generate()`). - -If needed, the `\OpenApi\Util` class provides a builder method that allows to keep the status-quo - -```php -$exclude = ['tests']; -$pattern = '*.php'; - -$openapi = \OpenApi\Generator::scan(\OpenApi\Util::finder(__DIR__, $exclude, $pattern)); - -// same as - -$openapi = \OpenApi\scan(__DIR__, ['exclude' => $exclude, 'pattern' => $pattern]); diff --git a/vendor/zircote/swagger-php/docs/reference/index.md b/vendor/zircote/swagger-php/docs/reference/index.md deleted file mode 100644 index 6ec960a..0000000 --- a/vendor/zircote/swagger-php/docs/reference/index.md +++ /dev/null @@ -1,23 +0,0 @@ -# Reference - -In total there are a number of different aspects to using `swagger-php`. Depending on how custom your requirements are this might be limited to just annotating your code and using the command line tool. - -However, `swagger-php` offers more. - -* [Attributes](attributes.md) - - The new way of adding meta-data to your codebase. Requires PHP 8.1 - -* [Docblock annotations](annotations.md) - - The 'traditional' way of documenting your API. - -* The [`Generator`](generator.md) - - The `\OpenAPI\Generator` class is the main entry point to programmatically generate OpenAPI documents from your code. - -* [Processors](processors.md) - - `swagger-php` comes with a list of pre-defined processors that convert the raw data to a - complete OpenAPI document. - Custom processors can be added or existing removed to tweak swagger-php` to your requirements. diff --git a/vendor/zircote/swagger-php/docs/reference/processors.md b/vendor/zircote/swagger-php/docs/reference/processors.md deleted file mode 100644 index 5010a6a..0000000 --- a/vendor/zircote/swagger-php/docs/reference/processors.md +++ /dev/null @@ -1,6 +0,0 @@ -# Processors - -## Adding/removing processors - -## Processors -### OperationId diff --git a/vendor/zircote/swagger-php/docs/related-projects.md b/vendor/zircote/swagger-php/docs/related-projects.md deleted file mode 100644 index 2f20ef7..0000000 --- a/vendor/zircote/swagger-php/docs/related-projects.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -sidebar: false ---- - -# Related projects - -| Project | Description | -| ----------------------------- | --------------------------------------------------------- | -| [Swagger UI][1] | The webinterface for reading the generated documentation | -| [Swagger Explained][2] | Browse the spec by using an swagger.json. | -| [silex2swagger][3] | Generate swagger documentation from Silex Annotations | -| [yii2-swagger][4] | swagger-php intergation with yii2 | -| [Lumen swagger][5] | swagger-php integration with lumen/laravel | -| [NelmioApiDocBundle][6] | Symfony bundle on top of swagger-php | -| [auto-swagger-ui][7] | Automatically add swagger ui and json to your application | -| [openapi-router][8] | Configure framework routes from OpenApi annotations | -| [openapi-verifier][9] | Verify response against OpenAPI specification in PHPUnit | -| [openapi-filter][10] | Filter internal paths, operations, parameters, etc | -| [OpenAPI-Symfony-Routing][11] | Load routes in Symfony based on OpenAPI annotations | -| [Swag It PHP][12] | Convert JSON to PHP Swagger annotations | - -Is a related project missing? Create a pull request! - -[1]: https://swagger.io/tools/swagger-ui/ -[2]: https://bfanger.nl/swagger-explained/ -[3]: https://github.com/DerManoMann/silex2swagger -[4]: https://github.com/lichunqiang/yii2-swagger -[5]: https://github.com/DarkaOnLine/SwaggerLumen -[6]: https://github.com/nelmio/NelmioApiDocBundle -[7]: https://github.com/kevupton/auto-swagger-ui -[8]: https://github.com/DerManoMann/openapi-router -[9]: https://github.com/DerManoMann/openapi-verifier -[10]: https://github.com/Mermade/openapi-filter -[11]: https://github.com/Tobion/OpenAPI-Symfony-Routing -[12]: https://kizu514.com/swagit.php diff --git a/vendor/zircote/swagger-php/docs/snippets/example_annotations.php b/vendor/zircote/swagger-php/docs/snippets/example_annotations.php deleted file mode 100644 index 2772d36..0000000 --- a/vendor/zircote/swagger-php/docs/snippets/example_annotations.php +++ /dev/null @@ -1,21 +0,0 @@ - top level annotations - */ - public function build(\Reflector $reflector, Context $context): array; -} diff --git a/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php b/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php deleted file mode 100644 index 0db5bdb..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php +++ /dev/null @@ -1,132 +0,0 @@ -generator = $generator; - } - - public function build(\Reflector $reflector, Context $context): array - { - if (\PHP_VERSION_ID < 80100 || !method_exists($reflector, 'getAttributes')) { - return []; - } - - if ($reflector instanceof \ReflectionProperty && method_exists($reflector, 'isPromoted') && $reflector->isPromoted()) { - // handled via __construct() parameter - return []; - } - - // no proper way to inject - Generator::$context = $context; - - /** @var AbstractAnnotation[] $annotations */ - $annotations = []; - try { - foreach ($reflector->getAttributes() as $attribute) { - try { - $instance = $attribute->newInstance(); - if ($instance instanceof AbstractAnnotation) { - $annotations[] = $instance; - } - } catch (\Error $e) { - $context->logger->debug('Could not instantiate attribute: ' . $e->getMessage(), ['exception' => $e]); - } - } - - if ($reflector instanceof \ReflectionMethod) { - // also look at parameter attributes - foreach ($reflector->getParameters() as $rp) { - foreach ([Property::class, Parameter::class, PathParameter::class] as $attributeName) { - foreach ($rp->getAttributes($attributeName) as $attribute) { - $instance = $attribute->newInstance(); - $type = (($rnt = $rp->getType()) && $rnt instanceof \ReflectionNamedType) ? $rnt->getName() : Generator::UNDEFINED; - $nullable = $rnt ? $rnt->allowsNull() : true; - - if ($instance instanceof Property) { - $instance->property = $rp->getName(); - if (Generator::isDefault($instance->type)) { - $instance->type = $type; - } - $instance->nullable = $nullable; - } else { - $instance->name = $rp->getName(); - $instance->required = !$nullable; - $context = new Context(['nested' => $this], $context); - $context->comment = null; - $instance->merge([new Schema(['type' => $type, '_context' => $context])]); - } - $annotations[] = $instance; - } - } - } - } - } finally { - Generator::$context = null; - } - - $annotations = array_values(array_filter($annotations, function ($a) { - return $a !== null && $a instanceof AbstractAnnotation; - })); - - // merge backwards into parents... - $isParent = function (AbstractAnnotation $annotation, AbstractAnnotation $possibleParent): bool { - // regular annotation hierarchy - $explicitParent = null !== $possibleParent::matchNested(get_class($annotation)); - - $isParentAllowed = false; - // support Attachable subclasses - if ($isAttachable = $annotation instanceof Attachable) { - if (!$isParentAllowed = (null === $annotation->allowedParents())) { - // check for allowed parents - foreach ($annotation->allowedParents() as $allowedParent) { - if ($possibleParent instanceof $allowedParent) { - $isParentAllowed = true; - break; - } - } - } - } - - // Property can be nested... - return get_class($annotation) != get_class($possibleParent) - && ($explicitParent || ($isAttachable && $isParentAllowed)); - }; - foreach ($annotations as $index => $annotation) { - for ($ii = 0; $ii < count($annotations); ++$ii) { - if ($ii === $index) { - continue; - } - $possibleParent = $annotations[$ii]; - if ($isParent($annotation, $possibleParent)) { - $possibleParent->merge([$annotation]); - } - } - } - - $annotations = array_filter($annotations, function ($a) { - return !$a instanceof Attachable; - }); - - return $annotations; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php b/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php deleted file mode 100644 index d604f56..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php +++ /dev/null @@ -1,49 +0,0 @@ -getComposerAutoloader()) { - foreach (array_keys($autoloader->getClassMap()) as $unit) { - foreach ($namespaces as $namespace) { - if (0 === strpos($unit, $namespace)) { - $units[] = $unit; - break; - } - } - } - } - - return $units; - } - - public static function getComposerAutoloader(): ?ClassLoader - { - foreach (spl_autoload_functions() as $fkt) { - if (is_array($fkt) && $fkt[0] instanceof ClassLoader) { - return $fkt[0]; - } - } - - return null; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php b/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php deleted file mode 100644 index 21d1768..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php +++ /dev/null @@ -1,58 +0,0 @@ -docBlockParser = $docBlockParser ?: new DocBlockParser(); - } - - public function setGenerator(Generator $generator): void - { - $this->generator = $generator; - - $this->docBlockParser->setAliases($generator->getAliases()); - } - - public function build(\Reflector $reflector, Context $context): array - { - $aliases = $this->generator ? $this->generator->getAliases() : []; - - if (method_exists($reflector, 'getShortName') && method_exists($reflector, 'getName')) { - $aliases[strtolower($reflector->getShortName())] = $reflector->getName(); - } - - if ($context->with('scanned')) { - $details = $context->scanned; - foreach ($details['uses'] as $alias => $name) { - $aliasKey = strtolower($alias); - if ($name != $alias && !array_key_exists($aliasKey, $aliases)) { - // real aliases only - $aliases[strtolower($alias)] = $name; - } - } - } - $this->docBlockParser->setAliases($aliases); - - if (method_exists($reflector, 'getDocComment') && ($comment = $reflector->getDocComment())) { - return $this->docBlockParser->fromComment($comment, $context); - } - - return []; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php b/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php deleted file mode 100644 index 407dd39..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php +++ /dev/null @@ -1,76 +0,0 @@ -setIgnoreNotImportedAnnotations(true); - $docParser->setImports($aliases); - $this->docParser = $docParser; - } - - public function setAliases(array $aliases): void - { - $this->docParser->setImports($aliases); - } - - /** - * Use doctrine to parse the comment block and return the detected annotations. - * - * @param string $comment a T_DOC_COMMENT - * @param Context $context - * - * @return array Annotations - */ - public function fromComment(string $comment, Context $context): array - { - $context->comment = $comment; - - try { - Generator::$context = $context; - if ($context->is('annotations') === false) { - $context->annotations = []; - } - - return $this->docParser->parse($comment, $context->getDebugLocation()); - } catch (\Exception $e) { - if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote((string) $context, '/') . '\.$/', $e->getMessage(), $matches)) { - $errorMessage = $matches[1]; - $errorPos = (int) $matches[2]; - $atPos = strpos($comment, '@'); - $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos); - $lines = explode("\n", substr($comment, $atPos, $errorPos)); - $context->character = strlen(array_pop($lines)) + 1; // position starts at 0 character starts at 1 - $context->logger->error($errorMessage . ' in ' . $context, ['exception' => $e]); - } else { - $context->logger->error( - $e->getMessage() . ($context->filename ? ('; file=' . $context->filename) : ''), - ['exception' => $e] - ); - } - - return []; - } finally { - Generator::$context = null; - } - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php b/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php deleted file mode 100644 index a8f3a58..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php +++ /dev/null @@ -1,186 +0,0 @@ -annotationFactories = $annotationFactories; - if (!$this->annotationFactories) { - throw new \InvalidArgumentException('Need at least one annotation factory'); - } - } - - public function setGenerator(Generator $generator): void - { - $this->generator = $generator; - - foreach ($this->annotationFactories as $annotationFactory) { - $annotationFactory->setGenerator($generator); - } - } - - public function fromFile(string $filename, Context $context): Analysis - { - $scanner = new TokenScanner(); - $fileDetails = $scanner->scanFile($filename); - - $analysis = new Analysis([], $context); - foreach ($fileDetails as $fqdn => $details) { - $this->analyzeFqdn($fqdn, $analysis, $details); - } - - return $analysis; - } - - public function fromFqdn(string $fqdn, Analysis $analysis): Analysis - { - $fqdn = ltrim($fqdn, '\\'); - - $rc = new \ReflectionClass($fqdn); - if (!$filename = $rc->getFileName()) { - return $analysis; - } - - $scanner = new TokenScanner(); - $fileDetails = $scanner->scanFile($filename); - - $this->analyzeFqdn($fqdn, $analysis, $fileDetails[$fqdn]); - - return $analysis; - } - - protected function analyzeFqdn(string $fqdn, Analysis $analysis, array $details): Analysis - { - if (!class_exists($fqdn) && !interface_exists($fqdn) && !trait_exists($fqdn) && (!function_exists('enum_exists') || !enum_exists($fqdn))) { - $analysis->context->logger->warning('Skipping unknown ' . $fqdn); - - return $analysis; - } - - $rc = new \ReflectionClass($fqdn); - $contextType = $rc->isInterface() ? 'interface' : ($rc->isTrait() ? 'trait' : ((method_exists($rc, 'isEnum') && $rc->isEnum()) ? 'enum' : 'class')); - $context = new Context([ - $contextType => $rc->getShortName(), - 'namespace' => $rc->getNamespaceName() ?: null, - 'comment' => $rc->getDocComment() ?: null, - 'filename' => $rc->getFileName() ?: null, - 'line' => $rc->getStartLine(), - 'annotations' => [], - 'scanned' => $details, - ], $analysis->context); - - $definition = [ - $contextType => $rc->getShortName(), - 'extends' => null, - 'implements' => [], - 'traits' => [], - 'properties' => [], - 'methods' => [], - 'context' => $context, - ]; - $normaliseClass = function (string $name): string { - return '\\' . $name; - }; - if ($parentClass = $rc->getParentClass()) { - $definition['extends'] = $normaliseClass($parentClass->getName()); - } - $definition[$contextType == 'class' ? 'implements' : 'extends'] = array_map($normaliseClass, $details['interfaces']); - $definition['traits'] = array_map($normaliseClass, $details['traits']); - - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($rc, $context), $context); - } - - foreach ($rc->getMethods() as $method) { - if (in_array($method->name, $details['methods'])) { - $definition['methods'][$method->getName()] = $ctx = new Context([ - 'method' => $method->getName(), - 'comment' => $method->getDocComment() ?: null, - 'filename' => $method->getFileName() ?: null, - 'line' => $method->getStartLine(), - 'annotations' => [], - ], $context); - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($method, $ctx), $ctx); - } - } - } - - foreach ($rc->getProperties() as $property) { - if (in_array($property->name, $details['properties'])) { - $definition['properties'][$property->getName()] = $ctx = new Context([ - 'property' => $property->getName(), - 'comment' => $property->getDocComment() ?: null, - 'annotations' => [], - ], $context); - if ($property->isStatic()) { - $ctx->static = true; - } - if (\PHP_VERSION_ID >= 70400 && ($type = $property->getType())) { - $ctx->nullable = $type->allowsNull(); - if ($type instanceof \ReflectionNamedType) { - $ctx->type = $type->getName(); - // Context::fullyQualifiedName(...) expects this - if (class_exists($absFqn = '\\' . $ctx->type)) { - $ctx->type = $absFqn; - } - } - } - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($property, $ctx), $ctx); - } - } - } - - foreach ($rc->getReflectionConstants() as $constant) { - foreach ($this->annotationFactories as $annotationFactory) { - $definition['constants'][$constant->getName()] = $ctx = new Context([ - 'constant' => $constant->getName(), - 'comment' => $constant->getDocComment() ?: null, - 'annotations' => [], - ], $context); - foreach ($annotationFactory->build($constant, $ctx) as $annotation) { - if ($annotation instanceof Property) { - if (Generator::isDefault($annotation->property)) { - $annotation->property = $constant->getName(); - } - if (Generator::isDefault($annotation->const)) { - $annotation->const = $constant->getValue(); - } - $analysis->addAnnotation($annotation, $ctx); - } - } - } - } - - $addDefinition = 'add' . ucfirst($contextType) . 'Definition'; - $analysis->{$addDefinition}($definition); - - return $analysis; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php b/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php deleted file mode 100644 index 2a3916d..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php +++ /dev/null @@ -1,639 +0,0 @@ -generator = $generator; - } - - /** - * Extract and process all doc-comments from a file. - * - * @param string $filename path to a php file - */ - public function fromFile(string $filename, Context $context): Analysis - { - if (function_exists('opcache_get_status') && function_exists('opcache_get_configuration')) { - if (empty($GLOBALS['openapi_opcache_warning'])) { - $GLOBALS['openapi_opcache_warning'] = true; - $status = opcache_get_status(); - $config = opcache_get_configuration(); - if (is_array($status) && $status['opcache_enabled'] && $config['directives']['opcache.save_comments'] == false) { - $context->logger->error("php.ini \"opcache.save_comments = 0\" interferes with extracting annotations.\n[LINK] https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments"); - } - } - } - $tokens = token_get_all(file_get_contents($filename)); - - return $this->fromTokens($tokens, new Context(['filename' => $filename], $context)); - } - - /** - * Extract and process all doc-comments from the contents. - * - * @param string $code PHP code. (including fromTokens($tokens, $context); - } - - /** - * Shared implementation for parseFile() & parseContents(). - * - * @param array $tokens The result of a token_get_all() - */ - protected function fromTokens(array $tokens, Context $parseContext): Analysis - { - $generator = $this->generator ?: new Generator(); - $analysis = new Analysis([], $parseContext); - $docBlockParser = new DocBlockParser($generator->getAliases()); - - reset($tokens); - $token = ''; - - $aliases = $generator->getAliases(); - - $parseContext->uses = []; - // default to parse context to start with - $schemaContext = $parseContext; - - $classDefinition = false; - $interfaceDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - $comment = false; - - $line = 0; - $lineOffset = $parseContext->line ?: 0; - - while ($token !== false) { - $previousToken = $token; - $token = $this->nextToken($tokens, $parseContext); - - if (is_array($token) === false) { - // Ignore tokens like "{", "}", etc - continue; - } - - if (defined('T_ATTRIBUTE') && $token[0] === T_ATTRIBUTE) { - // consume - $this->parseAttribute($tokens, $token, $parseContext); - continue; - } - - if ($token[0] === T_DOC_COMMENT) { - if ($comment) { - // 2 Doc-comments in succession? - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - } - $comment = $token[1]; - $line = $token[2] + $lineOffset; - continue; - } - - if (in_array($token[0], [T_ABSTRACT, T_FINAL])) { - // skip - $token = $this->nextToken($tokens, $parseContext); - } - - if ($token[0] === T_CLASS) { - // Doc-comment before a class? - if (is_array($previousToken) && $previousToken[0] === T_DOUBLE_COLON) { - //php 5.5 class name resolution (i.e. ClassName::class) - continue; - } - - $token = $this->nextToken($tokens, $parseContext); - - if (is_string($token) && ($token === '(' || $token === '{')) { - // php7 anonymous classes (i.e. new class() { public function foo() {} };) - continue; - } - - if (is_array($token) && ($token[1] === 'extends' || $token[1] === 'implements')) { - // php7 anonymous classes with extends (i.e. new class() extends { public function foo() {} };) - continue; - } - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $interfaceDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - - $schemaContext = new Context(['class' => $token[1], 'line' => $token[2]], $parseContext); - if ($classDefinition) { - $analysis->addClassDefinition($classDefinition); - } - $classDefinition = [ - 'class' => $token[1], - 'extends' => null, - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_EXTENDS) { - $schemaContext->extends = $this->parseNamespace($tokens, $token, $parseContext); - $classDefinition['extends'] = $schemaContext->fullyQualifiedName($schemaContext->extends); - } - - if ($token[0] === T_IMPLEMENTS) { - $schemaContext->implements = $this->parseNamespaceList($tokens, $token, $parseContext); - $classDefinition['implements'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->implements); - } - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-class and reset $schemaContext - } - - if ($token[0] === T_INTERFACE) { // Doc-comment before an interface? - $classDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['interface' => $token[1], 'line' => $token[2]], $parseContext); - if ($interfaceDefinition) { - $analysis->addInterfaceDefinition($interfaceDefinition); - } - $interfaceDefinition = [ - 'interface' => $token[1], - 'extends' => null, - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_EXTENDS) { - $schemaContext->extends = $this->parseNamespaceList($tokens, $token, $parseContext); - $interfaceDefinition['extends'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->extends); - } - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-interface and reset $schemaContext - } - - if ($token[0] === T_TRAIT) { - $classDefinition = false; - $interfaceDefinition = false; - $enumDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['trait' => $token[1], 'line' => $token[2]], $parseContext); - if ($traitDefinition) { - $analysis->addTraitDefinition($traitDefinition); - } - $traitDefinition = [ - 'trait' => $token[1], - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-trait and reset $schemaContext - } - - if (defined('T_ENUM') && $token[0] === T_ENUM) { - $classDefinition = false; - $interfaceDefinition = false; - $traitDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['enum' => $token[1], 'line' => $token[2]], $parseContext); - if ($enumDefinition) { - $analysis->addEnumDefinition($enumDefinition); - } - $enumDefinition = [ - 'enum' => $token[1], - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-trait and reset $schemaContext - } - - if ($token[0] === T_STATIC) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_VARIABLE) { - // static property - $propertyContext = new Context( - [ - 'property' => substr($token[1], 1), - 'static' => true, - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($traitDefinition) { - $traitDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); - $comment = false; - } - continue; - } - } - - if (in_array($token[0], [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR])) { // Scope - [$type, $nullable, $token] = $this->parseTypeAndNextToken($tokens, $parseContext); - if ($token[0] === T_VARIABLE) { - // instance property - $propertyContext = new Context( - [ - 'property' => substr($token[1], 1), - 'type' => $type, - 'nullable' => $nullable, - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($traitDefinition) { - $traitDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); - $comment = false; - } - } elseif ($token[0] === T_FUNCTION) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_STRING) { - $methodContext = new Context( - [ - 'method' => $token[1], - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['methods'][$token[1]] = $methodContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['methods'][$token[1]] = $methodContext; - } - if ($traitDefinition) { - $traitDefinition['methods'][$token[1]] = $methodContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); - $comment = false; - } - } - } - continue; - } elseif ($token[0] === T_FUNCTION) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_STRING) { - $methodContext = new Context( - [ - 'method' => $token[1], - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['methods'][$token[1]] = $methodContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['methods'][$token[1]] = $methodContext; - } - if ($traitDefinition) { - $traitDefinition['methods'][$token[1]] = $methodContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); - $comment = false; - } - } - } - - if (in_array($token[0], [T_NAMESPACE, T_USE]) === false) { - // Skip "use" & "namespace" to prevent "never imported" warnings) - if ($comment) { - // Not a doc-comment for a class, property or method? - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - $comment = false; - } - } - - if ($token[0] === T_NAMESPACE) { - $parseContext->namespace = $this->parseNamespace($tokens, $token, $parseContext); - $aliases['__NAMESPACE__'] = $parseContext->namespace; - $docBlockParser->setAliases($aliases); - continue; - } - - if ($token[0] === T_USE) { - $statements = $this->parseUseStatement($tokens, $token, $parseContext); - foreach ($statements as $alias => $target) { - if ($classDefinition) { - // class traits - $classDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); - } elseif ($traitDefinition) { - // trait traits - $traitDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); - } else { - // not a trait use - $parseContext->uses[$alias] = $target; - - $namespaces = $generator->getNamespaces(); - if (null === $namespaces) { - $aliases[strtolower($alias)] = $target; - } else { - foreach ($namespaces as $namespace) { - if (strcasecmp(substr($target . '\\', 0, strlen($namespace)), $namespace) === 0) { - $aliases[strtolower($alias)] = $target; - break; - } - } - } - $docBlockParser->setAliases($aliases); - } - } - } - } - - // cleanup final comment and definition - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - } - if ($classDefinition) { - $analysis->addClassDefinition($classDefinition); - } - if ($interfaceDefinition) { - $analysis->addInterfaceDefinition($interfaceDefinition); - } - if ($traitDefinition) { - $analysis->addTraitDefinition($traitDefinition); - } - if ($enumDefinition) { - $analysis->addEnumDefinition($enumDefinition); - } - - return $analysis; - } - - /** - * Parse comment and add annotations to analysis. - */ - private function analyseComment(Analysis $analysis, DocBlockParser $docBlockParser, string $comment, Context $context): void - { - $analysis->addAnnotations($docBlockParser->fromComment($comment, $context), $context); - } - - /** - * The next non-whitespace, non-comment token. - * - * - * @return array|string The next token (or false) - */ - private function nextToken(array &$tokens, Context $context) - { - while (true) { - $token = next($tokens); - if (is_array($token)) { - if ($token[0] === T_WHITESPACE) { - continue; - } - if ($token[0] === T_COMMENT) { - $pos = strpos($token[1], '@OA\\'); - if ($pos) { - $line = $context->line ? $context->line + $token[2] : $token[2]; - $commentContext = new Context(['line' => $line], $context); - $context->logger->warning('Annotations are only parsed inside `/**` DocBlocks, skipping ' . $commentContext); - } - continue; - } - } - - return $token; - } - } - - private function parseAttribute(array &$tokens, &$token, Context $parseContext): void - { - $nesting = 1; - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - if (!is_array($token) && '[' === $token) { - ++$nesting; - continue; - } - - if (!is_array($token) && ']' === $token) { - --$nesting; - if (!$nesting) { - break; - } - } - } - } - - /** - * @return int[] - */ - private function php8NamespaceToken(): array - { - return defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; - } - - /** - * Parse namespaced string. - * - * @param array|string $token - */ - private function parseNamespace(array &$tokens, &$token, Context $parseContext): string - { - $namespace = ''; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - if (!in_array($token[0], $nsToken)) { - break; - } - $namespace .= $token[1]; - } - - return $namespace; - } - - /** - * Parse comma separated list of namespaced strings. - * - * @param array|string $token - */ - private function parseNamespaceList(array &$tokens, &$token, Context $parseContext): array - { - $namespaces = []; - while ($namespace = $this->parseNamespace($tokens, $token, $parseContext)) { - $namespaces[] = $namespace; - if ($token != ',') { - break; - } - } - - return $namespaces; - } - - /** - * Parse a use statement. - */ - private function parseUseStatement(array &$tokens, &$token, Context $parseContext): array - { - $normalizeAlias = function ($alias): string { - $alias = ltrim($alias, '\\'); - $elements = explode('\\', $alias); - - return array_pop($elements); - }; - - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - $isNameToken = in_array($token[0], $nsToken); - if (!$explicitAlias && $isNameToken) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $isNameToken) { - $alias .= $token[1]; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token === ',') { - $statements[$normalizeAlias($alias)] = $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[$normalizeAlias($alias)] = $class; - break; - } else { - break; - } - } - - return $statements; - } - - /** - * Parse type of variable (if it exists). - */ - private function parseTypeAndNextToken(array &$tokens, Context $parseContext): array - { - $type = Generator::UNDEFINED; - $nullable = false; - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_STATIC) { - $token = $this->nextToken($tokens, $parseContext); - } - - if ($token === '?') { // nullable type - $nullable = true; - $token = $this->nextToken($tokens, $parseContext); - } - - $qualifiedToken = array_merge([T_NS_SEPARATOR, T_STRING, T_ARRAY], $this->php8NamespaceToken()); - $typeToken = array_merge([T_STRING], $this->php8NamespaceToken()); - // drill down namespace segments to basename property type declaration - while (in_array($token[0], $qualifiedToken)) { - if (in_array($token[0], $typeToken)) { - $type = $token[1]; - } - $token = $this->nextToken($tokens, $parseContext); - } - - return [$type, $nullable, $token]; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php b/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php deleted file mode 100644 index 8d916e2..0000000 --- a/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php +++ /dev/null @@ -1,356 +0,0 @@ -scanTokens(token_get_all(file_get_contents($filename))); - } - - /** - * Scan file for all classes, interfaces and traits. - * - * @return array> File details - */ - protected function scanTokens(array $tokens): array - { - $units = []; - $uses = []; - $isInterface = false; - $namespace = ''; - $currentName = null; - $unitLevel = 0; - $lastToken = null; - $stack = []; - - $initUnit = function ($uses): array { - return [ - 'uses' => $uses, - 'interfaces' => [], - 'traits' => [], - 'enums' => [], - 'methods' => [], - 'properties' => [], - ]; - }; - - while (false !== ($token = $this->nextToken($tokens))) { - if (!is_array($token)) { - switch ($token) { - case '{': - $stack[] = $token; - break; - case '}': - array_pop($stack); - if (count($stack) == $unitLevel) { - $currentName = null; - } - break; - } - continue; - } - - switch ($token[0]) { - case T_CURLY_OPEN: - case T_DOLLAR_OPEN_CURLY_BRACES: - $stack[] = $token[1]; - break; - - case T_NAMESPACE: - $namespace = $this->nextWord($tokens); - break; - - case T_USE: - if (!$stack) { - $uses = array_merge($uses, $this->parseFQNStatement($tokens, $token)); - } elseif ($currentName) { - $traits = $this->resolveFQN($this->parseFQNStatement($tokens, $token), $namespace, $uses); - $units[$currentName]['traits'] = array_merge($units[$currentName]['traits'], $traits); - } - break; - - case T_CLASS: - if ($currentName) { - break; - } - - if ($lastToken && is_array($lastToken) && $lastToken[0] === T_DOUBLE_COLON) { - // ::class - break; - } - - // class name - $token = $this->nextToken($tokens); - - // unless ... - if (is_string($token) && ($token === '(' || $token === '{')) { - // new class[()] { ... } - if ('{' == $token) { - prev($tokens); - } - break; - } elseif (is_array($token) && in_array($token[1], ['extends', 'implements'])) { - // new class[()] extends { ... } - break; - } - - $isInterface = false; - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $units[$currentName] = $initUnit($uses); - break; - - case T_INTERFACE: - if ($currentName) { - break; - } - - $isInterface = true; - $token = $this->nextToken($tokens); - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $units[$currentName] = $initUnit($uses); - break; - - case T_EXTENDS: - $fqns = $this->parseFQNStatement($tokens, $token); - if ($isInterface && $currentName) { - $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); - } - if (!is_array($token) || T_IMPLEMENTS !== $token[0]) { - break; - } - // no break - case T_IMPLEMENTS: - $fqns = $this->parseFQNStatement($tokens, $token); - if ($currentName) { - $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); - } - break; - - case T_FUNCTION: - $token = $this->nextToken($tokens); - - if (($unitLevel + 1) == count($stack) && $currentName) { - $units[$currentName]['methods'][] = $token[1]; - if (!$isInterface) { - // more nesting - $units[$currentName]['properties'] = array_merge( - $units[$currentName]['properties'], - $this->parsePromotedProperties($tokens) - ); - $this->skipTo($tokens, '{', true); - } else { - // no function body - $this->skipTo($tokens, ';'); - } - } - break; - - case T_VARIABLE: - if (($unitLevel + 1) == count($stack) && $currentName) { - $units[$currentName]['properties'][] = substr($token[1], 1); - } - break; - default: - // handle trait here too to avoid duplication - if (T_TRAIT === $token[0] || (defined('T_ENUM') && T_ENUM === $token[0])) { - if ($currentName) { - break; - } - - $isInterface = false; - $token = $this->nextToken($tokens); - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $this->skipTo($tokens, '{', true); - $units[$currentName] = $initUnit($uses); - } - break; - - } - $lastToken = $token; - } - - return $units; - } - - /** - * Get the next token that is not whitespace or comment. - */ - protected function nextToken(array &$tokens) - { - $token = true; - while ($token) { - $token = next($tokens); - if (is_array($token)) { - if (in_array($token[0], [T_WHITESPACE, T_COMMENT])) { - continue; - } - } - - return $token; - } - - return $token; - } - - protected function resolveFQN(array $names, string $namespace, array $uses): array - { - $resolve = function ($name) use ($namespace, $uses) { - if ('\\' == $name[0]) { - return substr($name, 1); - } - - if (array_key_exists($name, $uses)) { - return $uses[$name]; - } - - return $namespace . '\\' . $name; - }; - - return array_values(array_map($resolve, $names)); - } - - protected function skipTo(array &$tokens, string $char, bool $prev = false): void - { - while (false !== ($token = next($tokens))) { - if (is_string($token) && $token == $char) { - if ($prev) { - prev($tokens); - } - - break; - } - } - } - - /** - * Read next word. - * - * Skips leading whitespace. - */ - protected function nextWord(array &$tokens): string - { - $word = ''; - while (false !== ($token = next($tokens))) { - if (is_array($token)) { - if ($token[0] === T_WHITESPACE) { - if ($word) { - break; - } - continue; - } - $word .= $token[1]; - } - } - - return $word; - } - - /** - * Parse a use statement. - */ - protected function parseFQNStatement(array &$tokens, array &$token): array - { - $normalizeAlias = function ($alias): string { - $alias = ltrim($alias, '\\'); - $elements = explode('\\', $alias); - - return array_pop($elements); - }; - - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - $php8NSToken = defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $php8NSToken); - while ($token !== false) { - $token = $this->nextToken($tokens); - $isNameToken = in_array($token[0], $nsToken); - if (!$explicitAlias && $isNameToken) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $isNameToken) { - $alias .= $token[1]; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token[0] === T_IMPLEMENTS) { - $statements[$normalizeAlias($alias)] = $class; - break; - } elseif ($token === ',') { - $statements[$normalizeAlias($alias)] = $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[$normalizeAlias($alias)] = $class; - break; - } elseif ($token === '{') { - $statements[$normalizeAlias($alias)] = $class; - prev($tokens); - break; - } else { - break; - } - } - - return $statements; - } - - protected function parsePromotedProperties(array &$tokens): array - { - $properties = []; - - $this->skipTo($tokens, '('); - $round = 1; - $promoted = false; - while (false !== ($token = $this->nextToken($tokens))) { - if (is_string($token)) { - switch ($token) { - case '(': - ++$round; - break; - case ')': - --$round; - if (0 == $round) { - return $properties; - } - } - } - if (is_array($token)) { - switch ($token[0]) { - case T_PUBLIC: - case T_PROTECTED: - case T_PRIVATE: - $promoted = true; - break; - case T_VARIABLE: - if ($promoted) { - $properties[] = ltrim($token[1], '$'); - $promoted = false; - } - break; - } - } - } - - return $properties; - } -} diff --git a/vendor/zircote/swagger-php/src/Analysis.php b/vendor/zircote/swagger-php/src/Analysis.php deleted file mode 100644 index eec1071..0000000 --- a/vendor/zircote/swagger-php/src/Analysis.php +++ /dev/null @@ -1,440 +0,0 @@ -annotations = new \SplObjectStorage(); - $this->context = $context; - - $this->addAnnotations($annotations, $context); - } - - public function addAnnotation(object $annotation, Context $context): void - { - if ($this->annotations->contains($annotation)) { - return; - } - - if ($annotation instanceof OpenApi) { - $this->openapi = $this->openapi ?: $annotation; - } else { - if ($context->is('annotations') === false) { - $context->annotations = []; - } - - if (in_array($annotation, $context->annotations, true) === false) { - $context->annotations[] = $annotation; - } - } - $this->annotations->attach($annotation, $context); - $blacklist = property_exists($annotation, '_blacklist') ? $annotation::$_blacklist : []; - foreach ($annotation as $property => $value) { - if (in_array($property, $blacklist)) { - if ($property === '_unmerged') { - foreach ($value as $item) { - $this->addAnnotation($item, $context); - } - } - continue; - } elseif (is_array($value)) { - foreach ($value as $item) { - if ($item instanceof AbstractAnnotation) { - $this->addAnnotation($item, $context); - } - } - } elseif ($value instanceof AbstractAnnotation) { - $this->addAnnotation($value, $context); - } - } - } - - public function addAnnotations(array $annotations, Context $context): void - { - foreach ($annotations as $annotation) { - $this->addAnnotation($annotation, $context); - } - } - - public function addClassDefinition(array $definition): void - { - $class = $definition['context']->fullyQualifiedName($definition['class']); - $this->classes[$class] = $definition; - } - - public function addInterfaceDefinition(array $definition): void - { - $interface = $definition['context']->fullyQualifiedName($definition['interface']); - $this->interfaces[$interface] = $definition; - } - - public function addTraitDefinition(array $definition): void - { - $trait = $definition['context']->fullyQualifiedName($definition['trait']); - $this->traits[$trait] = $definition; - } - - public function addEnumDefinition(array $definition): void - { - $enum = $definition['context']->fullyQualifiedName($definition['enum']); - $this->enums[$enum] = $definition; - } - - public function addAnalysis(Analysis $analysis): void - { - foreach ($analysis->annotations as $annotation) { - $this->addAnnotation($annotation, $analysis->annotations[$annotation]); - } - $this->classes = array_merge($this->classes, $analysis->classes); - $this->interfaces = array_merge($this->interfaces, $analysis->interfaces); - $this->traits = array_merge($this->traits, $analysis->traits); - $this->enums = array_merge($this->enums, $analysis->enums); - if ($this->openapi === null && $analysis->openapi !== null) { - $this->openapi = $analysis->openapi; - } - } - - /** - * Get all subclasses of the given parent class. - * - * @param string $parent the parent class - * - * @return array map of class => definition pairs of sub-classes - */ - public function getSubClasses(string $parent): array - { - $definitions = []; - foreach ($this->classes as $class => $classDefinition) { - if ($classDefinition['extends'] === $parent) { - $definitions[$class] = $classDefinition; - $definitions = array_merge($definitions, $this->getSubClasses($class)); - } - } - - return $definitions; - } - - /** - * Get a list of all super classes for the given class. - * - * @param string $class the class name - * @param bool $direct flag to find only the actual class parents - * - * @return array map of class => definition pairs of parent classes - */ - public function getSuperClasses(string $class, bool $direct = false): array - { - $classDefinition = isset($this->classes[$class]) ? $this->classes[$class] : null; - if (!$classDefinition || empty($classDefinition['extends'])) { - // unknown class, or no inheritance - return []; - } - - $extends = $classDefinition['extends']; - $extendsDefinition = isset($this->classes[$extends]) ? $this->classes[$extends] : null; - if (!$extendsDefinition) { - return []; - } - - $parentDetails = [$extends => $extendsDefinition]; - - if ($direct) { - return $parentDetails; - } - - return array_merge($parentDetails, $this->getSuperClasses($extends)); - } - - /** - * Get the list of interfaces used by the given class or by classes which it extends. - * - * @param string $class the class name - * @param bool $direct flag to find only the actual class interfaces - * - * @return array map of class => definition pairs of interfaces - */ - public function getInterfacesOfClass(string $class, bool $direct = false): array - { - $classes = $direct ? [] : array_keys($this->getSuperClasses($class)); - // add self - $classes[] = $class; - - $definitions = []; - foreach ($classes as $clazz) { - if (isset($this->classes[$clazz])) { - $definition = $this->classes[$clazz]; - if (isset($definition['implements'])) { - foreach ($definition['implements'] as $interface) { - if (array_key_exists($interface, $this->interfaces)) { - $definitions[$interface] = $this->interfaces[$interface]; - } - } - } - } - } - - if (!$direct) { - // expand recursively for interfaces extending other interfaces - $collect = function ($interfaces, $cb) use (&$definitions): void { - foreach ($interfaces as $interface) { - if (isset($this->interfaces[$interface]['extends'])) { - $cb($this->interfaces[$interface]['extends'], $cb); - foreach ($this->interfaces[$interface]['extends'] as $fqdn) { - $definitions[$fqdn] = $this->interfaces[$fqdn]; - } - } - } - }; - $collect(array_keys($definitions), $collect); - } - - return $definitions; - } - - /** - * Get the list of traits used by the given class/trait or by classes which it extends. - * - * @param string $source the source name - * @param bool $direct flag to find only the actual class traits - * - * @return array map of class => definition pairs of traits - */ - public function getTraitsOfClass(string $source, bool $direct = false): array - { - $sources = $direct ? [] : array_keys($this->getSuperClasses($source)); - // add self - $sources[] = $source; - - $definitions = []; - foreach ($sources as $sourze) { - if (isset($this->classes[$sourze]) || isset($this->traits[$sourze])) { - $definition = isset($this->classes[$sourze]) ? $this->classes[$sourze] : $this->traits[$sourze]; - if (isset($definition['traits'])) { - foreach ($definition['traits'] as $trait) { - if (array_key_exists($trait, $this->traits)) { - $definitions[$trait] = $this->traits[$trait]; - } - } - } - } - } - - if (!$direct) { - // expand recursively for traits using other traits - $collect = function ($traits, $cb) use (&$definitions): void { - foreach ($traits as $trait) { - if (isset($this->traits[$trait]['traits'])) { - $cb($this->traits[$trait]['traits'], $cb); - foreach ($this->traits[$trait]['traits'] as $fqdn) { - $definitions[$fqdn] = $this->traits[$fqdn]; - } - } - } - }; - $collect(array_keys($definitions), $collect); - } - - return $definitions; - } - - /** - * @param string|array $classes One ore more class names - * @param bool $strict in non-strict mode child classes are also detected - * - * @return AbstractAnnotation[] - */ - public function getAnnotationsOfType($classes, bool $strict = false): array - { - $annotations = []; - if ($strict) { - foreach ((array) $classes as $class) { - foreach ($this->annotations as $annotation) { - if (get_class($annotation) === $class) { - $annotations[] = $annotation; - } - } - } - } else { - foreach ((array) $classes as $class) { - foreach ($this->annotations as $annotation) { - if ($annotation instanceof $class) { - $annotations[] = $annotation; - } - } - } - } - - return $annotations; - } - - /** - * @param string $fqdn the source class/interface/trait - */ - public function getSchemaForSource(string $fqdn): ?AnnotationSchema - { - $fqdn = '\\' . ltrim($fqdn, '\\'); - - foreach ([$this->classes, $this->interfaces, $this->traits, $this->enums] as $definitions) { - if (array_key_exists($fqdn, $definitions)) { - $definition = $definitions[$fqdn]; - if (is_iterable($definition['context']->annotations)) { - foreach (array_reverse($definition['context']->annotations) as $annotation) { - if (in_array(get_class($annotation), [AnnotationSchema::class, AttributeSchema::class]) && !$annotation->_aux) { - return $annotation; - } - } - } - } - } - - return null; - } - - public function getContext(object $annotation): ?Context - { - if ($annotation instanceof AbstractAnnotation) { - return $annotation->_context; - } - if ($this->annotations->contains($annotation) === false) { - throw new \Exception('Annotation not found'); - } - $context = $this->annotations[$annotation]; - if ($context instanceof Context) { - return $context; - } - // Weird, did you use the addAnnotation/addAnnotations methods? - throw new \Exception('Annotation has no context'); - } - - /** - * Build an analysis with only the annotations that are merged into the OpenAPI annotation. - */ - public function merged(): Analysis - { - if ($this->openapi === null) { - throw new \Exception('No openapi target set. Run the MergeIntoOpenApi processor'); - } - $unmerged = $this->openapi->_unmerged; - $this->openapi->_unmerged = []; - $analysis = new Analysis([$this->openapi], $this->context); - $this->openapi->_unmerged = $unmerged; - - return $analysis; - } - - /** - * Analysis with only the annotations that not merged. - */ - public function unmerged(): Analysis - { - return $this->split()->unmerged; - } - - /** - * Split the annotation into two analysis. - * One with annotations that are merged and one with annotations that are not merged. - * - * @return object {merged: Analysis, unmerged: Analysis} - */ - public function split() - { - $result = new \stdClass(); - $result->merged = $this->merged(); - $result->unmerged = new Analysis([], $this->context); - foreach ($this->annotations as $annotation) { - if ($result->merged->annotations->contains($annotation) === false) { - $result->unmerged->annotations->attach($annotation, $this->annotations[$annotation]); - } - } - - return $result; - } - - /** - * Apply the processor(s). - * - * @param callable|callable[] $processors One or more processors - */ - public function process($processors = null): void - { - if (is_array($processors) === false && is_callable($processors)) { - $processors = [$processors]; - } - foreach ($processors as $processor) { - $processor($this); - } - } - - public function validate(): bool - { - if ($this->openapi !== null) { - return $this->openapi->validate(); - } - - $this->context->logger->warning('No openapi target set. Run the MergeIntoOpenApi processor before validate()'); - - return false; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php b/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php deleted file mode 100644 index b4469be..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php +++ /dev/null @@ -1,714 +0,0 @@ - - */ - public $x = Generator::UNDEFINED; - - /** - * Arbitrary attachables for this annotation. - * These will be ignored but can be used for custom processing. - * - * @var array - */ - public $attachables = Generator::UNDEFINED; - - /** - * @var bool - */ - public $_aux = false; - - /** - * @var Context|null - */ - public $_context = null; - - /** - * Annotations that couldn't be merged by mapping or postprocessing. - * - * @var array - */ - public $_unmerged = []; - - /** - * The properties which are required by [the spec](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). - * - * @var array - */ - public static $_required = []; - - /** - * Specify the type of the property. - * - * Examples: - * 'name' => 'string' // a string - * 'required' => 'boolean', // true or false - * 'tags' => '[string]', // array containing strings - * 'in' => ["query", "header", "path", "formData", "body"] // must be one on these - * 'oneOf' => [Schema::class] // array of schema objects. - * - * @var array> - */ - public static $_types = []; - - /** - * Declarative mapping of Annotation types to properties. - * Examples: - * Info::clas => 'info', // Set @OA\Info annotation as the info property. - * Parameter::clas => ['parameters'], // Append @OA\Parameter annotations the parameters array. - * PathItem::clas => ['paths', 'path'], // Append @OA\PathItem annotations the paths array and use path as key. - * - * @var array,string|array> - */ - public static $_nested = []; - - /** - * Reverse mapping of $_nested with the allowed parent annotations. - * - * @var array> - */ - public static $_parents = []; - - /** - * List of properties are blacklisted from the JSON output. - * - * @var array - */ - public static $_blacklist = ['_context', '_unmerged', '_analysis', '_aux', 'attachables']; - - public function __construct(array $properties) - { - if (isset($properties['_context'])) { - $this->_context = $properties['_context']; - unset($properties['_context']); - } elseif (Generator::$context) { - $this->_context = Generator::$context; - } else { - $this->_context = Context::detect(1); - } - - if ($this->_context->is('annotations') === false) { - $this->_context->annotations = []; - } - - $this->_context->annotations[] = $this; - $nestedContext = new Context(['nested' => $this], $this->_context); - foreach ($properties as $property => $value) { - if (property_exists($this, $property)) { - $this->$property = $value; - if (is_array($value)) { - foreach ($value as $key => $annotation) { - if (is_object($annotation) && $annotation instanceof AbstractAnnotation) { - $this->$property[$key] = $this->nested($annotation, $nestedContext); - } - } - } - } elseif ($property !== 'value') { - $this->$property = $value; - } elseif (is_array($value)) { - $annotations = []; - foreach ($value as $annotation) { - if ($annotation instanceof AbstractAnnotation) { - $annotations[] = $annotation; - } else { - $this->_context->logger->warning('Unexpected field in ' . $this->identity() . ' in ' . $this->_context); - } - } - $this->merge($annotations); - } elseif (is_object($value)) { - $this->merge([$value]); - } else { - if ($value !== Generator::UNDEFINED) { - $this->_context->logger->warning('Unexpected parameter "' . $property . '" in ' . $this->identity()); - } - } - } - - if ($this instanceof OpenApi) { - if ($this->_context->root()->version) { - // override via `Generator::setVersion()` - $this->openapi = $this->_context->root()->version; - } else { - $this->_context->root()->version = $this->openapi; - } - } - } - - public function __get($property) - { - $properties = get_object_vars($this); - $this->_context->logger->warning('Property "' . $property . '" doesn\'t exist in a ' . $this->identity() . ', existing properties: "' . implode('", "', array_keys($properties)) . '" in ' . $this->_context); - } - - public function __set($property, $value) - { - $fields = get_object_vars($this); - foreach (static::$_blacklist as $_property) { - unset($fields[$_property]); - } - $this->_context->logger->warning('Unexpected field "' . $property . '" for ' . $this->identity() . ', expecting "' . implode('", "', array_keys($fields)) . '" in ' . $this->_context); - $this->$property = $value; - } - - /** - * Merge given annotations to their mapped properties configured in static::$_nested. - * - * Annotations that couldn't be merged are added to the _unmerged array. - * - * @param AbstractAnnotation[] $annotations - * @param bool $ignore Ignore unmerged annotations - * - * @return AbstractAnnotation[] The unmerged annotations - */ - public function merge(array $annotations, bool $ignore = false): array - { - $unmerged = []; - $nestedContext = new Context(['nested' => $this], $this->_context); - - foreach ($annotations as $annotation) { - $mapped = false; - if ($details = static::matchNested(get_class($annotation))) { - $property = $details->value; - if (is_array($property)) { - $property = $property[0]; - if (Generator::isDefault($this->$property)) { - $this->$property = []; - } - $this->$property[] = $this->nested($annotation, $nestedContext); - $mapped = true; - } elseif (Generator::isDefault($this->$property)) { - // ignore duplicate nested if only one expected - $this->$property = $this->nested($annotation, $nestedContext); - $mapped = true; - } - } - if (!$mapped) { - $unmerged[] = $annotation; - } - } - if (!$ignore) { - foreach ($unmerged as $annotation) { - $this->_unmerged[] = $this->nested($annotation, $nestedContext); - } - } - - return $unmerged; - } - - /** - * Merge the properties from the given object into this annotation. - * Prevents overwriting properties that are already configured. - * - * @param object $object - */ - public function mergeProperties($object): void - { - $defaultValues = get_class_vars(get_class($this)); - $currentValues = get_object_vars($this); - foreach ($object as $property => $value) { - if ($property === '_context') { - continue; - } - if ($currentValues[$property] === $defaultValues[$property]) { // Overwrite default values - $this->$property = $value; - continue; - } - if ($property === '_unmerged') { - $this->_unmerged = array_merge($this->_unmerged, $value); - continue; - } - if ($currentValues[$property] !== $value) { // New value is not the same? - if ($defaultValues[$property] === $value) { // but is the same as the default? - continue; // Keep current, no notice - } - $identity = method_exists($object, 'identity') ? $object->identity() : get_class($object); - $context1 = $this->_context; - $context2 = property_exists($object, '_context') ? $object->_context : 'unknown'; - if (is_object($this->$property) && $this->{$property} instanceof AbstractAnnotation) { - $context1 = $this->$property->_context; - } - $this->_context->logger->error('Multiple definitions for ' . $identity . '->' . $property . "\n Using: " . $context1 . "\n Skipping: " . $context2); - } - } - } - - /** - * Generate the documentation in YAML format. - */ - public function toYaml($flags = null): string - { - if ($flags === null) { - $flags = Yaml::DUMP_OBJECT_AS_MAP ^ Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE; - } - - return Yaml::dump(json_decode($this->toJson(JSON_INVALID_UTF8_IGNORE)), 10, 2, $flags); - } - - /** - * Generate the documentation in JSON format. - */ - public function toJson(?int $flags = null): string - { - if ($flags === null) { - $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE; - } - - return json_encode($this, $flags); - } - - public function __debugInfo() - { - $properties = []; - foreach (get_object_vars($this) as $property => $value) { - if (!Generator::isDefault($value)) { - $properties[$property] = $value; - } - } - - return $properties; - } - - /** - * @return mixed - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = new \stdClass(); - - // Strip undefined values. - foreach (get_object_vars($this) as $property => $value) { - if (!Generator::isDefault($value)) { - $data->$property = $value; - } - } - - // Strip properties that are for internal (swagger-php) use. - foreach (static::$_blacklist as $property) { - unset($data->$property); - } - - // Correct empty array to empty objects. - foreach (static::$_types as $property => $type) { - if ($type === 'object' && is_array($data->$property) && empty($data->$property)) { - $data->$property = new \stdClass(); - } - } - - // Inject vendor properties. - unset($data->x); - if (is_array($this->x)) { - foreach ($this->x as $property => $value) { - $prefixed = 'x-' . $property; - $data->$prefixed = $value; - } - } - - // Map nested keys - foreach (static::$_nested as $nested) { - if (is_string($nested) || count($nested) === 1) { - continue; - } - $property = $nested[0]; - if (Generator::isDefault($this->$property)) { - continue; - } - $keyField = $nested[1]; - $object = new \stdClass(); - foreach ($this->$property as $key => $item) { - if (is_numeric($key) === false && is_array($item)) { - $object->$key = $item; - } else { - $key = $item->$keyField; - if (!Generator::isDefault($key) && empty($object->$key)) { - if ($item instanceof \JsonSerializable) { - $object->$key = $item->jsonSerialize(); - } else { - $object->$key = $item; - } - unset($object->$key->$keyField); - } - } - } - $data->$property = $object; - } - - // $ref - if (isset($data->ref)) { - // Only specific https://github.com/OAI/OpenAPI-Specification/blob/3.1.0/versions/3.1.0.md#reference-object - $ref = ['$ref' => $data->ref]; - if ($this->_context->version == OpenApi::VERSION_3_1_0) { - $defaultValues = get_class_vars(get_class($this)); - foreach (['summary', 'description'] as $prop) { - if (property_exists($this, $prop)) { - if ($this->$prop !== $defaultValues[$prop]) { - $ref[$prop] = $data->$prop; - } - } - } - } - $data = (object) $ref; - } - - if ($this->_context->version == OpenApi::VERSION_3_1_0) { - if (isset($data->nullable)) { - if (true === $data->nullable) { - $data->type = (array) $data->type; - $data->type[] = 'null'; - } - unset($data->nullable); - } - } - - return $data; - } - - /** - * Validate annotation tree, and log notices & warnings. - * - * @param array $stack the path of annotations above this annotation in the tree - * @param array $skip (prevent stack overflow, when traversing an infinite dependency graph) - * @param string $ref Current ref path? - * @param object $context a free-form context contains - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = true; - - // Report orphaned annotations - foreach ($this->_unmerged as $annotation) { - if (!is_object($annotation)) { - $this->_context->logger->warning('Unexpected type: "' . gettype($annotation) . '" in ' . $this->identity() . '->_unmerged, expecting a Annotation object'); - break; - } - - $class = get_class($annotation); - if ($details = static::matchNested($class)) { - $property = $details->value; - if (is_array($property)) { - $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . ' multiple found, skipped: ' . $annotation->_context); - } else { - $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . " multiple found in:\n Using: " . $this->$property->_context . "\n Skipped: " . $annotation->_context); - } - } elseif ($annotation instanceof AbstractAnnotation) { - $message = 'Unexpected ' . $annotation->identity(); - if ($class::$_parents) { - $message .= ', expected to be inside ' . implode(', ', Util::shorten($class::$_parents)); - } - $this->_context->logger->warning($message . ' in ' . $annotation->_context); - } - $valid = false; - } - - // Report conflicting key - foreach (static::$_nested as $annotationClass => $nested) { - if (is_string($nested) || count($nested) === 1) { - continue; - } - $property = $nested[0]; - if (Generator::isDefault($this->$property)) { - continue; - } - $keys = []; - $keyField = $nested[1]; - foreach ($this->$property as $key => $item) { - if (is_array($item) && is_numeric($key) === false) { - $this->_context->logger->warning($this->identity() . '->' . $property . ' is an object literal, use nested ' . Util::shorten($annotationClass) . '() annotation(s) in ' . $this->_context); - $keys[$key] = $item; - } elseif (Generator::isDefault($item->$keyField)) { - $this->_context->logger->error($item->identity() . ' is missing key-field: "' . $keyField . '" in ' . $item->_context); - } elseif (isset($keys[$item->$keyField])) { - $this->_context->logger->error('Multiple ' . $item->_identity([]) . ' with the same ' . $keyField . '="' . $item->$keyField . "\":\n " . $item->_context . "\n " . $keys[$item->$keyField]->_context); - } else { - $keys[$item->$keyField] = $item; - } - } - } - - if (property_exists($this, 'ref') && !Generator::isDefault($this->ref) && $this->ref !== null) { - if (substr($this->ref, 0, 2) === '#/' && count($stack) > 0 && $stack[0] instanceof OpenApi) { - // Internal reference - try { - $stack[0]->ref($this->ref); - } catch (\Exception $e) { - $this->_context->logger->warning($e->getMessage() . ' for ' . $this->identity() . ' in ' . $this->_context, ['exception' => $e]); - } - } - } else { - // Report missing required fields (when not a $ref) - foreach (static::$_required as $property) { - if (Generator::isDefault($this->$property)) { - $message = 'Missing required field "' . $property . '" for ' . $this->identity() . ' in ' . $this->_context; - foreach (static::$_nested as $class => $nested) { - $nestedProperty = is_array($nested) ? $nested[0] : $nested; - if ($property === $nestedProperty) { - if ($this instanceof OpenApi) { - $message = 'Required ' . Util::shorten($class) . '() not found'; - } elseif (is_array($nested)) { - $message = $this->identity() . ' requires at least one ' . Util::shorten($class) . '() in ' . $this->_context; - } else { - $message = $this->identity() . ' requires a ' . Util::shorten($class) . '() in ' . $this->_context; - } - break; - } - } - $this->_context->logger->warning($message); - } - } - } - - // Report invalid types - foreach (static::$_types as $property => $type) { - $value = $this->$property; - if (Generator::isDefault($value) || $value === null) { - continue; - } - if (is_string($type)) { - if ($this->validateType($type, $value) === false) { - $valid = false; - $this->_context->logger->warning($this->identity() . '->' . $property . ' is a "' . gettype($value) . '", expecting a "' . $type . '" in ' . $this->_context); - } - } elseif (is_array($type)) { // enum? - if (in_array($value, $type) === false) { - $this->_context->logger->warning($this->identity() . '->' . $property . ' "' . $value . '" is invalid, expecting "' . implode('", "', $type) . '" in ' . $this->_context); - } - } else { - throw new \Exception('Invalid ' . get_class($this) . '::$_types[' . $property . ']'); - } - } - $stack[] = $this; - - return self::_validate($this, $stack, $skip, $ref, $context) ? $valid : false; - } - - /** - * Recursively validate all annotation properties. - * - * @param array|object $fields - */ - private static function _validate($fields, array $stack, array $skip, string $baseRef, ?object $context): bool - { - $valid = true; - $blacklist = []; - if (is_object($fields)) { - if (in_array($fields, $skip, true)) { - return true; - } - $skip[] = $fields; - $blacklist = property_exists($fields, '_blacklist') ? $fields::$_blacklist : []; - } - - foreach ($fields as $field => $value) { - if ($value === null || is_scalar($value) || in_array($field, $blacklist)) { - continue; - } - $ref = $baseRef !== '' ? $baseRef . '/' . urlencode((string) $field) : urlencode((string) $field); - if (is_object($value)) { - if (method_exists($value, 'validate')) { - if (!$value->validate($stack, $skip, $ref, $context)) { - $valid = false; - } - } elseif (!self::_validate($value, $stack, $skip, $ref, $context)) { - $valid = false; - } - } elseif (is_array($value) && !self::_validate($value, $stack, $skip, $ref, $context)) { - $valid = false; - } - } - - return $valid; - } - - /** - * Return a identity for easy debugging. - * Example: "@OA\Get(path="/pets")". - */ - public function identity(): string - { - $class = get_class($this); - $properties = []; - foreach (static::$_parents as $parent) { - foreach ($parent::$_nested as $annotationClass => $entry) { - if ($annotationClass === $class && is_array($entry) && !Generator::isDefault($this->{$entry[1]})) { - $properties[] = $entry[1]; - break 2; - } - } - } - - return $this->_identity($properties); - } - - /** - * Find matching nested details. - * - * @param string $class the class to match - * - * @return null|object key/value object or `null` - */ - public static function matchNested(string $class) - { - if (array_key_exists($class, static::$_nested)) { - return (object) ['key' => $class, 'value' => static::$_nested[$class]]; - } - - $parent = $class; - // only consider the immediate OpenApi parent - while (0 !== strpos($parent, 'OpenApi\\Annotations\\') && $parent = get_parent_class($parent)) { - if ($kvp = static::matchNested($parent)) { - return $kvp; - } - } - - return null; - } - - /** - * Helper for generating the identity(). - */ - protected function _identity(array $properties): string - { - $fields = []; - foreach ($properties as $property) { - $value = $this->$property; - if ($value !== null && !Generator::isDefault($value)) { - $fields[] = $property . '=' . (is_string($value) ? '"' . $value . '"' : $value); - } - } - - return Util::shorten(get_class($this)) . '(' . implode(',', $fields) . ')'; - } - - /** - * Validates the matching of the property value to a annotation type. - * - * @param string $type The annotations property type - * @param mixed $value The property value - */ - private function validateType(string $type, $value): bool - { - if (substr($type, 0, 1) === '[' && substr($type, -1) === ']') { // Array of a specified type? - if ($this->validateType('array', $value) === false) { - return false; - } - $itemType = substr($type, 1, -1); - foreach ($value as $i => $item) { - if ($this->validateType($itemType, $item) === false) { - return false; - } - } - - return true; - } - - if (is_subclass_of($type, AbstractAnnotation::class)) { - $type = 'object'; - } - - return $this->validateDefaultTypes($type, $value); - } - - /** - * Validates default Open Api types. - * - * @param string $type The property type - * @param mixed $value The value to validate - */ - private function validateDefaultTypes(string $type, $value): bool - { - switch ($type) { - case 'string': - return is_string($value); - case 'boolean': - return is_bool($value); - case 'integer': - return is_int($value); - case 'number': - return is_numeric($value); - case 'object': - return is_object($value); - case 'array': - return $this->validateArrayType($value); - case 'scheme': - return in_array($value, ['http', 'https', 'ws', 'wss'], true); - default: - throw new \Exception('Invalid type "' . $type . '"'); - } - } - - /** - * Validate array type. - */ - private function validateArrayType($value): bool - { - if (is_array($value) === false) { - return false; - } - $count = 0; - foreach ($value as $i => $item) { - //not a array, but a hash/map - if ($count !== $i) { - return false; - } - $count++; - } - - return true; - } - - /** - * Wrap the context with a reference to the annotation it is nested in. - * - * @param AbstractAnnotation $annotation - * - * @return AbstractAnnotation - */ - protected function nested(AbstractAnnotation $annotation, Context $nestedContext) - { - if (property_exists($annotation, '_context') && $annotation->_context === $this->_context) { - $annotation->_context = $nestedContext; - } - - return $annotation; - } - - protected function combine(...$args): array - { - $combined = []; - foreach ($args as $arg) { - if (is_array($arg)) { - $combined = array_merge($combined, $arg); - } else { - $combined[] = $arg; - } - } - - return array_filter($combined, function ($value) { - return !Generator::isDefault($value) && $value !== null; - }); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php b/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php deleted file mode 100644 index 0cdf211..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php +++ /dev/null @@ -1,38 +0,0 @@ - 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Attachable.php b/vendor/zircote/swagger-php/src/Annotations/Attachable.php deleted file mode 100644 index 5cb64ef..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Attachable.php +++ /dev/null @@ -1,73 +0,0 @@ - - */ - public $schemas = Generator::UNDEFINED; - - /** - * Reusable Responses. - * - * @var Response[] - */ - public $responses = Generator::UNDEFINED; - - /** - * Reusable Parameters. - * - * @var Parameter[] - */ - public $parameters = Generator::UNDEFINED; - - /** - * Reusable Examples. - * - * @var Examples[] - */ - public $examples = Generator::UNDEFINED; - - /** - * Reusable Request Bodies. - * - * @var RequestBody[] - */ - public $requestBodies = Generator::UNDEFINED; - - /** - * Reusable Headers. - * - * @var Header[] - */ - public $headers = Generator::UNDEFINED; - - /** - * Reusable Security Schemes. - * - * @var SecurityScheme[] - */ - public $securitySchemes = Generator::UNDEFINED; - - /** - * Reusable Links. - * - * @var Link[] - */ - public $links = Generator::UNDEFINED; - - /** - * Reusable Callbacks. - * - * @var callable[] - */ - public $callbacks = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Response::class => ['responses', 'response'], - Parameter::class => ['parameters', 'parameter'], - PathParameter::class => ['parameters', 'parameter'], - RequestBody::class => ['requestBodies', 'request'], - Examples::class => ['examples', 'example'], - Header::class => ['headers', 'header'], - SecurityScheme::class => ['securitySchemes', 'securityScheme'], - Link::class => ['links', 'link'], - Schema::class => ['schemas', 'schema'], - Attachable::class => ['attachables'], - ]; - - /** - * Generate a `#/components/...` reference for the given annotation. - * - * A `string` component value always assumes type `Schema`. - * - * @param AbstractAnnotation|string $component - */ - public static function ref($component, bool $encode = true): string - { - if ($component instanceof AbstractAnnotation) { - foreach (Components::$_nested as $type => $nested) { - // exclude attachables - if (2 == count($nested)) { - if ($component instanceof $type) { - $type = $nested[0]; - $name = $component->{$nested[1]}; - break; - } - } - } - } else { - $type = 'schemas'; - $name = $component; - } - - return self::COMPONENTS_PREFIX . $type . '/' . ($encode ? Util::refEncode((string) $name) : $name); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Contact.php b/vendor/zircote/swagger-php/src/Annotations/Contact.php deleted file mode 100644 index 1075627..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Contact.php +++ /dev/null @@ -1,63 +0,0 @@ - 'string', - 'url' => 'string', - 'email' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Info::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Delete.php b/vendor/zircote/swagger-php/src/Annotations/Delete.php deleted file mode 100644 index 8c3a54f..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Delete.php +++ /dev/null @@ -1,25 +0,0 @@ - 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Schema::class, - Property::class, - AdditionalProperties::class, - Items::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Examples.php b/vendor/zircote/swagger-php/src/Annotations/Examples.php deleted file mode 100644 index c38a24b..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Examples.php +++ /dev/null @@ -1,96 +0,0 @@ - 'string', - 'description' => 'string', - 'externalValue' => 'string', - ]; - - public static $_required = ['summary']; - - public static $_parents = [ - Components::class, - Parameter::class, - PathParameter::class, - MediaType::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php b/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php deleted file mode 100644 index 81bff45..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php +++ /dev/null @@ -1,76 +0,0 @@ - 'string', - 'url' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_required = ['url']; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - Tag::class, - Schema::class, - AdditionalProperties::class, - Property::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Delete::class, - Patch::class, - Head::class, - Options::class, - Trace::class, - Items::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Flow.php b/vendor/zircote/swagger-php/src/Annotations/Flow.php deleted file mode 100644 index 5409206..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Flow.php +++ /dev/null @@ -1,106 +0,0 @@ - ['implicit', 'password', 'authorizationCode', 'clientCredentials'], - 'refreshUrl' => 'string', - 'authorizationUrl' => 'string', - 'tokenUrl' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - SecurityScheme::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - if (is_array($this->scopes) && empty($this->scopes)) { - $this->scopes = new \stdClass(); - } - - return parent::jsonSerialize(); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Get.php b/vendor/zircote/swagger-php/src/Annotations/Get.php deleted file mode 100644 index c0ff442..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Get.php +++ /dev/null @@ -1,25 +0,0 @@ - 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Response::class, - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Info.php b/vendor/zircote/swagger-php/src/Annotations/Info.php deleted file mode 100644 index db535b3..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Info.php +++ /dev/null @@ -1,98 +0,0 @@ - 'string', - 'version' => 'string', - 'description' => 'string', - 'termsOfService' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Contact::class => 'contact', - License::class => 'license', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Items.php b/vendor/zircote/swagger-php/src/Annotations/Items.php deleted file mode 100644 index c46ec94..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Items.php +++ /dev/null @@ -1,62 +0,0 @@ - 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Property::class, - AdditionalProperties::class, - Schema::class, - JsonContent::class, - XmlContent::class, - Items::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - $parent = end($stack); - if ($parent instanceof Schema && $parent->type !== 'array') { - $this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context); - $valid = false; - } - - // @todo Additional validation when used inside a Header or Parameter context. - - return $valid; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/JsonContent.php b/vendor/zircote/swagger-php/src/Annotations/JsonContent.php deleted file mode 100644 index 348f8d6..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/JsonContent.php +++ /dev/null @@ -1,42 +0,0 @@ -`'application/json'` will be generated. - * - * @Annotation - */ -class JsonContent extends Schema -{ - /** - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = []; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - AdditionalProperties::class => 'additionalProperties', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/License.php b/vendor/zircote/swagger-php/src/Annotations/License.php deleted file mode 100644 index 01e7250..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/License.php +++ /dev/null @@ -1,102 +0,0 @@ - 'string', - 'identifier' => 'string', - 'url' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_required = ['name']; - - /** - * @inheritdoc - */ - public static $_parents = [ - Info::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { - unset($data->identifier); - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - $valid = parent::validate($stack, $skip, $ref, $context); - - if ($this->_context->isVersion(OpenApi::VERSION_3_1_0)) { - if (!Generator::isDefault($this->url) && $this->identifier !== Generator::UNDEFINED) { - $this->_context->logger->warning($this->identity() . ' url and identifier are mutually exclusive'); - $valid = false; - } - } - - return $valid; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Link.php b/vendor/zircote/swagger-php/src/Annotations/Link.php deleted file mode 100644 index 99924db..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Link.php +++ /dev/null @@ -1,113 +0,0 @@ -links array. - * - * @var string - */ - public $link = Generator::UNDEFINED; - - /** - * A relative or absolute reference to an OA operation. - * - * This field is mutually exclusive of the operationId field, and must point to an Operation object. - * - * Relative values may be used to locate an existing Operation object in the OpenAPI definition. - * - * @var string - */ - public $operationRef = Generator::UNDEFINED; - - /** - * The name of an existing, resolvable OA operation, as defined with a unique operationId. - * - * This field is mutually exclusive of the operationRef field. - * - * @var string - */ - public $operationId = Generator::UNDEFINED; - - /** - * A map representing parameters to pass to an operation as specified with operationId or identified via - * operationRef. - * - * The key is the parameter name to be used, whereas the value can be a constant or an expression to - * be evaluated and passed to the linked operation. - * The parameter name can be qualified using the parameter location [{in}.]{name} for operations - * that use the same parameter name in different locations (e.g. path.id). - * - * @var array - */ - public $parameters = Generator::UNDEFINED; - - /** - * A literal value or {expression} to use as a request body when calling the target operation. - */ - public $requestBody = Generator::UNDEFINED; - - /** - * A description of the link. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * A server object to be used by the target operation. - * - * @var Server - */ - public $server = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_nested = [ - Server::class => 'server', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Response::class, - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/MediaType.php b/vendor/zircote/swagger-php/src/Annotations/MediaType.php deleted file mode 100644 index 5abfcdb..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/MediaType.php +++ /dev/null @@ -1,87 +0,0 @@ -content array. - * - * @var string - */ - public $mediaType = Generator::UNDEFINED; - - /** - * The schema defining the type used for the request body. - * - * @var Schema - */ - public $schema = Generator::UNDEFINED; - - /** - * Example of the media type. - * - * The example object should be in the correct format as specified by the media type. - * The example object is mutually exclusive of the examples object. - * - * Furthermore, if referencing a schema which contains an example, - * the example value shall override the example provided by the schema. - */ - public $example = Generator::UNDEFINED; - - /** - * Examples of the media type. - * - * Each example object should match the media type and specified schema if present. - * The examples object is mutually exclusive of the example object. - * - * Furthermore, if referencing a schema which contains an example, - * the examples value shall override the example provided by the schema. - * - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * A map between a property name and its encoding information. - * - * The key, being the property name, must exist in the schema as a property. - * - * The encoding object shall only apply to requestBody objects when the media type is multipart or - * application/x-www-form-urlencoded. - * - * @var array - */ - public $encoding = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Response::class, - RequestBody::class, - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/OpenApi.php b/vendor/zircote/swagger-php/src/Annotations/OpenApi.php deleted file mode 100644 index 5a42184..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/OpenApi.php +++ /dev/null @@ -1,236 +0,0 @@ -@OA\Server objects, which provide connectivity information to a target server. - * - * If not provided, or is an empty array, the default value would be a Server Object with an url value of /. - * - * @var Server[] - */ - public $servers = Generator::UNDEFINED; - - /** - * The available paths and operations for the API. - * - * @var PathItem[] - */ - public $paths = Generator::UNDEFINED; - - /** - * An element to hold various components for the specification. - * - * @var Components - */ - public $components = Generator::UNDEFINED; - - /** - * Lists the required security schemes to execute this operation. - * - * The name used for each property must correspond to a security scheme declared - * in the Security Schemes under the Components Object. - * Security Requirement Objects that contain multiple schemes require that - * all schemes must be satisfied for a request to be authorized. - * This enables support for scenarios where multiple query parameters or - * HTTP headers are required to convey security information. - * When a list of Security Requirement Objects is defined on the Open API object or - * Operation Object, only one of Security Requirement Objects in the list needs to - * be satisfied to authorize the request. - * - * @var array - */ - public $security = Generator::UNDEFINED; - - /** - * A list of tags used by the specification with additional metadata. - * - * The order of the tags can be used to reflect on their order by the parsing tools. - * Not all tags that are used by the Operation Object must be declared. - * The tags that are not declared may be organized randomly or based on the tools' logic. - * Each tag name in the list must be unique. - * - * @var Tag[] - */ - public $tags = Generator::UNDEFINED; - - /** - * Additional external documentation. - * - * @var ExternalDocumentation - */ - public $externalDocs = Generator::UNDEFINED; - - /** - * @var Analysis - */ - public $_analysis = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['openapi', 'info', 'paths']; - - /** - * @inheritdoc - */ - public static $_nested = [ - Info::class => 'info', - Server::class => ['servers'], - PathItem::class => ['paths', 'path'], - Components::class => 'components', - Tag::class => ['tags'], - ExternalDocumentation::class => 'externalDocs', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_types = []; - - /** - * @inheritdoc - */ - public function validate(array $stack = null, array $skip = null, string $ref = '', $context = null): bool - { - if ($stack !== null || $skip !== null || $ref !== '') { - $this->_context->logger->warning('Nested validation for ' . $this->identity() . ' not allowed'); - - return false; - } - - if (!in_array($this->openapi, self::SUPPORTED_VERSIONS)) { - $this->_context->logger->warning('Unsupported OpenAPI version "' . $this->openapi . '". Allowed versions are: ' . implode(', ', self::SUPPORTED_VERSIONS)); - - return false; - } - - return parent::validate([], [], '#', new \stdClass()); - } - - /** - * Save the OpenAPI documentation to a file. - */ - public function saveAs(string $filename, string $format = 'auto'): void - { - if ($format === 'auto') { - $format = strtolower(substr($filename, -5)) === '.json' ? 'json' : 'yaml'; - } - - if (strtolower($format) === 'json') { - $content = $this->toJson(); - } else { - $content = $this->toYaml(); - } - - if (file_put_contents($filename, $content) === false) { - throw new \Exception('Failed to saveAs("' . $filename . '", "' . $format . '")'); - } - } - - /** - * Look up an annotation with a $ref url. - * - * @param string $ref The $ref value, for example: "#/components/schemas/Product" - */ - public function ref(string $ref) - { - if (substr($ref, 0, 2) !== '#/') { - // @todo Add support for external (http) refs? - throw new \Exception('Unsupported $ref "' . $ref . '", it should start with "#/"'); - } - - return $this->resolveRef($ref, '#/', $this, []); - } - - /** - * Recursive helper for ref(). - */ - private static function resolveRef(string $ref, string $resolved, $container, array $mapping) - { - if ($ref === $resolved) { - return $container; - } - $path = substr($ref, strlen($resolved)); - $slash = strpos($path, '/'); - - $subpath = $slash === false ? $path : substr($path, 0, $slash); - $property = Util::refDecode($subpath); - $unresolved = $slash === false ? $resolved . $subpath : $resolved . $subpath . '/'; - - if (is_object($container)) { - if (property_exists($container, $property) === false) { - throw new \Exception('$ref "' . $ref . '" not found'); - } - if ($slash === false) { - return $container->$property; - } - $mapping = []; - if ($container instanceof AbstractAnnotation) { - foreach ($container::$_nested as $nestedClass => $nested) { - if (is_string($nested) === false && count($nested) === 2 && $nested[0] === $property) { - $mapping[$nestedClass] = $nested[1]; - } - } - } - - return self::resolveRef($ref, $unresolved, $container->$property, $mapping); - } elseif (is_array($container)) { - if (array_key_exists($property, $container)) { - return self::resolveRef($ref, $unresolved, $container[$property], []); - } - foreach ($mapping as $nestedClass => $keyField) { - foreach ($container as $key => $item) { - if (is_numeric($key) && is_object($item) && $item instanceof $nestedClass && (string) $item->$keyField === $property) { - return self::resolveRef($ref, $unresolved, $item, []); - } - } - } - } - - throw new \Exception('$ref "' . $unresolved . '" not found'); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Operation.php b/vendor/zircote/swagger-php/src/Annotations/Operation.php deleted file mode 100644 index be8d60a..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Operation.php +++ /dev/null @@ -1,248 +0,0 @@ - 'string', - 'method' => 'string', - 'tags' => '[string]', - 'summary' => 'string', - 'description' => 'string', - 'deprecated' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Parameter::class => ['parameters'], - PathParameter::class => ['parameters'], - Response::class => ['responses', 'response'], - ExternalDocumentation::class => 'externalDocs', - Server::class => ['servers'], - RequestBody::class => 'requestBody', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - unset($data->method); - unset($data->path); - - // ensure security elements are object - if (isset($data->security) && is_array($data->security)) { - foreach ($data->security as $key => $scheme) { - $data->security[$key] = (object) $scheme; - } - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - if (!Generator::isDefault($this->responses)) { - foreach ($this->responses as $response) { - if (!Generator::isDefault($response->response) && $response->response !== 'default' && preg_match('/^([12345]{1}[0-9]{2})|([12345]{1}XX)$/', (string) $response->response) === 0) { - $this->_context->logger->warning('Invalid value "' . $response->response . '" for ' . $response->_identity([]) . '->response, expecting "default", a HTTP Status Code or HTTP Status Code range definition in ' . $response->_context); - $valid = false; - } - } - } - - if (is_object($context) && !Generator::isDefault($this->operationId)) { - if (!property_exists($context, 'operationIds')) { - $context->operationIds = []; - } - - if (in_array($this->operationId, $context->operationIds)) { - $this->_context->logger->warning('operationId must be unique. Duplicate value found: "' . $this->operationId . '"'); - $valid = false; - } - - $context->operationIds[] = $this->operationId; - } - - return $valid; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Options.php b/vendor/zircote/swagger-php/src/Annotations/Options.php deleted file mode 100644 index 312505e..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Options.php +++ /dev/null @@ -1,25 +0,0 @@ -Components::parameters or PathItem::parameters array. - * - * @var string - */ - public $parameter = Generator::UNDEFINED; - - /** - * The (case-sensitive) name of the parameter. - * - * If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object. - * - * If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored. - * For all other cases, the name corresponds to the parameter name used by the in property. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * The location of the parameter. - * - * Possible values are "query", "header", "path" or "cookie". - * - * @var string - */ - public $in = Generator::UNDEFINED; - - /** - * A brief description of the parameter. - * - * This could contain examples of use. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * Determines whether this parameter is mandatory. - * - * If the parameter location is "path", this property is required and its value must be true. - * Otherwise, the property may be included and its default value is false. - * - * @var bool - */ - public $required = Generator::UNDEFINED; - - /** - * Specifies that a parameter is deprecated and should be transitioned out of usage. - * - * @var bool - */ - public $deprecated = Generator::UNDEFINED; - - /** - * Sets the ability to pass empty-valued parameters. - * - * This is valid only for query parameters and allows sending a parameter with an empty value. - * - * Default value is false. - * - * If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored. - * - * @var bool - */ - public $allowEmptyValue = Generator::UNDEFINED; - - /** - * Describes how the parameter value will be serialized depending on the type of the parameter value. - * - * Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form. - * - * @var string - */ - public $style = Generator::UNDEFINED; - - /** - * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. - * - * For other types of parameters this property has no effect. - * - * When style is form, the default value is true. - * For all other styles, the default value is false. - * - * @var bool - */ - public $explode = Generator::UNDEFINED; - - /** - * Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. - * - * This property only applies to parameters with an in value of query. - * - * The default value is false. - * - * @var bool - */ - public $allowReserved = Generator::UNDEFINED; - - /** - * The schema defining the type used for the parameter. - * - * @var Schema - */ - public $schema = Generator::UNDEFINED; - - /** - * Example of the media type. - * - * The example should match the specified schema and encoding properties if present. - * The example object is mutually exclusive of the examples object. - * Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema. - * To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary. - */ - public $example = Generator::UNDEFINED; - - /** - * Examples of the media type. - * - * Each example should contain a value in the correct format as specified in the parameter encoding. - * The examples object is mutually exclusive of the example object. - * Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema. - * - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * A map containing the representations for the parameter. - * - * The key is the media type and the value describes it. - * The map must only contain one entry. - * - * @var MediaType[] - */ - public $content = Generator::UNDEFINED; - - /** - * Path-style parameters defined by RFC6570. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) - */ - public $matrix = Generator::UNDEFINED; - - /** - * Label style parameters defined by RFC6570. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.5) - */ - public $label = Generator::UNDEFINED; - - /** - * Form style parameters defined by RFC6570. - * - * This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.8) - */ - public $form = Generator::UNDEFINED; - - /** - * Simple style parameters defined by RFC6570. - * - * This option replaces collectionFormat with a csv value from OpenAPI 2.0. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.2) - * - * @var array - */ - public $simple = Generator::UNDEFINED; - - /** - * Space separated array values. - * - * This option replaces collectionFormat equal to ssv from OpenAPI 2.0. - * - * @var array - */ - public $spaceDelimited = Generator::UNDEFINED; - - /** - * Pipe separated array values. - * - * This option replaces collectionFormat equal to pipes from OpenAPI 2.0. - * - * @var array - */ - public $pipeDelimited = Generator::UNDEFINED; - - /** - * Provides a simple way of rendering nested objects using form parameters. - */ - public $deepObject = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['name', 'in']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'name' => 'string', - 'in' => ['query', 'header', 'path', 'cookie'], - 'description' => 'string', - 'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'], - 'required' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - PathItem::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Delete::class, - Patch::class, - Head::class, - Options::class, - Trace::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - if (Generator::isDefault($this->ref)) { - if ($this->in === 'body') { - if (Generator::isDefault($this->schema)) { - $this->_context->logger->warning('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context); - $valid = false; - } - } - } - - return $valid; - } - - /** - * @inheritdoc - */ - public function identity(): string - { - return parent::_identity(['name', 'in']); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Patch.php b/vendor/zircote/swagger-php/src/Annotations/Patch.php deleted file mode 100644 index 7972f3b..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Patch.php +++ /dev/null @@ -1,25 +0,0 @@ -paths array). - * - * @var string - */ - public $path = Generator::UNDEFINED; - - /** - * An optional, string summary, intended to apply to all operations in this path. - * - * @var string - */ - public $summary = Generator::UNDEFINED; - - /** - * A definition of a GET operation on this path. - * - * @var Get - */ - public $get = Generator::UNDEFINED; - - /** - * A definition of a PUT operation on this path. - * - * @var Put - */ - public $put = Generator::UNDEFINED; - - /** - * A definition of a POST operation on this path. - * - * @var Post - */ - public $post = Generator::UNDEFINED; - - /** - * A definition of a DELETE operation on this path. - * - * @var Delete - */ - public $delete = Generator::UNDEFINED; - - /** - * A definition of a OPTIONS operation on this path. - * - * @var Options - */ - public $options = Generator::UNDEFINED; - - /** - * A definition of a HEAD operation on this path. - * - * @var Head - */ - public $head = Generator::UNDEFINED; - - /** - * A definition of a PATCH operation on this path. - * - * @var Patch - */ - public $patch = Generator::UNDEFINED; - - /** - * A definition of a TRACE operation on this path. - * - * @var Trace - */ - public $trace = Generator::UNDEFINED; - - /** - * An alternative server array to service all operations in this path. - * - * @var Server[] - */ - public $servers = Generator::UNDEFINED; - - /** - * A list of parameters that are applicable for all the operations described under this path. - * - * These parameters can be overridden at the operation level, but cannot be removed there. - * The list must not include duplicated parameters. - * A unique parameter is defined by a combination of a name and location. - * The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters. - * - * @var Parameter[] - */ - public $parameters = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'path' => 'string', - 'summary' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Get::class => 'get', - Post::class => 'post', - Put::class => 'put', - Delete::class => 'delete', - Patch::class => 'patch', - Trace::class => 'trace', - Head::class => 'head', - Options::class => 'options', - Parameter::class => ['parameters'], - PathParameter::class => ['parameters'], - Server::class => ['servers'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/PathParameter.php b/vendor/zircote/swagger-php/src/Annotations/PathParameter.php deleted file mode 100644 index 9e600b4..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/PathParameter.php +++ /dev/null @@ -1,25 +0,0 @@ -properties array. - * - * @var string - */ - public $property = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - AdditionalProperties::class, - Schema::class, - JsonContent::class, - XmlContent::class, - Property::class, - Items::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Put.php b/vendor/zircote/swagger-php/src/Annotations/Put.php deleted file mode 100644 index a0a0303..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Put.php +++ /dev/null @@ -1,25 +0,0 @@ -|JsonContent|XmlContent - */ - public $content = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'description' => 'string', - 'required' => 'boolean', - 'request' => 'string', - ]; - - public static $_parents = [ - Components::class, - Delete::class, - Get::class, - Head::class, - Operation::class, - Options::class, - Patch::class, - Post::class, - Trace::class, - Put::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - MediaType::class => ['content', 'mediaType'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Response.php b/vendor/zircote/swagger-php/src/Annotations/Response.php deleted file mode 100644 index 5c8d304..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Response.php +++ /dev/null @@ -1,128 +0,0 @@ -responses array. - * - * A HTTP status code or default. - * - * @var string|int - */ - public $response = Generator::UNDEFINED; - - /** - * A short description of the response. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * Maps a header name to its definition. - * - * RFC7230 states header names are case insensitive. - * - * If a response header is defined with the name "Content-Type", it shall be ignored. - * - * @see [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) - * - * @var Header[] - */ - public $headers = Generator::UNDEFINED; - - /** - * A map containing descriptions of potential response payloads. - * - * The key is a media type or media type range and the value describes it. - * - * For responses that match multiple keys, only the most specific key is applicable; - * e.g. text/plain overrides text/*. - * - * @var MediaType|JsonContent|XmlContent|array - */ - public $content = Generator::UNDEFINED; - - /** - * A map of operations links that can be followed from the response. - * - * The key of the map is a short name for the link, following the naming constraints of the names for Component - * Objects. - * - * @var Link[] - */ - public $links = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - MediaType::class => ['content', 'mediaType'], - Header::class => ['headers', 'header'], - Link::class => ['links', 'link'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Patch::class, - Delete::class, - Head::class, - Options::class, - Trace::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - $valid = parent::validate($stack, $skip, $ref, $context); - - if (Generator::isDefault($this->description) && Generator::isDefault($this->ref)) { - $this->_context->logger->warning($this->identity() . ' One of description or ref is required'); - $valid = false; - } - - return $valid; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Schema.php b/vendor/zircote/swagger-php/src/Annotations/Schema.php deleted file mode 100644 index c7f960b..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Schema.php +++ /dev/null @@ -1,440 +0,0 @@ -schemas array. - * - * @var string - */ - public $schema = Generator::UNDEFINED; - - /** - * Can be used to decorate a user interface with information about the data produced by this user interface. - * - * Preferably short; use description for more details. - * - * @var string - */ - public $title = Generator::UNDEFINED; - - /** - * A description will provide explanation about the purpose of the instance described by this schema. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the - * value of this property. - * - * @var int - */ - public $maxProperties = Generator::UNDEFINED; - - /** - * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to, - * the value of this property. - * - * @var int - */ - public $minProperties = Generator::UNDEFINED; - - /** - * An object instance is valid against this property if its property set contains all elements in this property's - * array value. - * - * @var string[] - */ - public $required = Generator::UNDEFINED; - - /** - * @var Property[] - */ - public $properties = Generator::UNDEFINED; - - /** - * The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or - * "object". - * - * @var string - */ - public $type = Generator::UNDEFINED; - - /** - * The extending format for the previously mentioned type. See Data Type Formats for further details. - * - * @var string - */ - public $format = Generator::UNDEFINED; - - /** - * Required if type is "array". Describes the type of items in the array. - * - * @var Items - */ - public $items = Generator::UNDEFINED; - - /** - * Determines the format of the array if type array is used. - * Possible values are: - * - csv: comma separated values foo,bar. - * - ssv: space separated values foo bar. - * - tsv: tab separated values foo\tbar. - * - pipes: pipe separated values foo|bar. - * - multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz. - * This is valid only for parameters of type query or formData. - * Default value is csv. - * - * @var string - */ - public $collectionFormat = Generator::UNDEFINED; - - /** - * Sets a default value to the parameter. The type of the value depends on the defined type. - * - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor101) - */ - public $default = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) - * - * @var int|float - */ - public $maximum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) - * - * @var bool - */ - public $exclusiveMaximum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) - * - * @var int|float - */ - public $minimum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) - * - * @var bool - */ - public $exclusiveMinimum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor26) - * - * @var int - */ - public $maxLength = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor29) - * - * @var int - */ - public $minLength = Generator::UNDEFINED; - - /** - * A string instance is considered valid if the regular expression matches the instance successfully. - * - * @var string - */ - public $pattern = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor42) - * - * @var int - */ - public $maxItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor45) - * - * @var int - */ - public $minItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor49) - * - * @var bool - */ - public $uniqueItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor76) - * - * @var string[]|int[]|float[] - */ - public $enum = Generator::UNDEFINED; - - /** - * A numeric instance is valid against "multipleOf" if the result of the division of the instance by this - * property's value is an integer. - * - * @var int|float - */ - public $multipleOf = Generator::UNDEFINED; - - /** - * Adds support for polymorphism. - * - * The discriminator is an object name that is used to differentiate between other schemas which may satisfy the - * payload description. See Composition and Inheritance for more details. - * - * @var Discriminator - */ - public $discriminator = Generator::UNDEFINED; - - /** - * Declares the property as "read only". - * - * Relevant only for Schema "properties" definitions. - * - * This means that it may be sent as part of a response but should not be sent as part of the request. - * If the property is marked as readOnly being true and is in the required list, the required will take effect on - * the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is - * false. - * - * @var bool - */ - public $readOnly = Generator::UNDEFINED; - - /** - * Declares the property as "write only". - * - * Relevant only for Schema "properties" definitions. - * Therefore, it may be sent as part of a request but should not be sent as part of the response. - * If the property is marked as writeOnly being true and is in the required list, the required will take effect on - * the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is - * false. - * - * @var bool - */ - public $writeOnly = Generator::UNDEFINED; - - /** - * This may be used only on properties schemas. - * - * It has no effect on root schemas. - * Adds additional metadata to describe the XML representation of this property. - * - * @var Xml - */ - public $xml = Generator::UNDEFINED; - - /** - * Additional external documentation for this schema. - * - * @var ExternalDocumentation - */ - public $externalDocs = Generator::UNDEFINED; - - /** - * A free-form property to include an example of an instance for this schema. - * - * To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to - * contain the example with escaping where necessary. - */ - public $example = Generator::UNDEFINED; - - /** - * Allows sending a null value for the defined schema. - * Default value is false. - * - * @var bool - */ - public $nullable = Generator::UNDEFINED; - - /** - * Specifies that a schema is deprecated and should be transitioned out of usage. - * Default value is false. - * - * @var bool - */ - public $deprecated = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against all schemas - * defined by this property's value. - * - * @var array - */ - public $allOf = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against at least one - * schema defined by this property's value. - * - * @var array - */ - public $anyOf = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against exactly one schema - * defined by this property's value. - * - * @var array - */ - public $oneOf = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29. - */ - public $not = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#anchor64. - * - * @var bool|AdditionalProperties - */ - public $additionalProperties = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10. - */ - public $additionalItems = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14. - */ - public $contains = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19. - */ - public $patternProperties = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21. - */ - public $dependencies = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22. - */ - public $propertyNames = Generator::UNDEFINED; - - /** - * http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3. - * - * @var mixed - */ - public $const = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'title' => 'string', - 'description' => 'string', - 'required' => '[string]', - 'format' => 'string', - 'collectionFormat' => ['csv', 'ssv', 'tsv', 'pipes', 'multi'], - 'maximum' => 'number', - 'exclusiveMaximum' => 'boolean', - 'minimum' => 'number', - 'exclusiveMinimum' => 'boolean', - 'maxLength' => 'integer', - 'minLength' => 'integer', - 'pattern' => 'string', - 'maxItems' => 'integer', - 'minItems' => 'integer', - 'uniqueItems' => 'boolean', - 'multipleOf' => 'integer', - 'allOf' => '[' . Schema::class . ']', - 'oneOf' => '[' . Schema::class . ']', - 'anyOf' => '[' . Schema::class . ']', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Parameter::class, - PathParameter::class, - MediaType::class, - Header::class, - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - if (isset($data->const)) { - if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { - $data->enum = [$data->const]; - unset($data->const); - } - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if ($this->type === 'array' && Generator::isDefault($this->items)) { - $this->_context->logger->warning('@OA\\Items() is required when ' . $this->identity() . ' has type "array" in ' . $this->_context); - - return false; - } - - return parent::validate($stack, $skip, $ref, $context); - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php b/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php deleted file mode 100644 index 13fa564..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php +++ /dev/null @@ -1,136 +0,0 @@ -security array. - * - * @var string - */ - public $securityScheme = Generator::UNDEFINED; - - /** - * The type of the security scheme. - * - * @var string - */ - public $type = Generator::UNDEFINED; - - /** - * A short description for security scheme. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * The name of the header or query parameter to be used. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * Required The location of the API key. - * - * @var string - */ - public $in = Generator::UNDEFINED; - - /** - * The flow used by the OAuth2 security scheme. - * - * @var Flow[] - */ - public $flows = Generator::UNDEFINED; - - /** - * A hint to the client to identify how the bearer token is formatted. - * - * Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes. - * - * @var string - */ - public $bearerFormat = Generator::UNDEFINED; - - /** - * The name of the HTTP Authorization scheme. - * - * @see [RFC7235](https://tools.ietf.org/html/rfc7235#section-5.1) - * - * @var string - */ - public $scheme = Generator::UNDEFINED; - - /** - * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL. - * - * @var string - */ - public $openIdConnectUrl = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['securityScheme', 'type']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'type' => ['http', 'apiKey', 'oauth2', 'openIdConnect'], - 'description' => 'string', - 'name' => 'string', - 'bearerFormat' => 'string', - 'in' => ['query', 'header', 'cookie'], - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Flow::class => ['flows', 'flow'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - ]; - - /** - * @inheritdoc - */ - public function merge(array $annotations, bool $ignore = false): array - { - $unmerged = parent::merge($annotations, $ignore); - - if ($this->type === 'oauth2') { - $this->name = Generator::UNDEFINED; - } - - return $unmerged; - } -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Server.php b/vendor/zircote/swagger-php/src/Annotations/Server.php deleted file mode 100644 index df0cb0d..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Server.php +++ /dev/null @@ -1,87 +0,0 @@ - ['variables', 'serverVariable'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_required = ['url']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'url' => 'string', - 'description' => 'string', - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php b/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php deleted file mode 100644 index 99423aa..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php +++ /dev/null @@ -1,87 +0,0 @@ -variables array. - * - * @var string - */ - public $serverVariable = Generator::UNDEFINED; - - /** - * An enumeration of values to be used if the substitution options are from a limited set. - * - * @var string[]|int[]|float[] - */ - public $enum = Generator::UNDEFINED; - - /** - * The default value to use for substitution, and to send, if an alternate value is not supplied. - * - * Unlike the Schema Object's default, this value must be provided by the consumer. - * - * @var string - */ - public $default = Generator::UNDEFINED; - - /** - * A map between a variable name and its value. - * - * The value is used for substitution in the server's URL template. - * - * @var array - */ - public $variables = Generator::UNDEFINED; - - /** - * An optional description for the server variable. - * - * CommonMark syntax MAY be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - Server::class, - ]; - - /** - * @inheritdoc - */ - public static $_required = ['default']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'default' => 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Tag.php b/vendor/zircote/swagger-php/src/Annotations/Tag.php deleted file mode 100644 index 670ac87..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Tag.php +++ /dev/null @@ -1,66 +0,0 @@ - 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - ExternalDocumentation::class => 'externalDocs', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/Trace.php b/vendor/zircote/swagger-php/src/Annotations/Trace.php deleted file mode 100644 index aac2820..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/Trace.php +++ /dev/null @@ -1,25 +0,0 @@ -true. - * - * If wrapped is false, it will be ignored. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * The URL of the namespace definition. Value SHOULD be in the form of an URL. - * - * @var string - */ - public $namespace = Generator::UNDEFINED; - - /** - * The prefix to be used for the name. - * - * @var string - */ - public $prefix = Generator::UNDEFINED; - - /** - * Declares whether the property definition translates to an attribute instead of an element. - * - * Default value is false. - * - * @var bool - */ - public $attribute = Generator::UNDEFINED; - - /** - * MAY be used only for an array definition. - * - * Signifies whether the array is wrapped (for example <books><book/><book/></books>) - * or unwrapped (<book/><book/>). - * - * Default value is false. The definition takes effect only when defined alongside type being array (outside the items). - * - * @var bool - */ - public $wrapped = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'name' => 'string', - 'namespace' => 'string', - 'prefix' => 'string', - 'attribute' => 'boolean', - 'wrapped' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - AdditionalProperties::class, - Schema::class, - Property::class, - Schema::class, - Items::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Annotations/XmlContent.php b/vendor/zircote/swagger-php/src/Annotations/XmlContent.php deleted file mode 100644 index 59f7651..0000000 --- a/vendor/zircote/swagger-php/src/Annotations/XmlContent.php +++ /dev/null @@ -1,43 +0,0 @@ -`'application/xml'` will be generated. - * - * @Annotation - */ -class XmlContent extends Schema -{ - /** - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = []; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php b/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php deleted file mode 100644 index a6f28c8..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php +++ /dev/null @@ -1,101 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Attachable.php b/vendor/zircote/swagger-php/src/Attributes/Attachable.php deleted file mode 100644 index 0fc6fa7..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Attachable.php +++ /dev/null @@ -1,16 +0,0 @@ -|null $schemas - * @param Response[]|null $responses - * @param Parameter[]|null $parameters - * @param RequestBody[]|null $requestBodies - * @param Examples[]|null $examples - * @param Header[]|null $headers - * @param SecurityScheme[]|null $securitySchemes - * @param Link[]|null $links - * @param callable[]|null $callbacks - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $schemas = null, - ?array $responses = null, - ?array $parameters = null, - ?array $requestBodies = null, - ?array $examples = null, - ?array $headers = null, - ?array $securitySchemes = null, - ?array $links = null, - ?array $callbacks = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'callbacks' => $callbacks ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($schemas, $responses, $parameters, $examples, $requestBodies, $headers, $securitySchemes, $links, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Contact.php b/vendor/zircote/swagger-php/src/Attributes/Contact.php deleted file mode 100644 index 332979e..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Contact.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $url = null, - ?string $email = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'email' => $email ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Delete.php b/vendor/zircote/swagger-php/src/Attributes/Delete.php deleted file mode 100644 index d2f1c73..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Delete.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $propertyName = null, - ?array $mapping = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'propertyName' => $propertyName ?? Generator::UNDEFINED, - 'mapping' => $mapping ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Examples.php b/vendor/zircote/swagger-php/src/Attributes/Examples.php deleted file mode 100644 index 9e1a9a0..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Examples.php +++ /dev/null @@ -1,42 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $example = null, - ?string $summary = null, - ?string $description = null, - int|string|array|null $value = null, - ?string $externalValue = null, - string|object|null $ref = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'example' => $example ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'value' => $value ?? Generator::UNDEFINED, - 'externalValue' => $externalValue ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - ]); - if ($attachables) { - $this->merge($attachables); - } - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php b/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php deleted file mode 100644 index f9bfa94..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php +++ /dev/null @@ -1,32 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $description = null, - ?string $url = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'description' => $description ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Flow.php b/vendor/zircote/swagger-php/src/Attributes/Flow.php deleted file mode 100644 index 80e6ebc..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Flow.php +++ /dev/null @@ -1,38 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $authorizationUrl = null, - ?string $tokenUrl = null, - ?string $refreshUrl = null, - ?string $flow = null, - ?array $scopes = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'authorizationUrl' => $authorizationUrl ?? Generator::UNDEFINED, - 'tokenUrl' => $tokenUrl ?? Generator::UNDEFINED, - 'refreshUrl' => $refreshUrl ?? Generator::UNDEFINED, - 'flow' => $flow ?? Generator::UNDEFINED, - 'scopes' => $scopes ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Get.php b/vendor/zircote/swagger-php/src/Attributes/Get.php deleted file mode 100644 index 81e5ad8..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Get.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $header = null, - ?string $description = null, - ?bool $required = null, - ?Schema $schema = null, - ?bool $deprecated = null, - ?bool $allowEmptyValue = null, - // annotation4 - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'header' => $header ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables, $schema), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Info.php b/vendor/zircote/swagger-php/src/Attributes/Info.php deleted file mode 100644 index 39348f5..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Info.php +++ /dev/null @@ -1,38 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $version = null, - ?string $description = null, - ?string $title = null, - ?string $termsOfService = null, - ?Contact $contact = null, - ?License $license = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'version' => $version ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'termsOfService' => $termsOfService ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($contact, $license, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Items.php b/vendor/zircote/swagger-php/src/Attributes/Items.php deleted file mode 100644 index 00d1d49..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Items.php +++ /dev/null @@ -1,105 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/JsonContent.php b/vendor/zircote/swagger-php/src/Attributes/JsonContent.php deleted file mode 100644 index 5472064..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/JsonContent.php +++ /dev/null @@ -1,108 +0,0 @@ - $examples - * @param string[] $required - * @param Property[] $properties - * @param int|float $maximum - * @param int|float $minimum - * @param string[]|int[]|float[] $enum - * @param array $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $examples = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'examples' => $examples ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/License.php b/vendor/zircote/swagger-php/src/Attributes/License.php deleted file mode 100644 index b929237..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/License.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $identifier = null, - ?string $url = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'identifier' => $identifier ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Link.php b/vendor/zircote/swagger-php/src/Attributes/Link.php deleted file mode 100644 index 58eeb0a..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Link.php +++ /dev/null @@ -1,44 +0,0 @@ - $parameters - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $link = null, - ?string $operationRef = null, - string|object|null $ref = null, - ?string $operationId = null, - ?array $parameters = null, - $requestBody = null, - ?string $description = null, - ?Server $server = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'link' => $link ?? Generator::UNDEFINED, - 'operationRef' => $operationRef ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'operationId' => $operationId ?? Generator::UNDEFINED, - 'parameters' => $parameters ?? Generator::UNDEFINED, - 'requestBody' => $requestBody ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($server, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/MediaType.php b/vendor/zircote/swagger-php/src/Attributes/MediaType.php deleted file mode 100644 index b351510..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/MediaType.php +++ /dev/null @@ -1,38 +0,0 @@ - $examples - * @param array $encoding - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $mediaType = null, - ?Schema $schema = null, - $example = Generator::UNDEFINED, - ?array $examples = null, - ?array $encoding = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'mediaType' => $mediaType ?? Generator::UNDEFINED, - 'example' => $example, - 'encoding' => $encoding ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($schema, $examples, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/OpenApi.php b/vendor/zircote/swagger-php/src/Attributes/OpenApi.php deleted file mode 100644 index ce625e2..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/OpenApi.php +++ /dev/null @@ -1,41 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string $openapi = self::DEFAULT_VERSION, - ?Info $info = null, - ?array $servers = null, - ?array $security = null, - ?array $tags = null, - ?ExternalDocumentation $externalDocs = null, - ?array $paths = null, - ?Components $components = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'openapi' => $openapi, - 'security' => $security ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($info, $servers, $tags, $externalDocs, $paths, $components, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php b/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php deleted file mode 100644 index 7473f3f..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php +++ /dev/null @@ -1,55 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $path = null, - ?string $operationId = null, - ?string $description = null, - ?string $summary = null, - ?array $security = null, - ?array $servers = null, - ?RequestBody $requestBody = null, - ?array $tags = null, - ?array $parameters = null, - ?array $responses = null, - ?array $callbacks = null, - ?ExternalDocumentation $externalDocs = null, - ?bool $deprecated = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'path' => $path ?? Generator::UNDEFINED, - 'operationId' => $operationId ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'security' => $security ?? Generator::UNDEFINED, - 'servers' => $servers ?? Generator::UNDEFINED, - 'tags' => $tags ?? Generator::UNDEFINED, - 'callbacks' => $callbacks ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($requestBody, $responses, $parameters, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Options.php b/vendor/zircote/swagger-php/src/Attributes/Options.php deleted file mode 100644 index 175b962..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Options.php +++ /dev/null @@ -1,13 +0,0 @@ - $examples - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $parameter = null, - ?string $name = null, - ?string $description = null, - ?string $in = null, - ?bool $required = null, - ?bool $deprecated = null, - ?bool $allowEmptyValue = null, - string|object|null $ref = null, - ?Schema $schema = null, - $example = Generator::UNDEFINED, - ?array $examples = null, - ?string $style = null, - ?bool $explode = null, - ?bool $allowReserved = null, - ?array $spaceDelimited = null, - ?array $pipeDelimited = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'parameter' => $parameter ?? Generator::UNDEFINED, - 'name' => $name ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'in' => Generator::isDefault($this->in) ? $in : $this->in, - 'required' => $required ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'example' => $example, - 'style' => $style ?? Generator::UNDEFINED, - 'explode' => $explode ?? Generator::UNDEFINED, - 'allowReserved' => $allowReserved ?? Generator::UNDEFINED, - 'spaceDelimited' => $spaceDelimited ?? Generator::UNDEFINED, - 'pipeDelimited' => $pipeDelimited ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($schema, $examples, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Patch.php b/vendor/zircote/swagger-php/src/Attributes/Patch.php deleted file mode 100644 index 1a0a3c8..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Patch.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $path = null, - ?string $summary = null, - ?array $servers = null, - ?array $parameters = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'path' => $path ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($servers, $parameters, $attachables), - ]); - } -} - -//Missing parameters: get, put, post, delete, options, head, patch, trace, parameters diff --git a/vendor/zircote/swagger-php/src/Attributes/PathParameter.php b/vendor/zircote/swagger-php/src/Attributes/PathParameter.php deleted file mode 100644 index 70ccfd6..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/PathParameter.php +++ /dev/null @@ -1,13 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $property = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'property' => $property ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Put.php b/vendor/zircote/swagger-php/src/Attributes/Put.php deleted file mode 100644 index 2133102..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Put.php +++ /dev/null @@ -1,13 +0,0 @@ -|JsonContent|XmlContent|null $content - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $request = null, - ?string $description = null, - ?bool $required = null, - array|JsonContent|XmlContent|null $content = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'request' => $request ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($content, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Response.php b/vendor/zircote/swagger-php/src/Attributes/Response.php deleted file mode 100644 index 9106141..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Response.php +++ /dev/null @@ -1,43 +0,0 @@ - $content - * @param Link[] $links - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - int|string $response = null, - ?string $description = null, - ?array $headers = null, - MediaType|JsonContent|XmlContent|array|null $content = null, - ?array $links = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'response' => $response ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($headers, $content, $links, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Schema.php b/vendor/zircote/swagger-php/src/Attributes/Schema.php deleted file mode 100644 index 5e4bfe5..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Schema.php +++ /dev/null @@ -1,106 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param mixed $const - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - $const = Generator::UNDEFINED, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - 'const' => $const, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php b/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php deleted file mode 100644 index f1d8bec..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php +++ /dev/null @@ -1,48 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $securityScheme = null, - ?string $type = null, - ?string $description = null, - ?string $name = null, - ?string $in = null, - ?string $bearerFormat = null, - ?string $scheme = null, - ?string $openIdConnectUrl = null, - ?array $flows = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'securityScheme' => $securityScheme ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'name' => $name ?? Generator::UNDEFINED, - 'in' => $in ?? Generator::UNDEFINED, - 'bearerFormat' => $bearerFormat ?? Generator::UNDEFINED, - 'scheme' => $scheme ?? Generator::UNDEFINED, - 'openIdConnectUrl' => $openIdConnectUrl ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($flows, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Server.php b/vendor/zircote/swagger-php/src/Attributes/Server.php deleted file mode 100644 index 337d595..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Server.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $url = null, - ?string $description = null, - ?array $variables = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'url' => $url ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($variables, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php b/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php deleted file mode 100644 index e378812..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php +++ /dev/null @@ -1,39 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $serverVariable = null, - ?string $description = null, - ?string $default = null, - ?array $enum = null, - ?array $variables = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'serverVariable' => $serverVariable ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'default' => $default ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'variables' => $variables ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Tag.php b/vendor/zircote/swagger-php/src/Attributes/Tag.php deleted file mode 100644 index 8ef0ef1..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Tag.php +++ /dev/null @@ -1,33 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $description = null, - ?ExternalDocumentation $externalDocs = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/Trace.php b/vendor/zircote/swagger-php/src/Attributes/Trace.php deleted file mode 100644 index aff7fe7..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/Trace.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $namespace = null, - ?string $prefix = null, - ?bool $attribute = null, - ?bool $wrapped = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'namespace' => $namespace ?? Generator::UNDEFINED, - 'prefix' => $prefix ?? Generator::UNDEFINED, - 'attribute' => $attribute ?? Generator::UNDEFINED, - 'wrapped' => $wrapped ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Attributes/XmlContent.php b/vendor/zircote/swagger-php/src/Attributes/XmlContent.php deleted file mode 100644 index 6126951..0000000 --- a/vendor/zircote/swagger-php/src/Attributes/XmlContent.php +++ /dev/null @@ -1,108 +0,0 @@ - $examples - * @param string[] $required - * @param int|float $maximum - * @param int|float $minimum - * @param Property[] $properties - * @param string[]|int[]|float[] $enum - * @param array $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $examples = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'examples' => $examples ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/zircote/swagger-php/src/Context.php b/vendor/zircote/swagger-php/src/Context.php deleted file mode 100644 index 30ab050..0000000 --- a/vendor/zircote/swagger-php/src/Context.php +++ /dev/null @@ -1,273 +0,0 @@ - $value) { - $this->$property = $value; - } - $this->_parent = $parent; - - $this->logger = $this->logger ?: new DefaultLogger(); - } - - /** - * Check if a property is set directly on this context and not its parent context. - * - * Example: $c->is('method') or $c->is('class') - */ - public function is(string $type): bool - { - return property_exists($this, $type); - } - - /** - * Check if a property is NOT set directly on this context and but its parent context. - * - * Example: $c->not('method') or $c->not('class') - */ - public function not(string $type): bool - { - return property_exists($this, $type) === false; - } - - /** - * Return the context containing the specified property. - */ - public function with(string $property): ?Context - { - if (property_exists($this, $property)) { - return $this; - } - if ($this->_parent !== null) { - return $this->_parent->with($property); - } - - return null; - } - - /** - * Get the root context. - */ - public function root(): Context - { - if ($this->_parent !== null) { - return $this->_parent->root(); - } - - return $this; - } - - /** - * Check if one of the given version numbers matches the current OpenAPI version. - * - * @param string|array $versions One or more version numbers - */ - public function isVersion($versions): bool - { - if (!$this->version) { - throw new \RuntimeException('Version is only available reliably for validation and serialization'); - } - - $versions = (array) $versions; - $currentVersion = $this->version ?: OpenApi::DEFAULT_VERSION; - - return in_array($currentVersion, $versions); - } - - /** - * Export location for debugging. - * - * @return string Example: "file1.php on line 12" - */ - public function getDebugLocation(): string - { - $location = ''; - if ($this->class && ($this->method || $this->property)) { - $location .= $this->fullyQualifiedName($this->class); - if ($this->method) { - $location .= ($this->static ? '::' : '->') . $this->method . '()'; - } elseif ($this->property) { - $location .= ($this->static ? '::$' : '->') . $this->property; - } - } - if ($this->filename) { - if ($location !== '') { - $location .= ' in '; - } - $location .= $this->filename; - } - if ($this->line) { - if ($location !== '') { - $location .= ' on'; - } - $location .= ' line ' . $this->line; - if ($this->character) { - $location .= ':' . $this->character; - } - } - - return $location; - } - - /** - * Traverse the context tree to get the property value. - */ - public function __get(string $property) - { - if ($this->_parent !== null) { - return $this->_parent->$property; - } - - return null; - } - - public function __toString() - { - return $this->getDebugLocation(); - } - - public function __debugInfo() - { - return ['-' => $this->getDebugLocation()]; - } - - /** - * Create a Context based on the debug_backtrace. - * - * @deprecated - */ - public static function detect(int $index = 0): Context - { - $context = new Context(); - $backtrace = debug_backtrace(); - $position = $backtrace[$index]; - if (isset($position['file'])) { - $context->filename = $position['file']; - } - if (isset($position['line'])) { - $context->line = $position['line']; - } - $caller = isset($backtrace[$index + 1]) ? $backtrace[$index + 1] : null; - if (isset($caller['function'])) { - $context->method = $caller['function']; - if (isset($caller['type']) && $caller['type'] === '::') { - $context->static = true; - } - } - if (isset($caller['class'])) { - $fqn = explode('\\', $caller['class']); - $context->class = array_pop($fqn); - if (count($fqn)) { - $context->namespace = implode('\\', $fqn); - } - } - - // @todo extract namespaces and use statements - return $context; - } - - /** - * Resolve the fully qualified name. - */ - public function fullyQualifiedName(?string $source): string - { - if ($source === null) { - return ''; - } - - if ($this->namespace) { - $namespace = str_replace('\\\\', '\\', '\\' . $this->namespace . '\\'); - } else { - // global namespace - $namespace = '\\'; - } - - $thisSource = $this->class ?? $this->interface ?? $this->trait; - if ($thisSource && strcasecmp($source, $thisSource) === 0) { - return $namespace . $thisSource; - } - $pos = strpos($source, '\\'); - if ($pos !== false) { - if ($pos === 0) { - // Fully qualified name (\Foo\Bar) - return $source; - } - // Qualified name (Foo\Bar) - if ($this->uses) { - foreach ($this->uses as $alias => $aliasedNamespace) { - $alias .= '\\'; - if (strcasecmp(substr($source, 0, strlen($alias)), $alias) === 0) { - // Aliased namespace (use \Long\Namespace as Foo) - return '\\' . $aliasedNamespace . substr($source, strlen($alias) - 1); - } - } - } - } elseif ($this->uses) { - // Unqualified name (Foo) - foreach ($this->uses as $alias => $aliasedNamespace) { - if (strcasecmp($alias, $source) === 0) { - return '\\' . $aliasedNamespace; - } - } - } - - return $namespace . $source; - } -} diff --git a/vendor/zircote/swagger-php/src/Generator.php b/vendor/zircote/swagger-php/src/Generator.php deleted file mode 100644 index e82d565..0000000 --- a/vendor/zircote/swagger-php/src/Generator.php +++ /dev/null @@ -1,438 +0,0 @@ - */ - public const DEFAULT_ALIASES = ['oa' => 'OpenApi\\Annotations']; - /** @var array */ - public const DEFAULT_NAMESPACES = ['OpenApi\\Annotations\\']; - - /** @var array Map of namespace aliases to be supported by doctrine. */ - protected $aliases; - - /** @var array|null List of annotation namespaces to be autoloaded by doctrine. */ - protected $namespaces; - - /** @var AnalyserInterface|null The configured analyzer. */ - protected $analyser; - - /** @var array */ - protected $config = []; - - /** @var callable[]|null List of configured processors. */ - protected $processors = null; - - /** @var LoggerInterface|null PSR logger. */ - protected $logger = null; - - /** - * OpenApi version override. - * - * If set, it will override the version set in the `OpenApi` annotation. - * - * Due to the order of processing any conditional code using this (via `Context::$version`) - * must come only after the analysis is finished. - * - * @var string|null - */ - protected $version = null; - - private $configStack; - - public function __construct(?LoggerInterface $logger = null) - { - $this->logger = $logger; - - $this->setAliases(self::DEFAULT_ALIASES); - $this->setNamespaces(self::DEFAULT_NAMESPACES); - - // kinda config stack to stay BC... - $this->configStack = new class() { - protected $generator; - - public function push(Generator $generator): void - { - $this->generator = $generator; - if (class_exists(AnnotationRegistry::class, true)) { - // keeping track of &this->generator allows to 'disable' the loader after we are done; - // no unload, unfortunately :/ - $gref = &$this->generator; - AnnotationRegistry::registerLoader( - function (string $class) use (&$gref): bool { - if ($gref) { - foreach ($gref->getNamespaces() as $namespace) { - if (strtolower(substr($class, 0, strlen($namespace))) === strtolower($namespace)) { - $loaded = class_exists($class); - if (!$loaded && $namespace === 'OpenApi\\Annotations\\') { - if (in_array(strtolower(substr($class, 20)), ['definition', 'path'])) { - // Detected an 2.x annotation? - throw new \Exception('The annotation @SWG\\' . substr($class, 20) . '() is deprecated. Found in ' . Generator::$context . "\nFor more information read the migration guide: https://github.com/zircote/swagger-php/blob/master/docs/Migrating-to-v3.md"); - } - } - - return $loaded; - } - } - } - - return false; - } - ); - } - } - - public function pop(): void - { - $this->generator = null; - } - }; - } - - public static function isDefault($value): bool - { - return $value === Generator::UNDEFINED; - } - - public function getAliases(): array - { - return $this->aliases; - } - - public function addAlias(string $alias, string $namespace): Generator - { - $this->aliases[$alias] = $namespace; - - return $this; - } - - public function setAliases(array $aliases): Generator - { - $this->aliases = $aliases; - - return $this; - } - - public function getNamespaces(): ?array - { - return $this->namespaces; - } - - public function addNamespace(string $namespace): Generator - { - $namespaces = (array) $this->getNamespaces(); - $namespaces[] = $namespace; - - return $this->setNamespaces(array_unique($namespaces)); - } - - public function setNamespaces(?array $namespaces): Generator - { - $this->namespaces = $namespaces; - - return $this; - } - - public function getAnalyser(): AnalyserInterface - { - $this->analyser = $this->analyser ?: new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); - $this->analyser->setGenerator($this); - - return $this->analyser; - } - - public function setAnalyser(?AnalyserInterface $analyser): Generator - { - $this->analyser = $analyser; - - return $this; - } - - public function getDefaultConfig(): array - { - return [ - 'operationId' => [ - 'hash' => true, - ], - ]; - } - - public function getConfig(): array - { - return $this->config + $this->getDefaultConfig(); - } - - /** - * Set generator and/or processor config. - * - * @param array $config - */ - public function setConfig(array $config): Generator - { - $this->config = $config + $this->config; - - return $this; - } - - /** - * @return callable[] - */ - public function getProcessors(): array - { - if (null === $this->processors) { - $this->processors = [ - new Processors\DocBlockDescriptions(), - new Processors\MergeIntoOpenApi(), - new Processors\MergeIntoComponents(), - new Processors\ExpandClasses(), - new Processors\ExpandInterfaces(), - new Processors\ExpandTraits(), - new Processors\ExpandEnums(), - new Processors\AugmentSchemas(), - new Processors\AugmentProperties(), - new Processors\BuildPaths(), - new Processors\AugmentParameters(), - new Processors\AugmentRefs(), - new Processors\MergeJsonContent(), - new Processors\MergeXmlContent(), - new Processors\OperationId(), - new Processors\CleanUnmerged(), - ]; - } - - $config = $this->getConfig(); - foreach ($this->processors as $processor) { - $rc = new \ReflectionClass($processor); - - // apply config - $processorKey = lcfirst($rc->getShortName()); - if (array_key_exists($processorKey, $config)) { - foreach ($config[$processorKey] as $name => $value) { - $setter = 'set' . ucfirst($name); - if (method_exists($processor, $setter)) { - $processor->{$setter}($value); - } - } - } - } - - return $this->processors; - } - - /** - * @param null|callable[] $processors - */ - public function setProcessors(?array $processors): Generator - { - $this->processors = $processors; - - return $this; - } - - public function addProcessor(callable $processor): Generator - { - $processors = $this->getProcessors(); - $processors[] = $processor; - $this->setProcessors($processors); - - return $this; - } - - public function removeProcessor(callable $processor, bool $silent = false): Generator - { - $processors = $this->getProcessors(); - if (false === ($key = array_search($processor, $processors, true))) { - if ($silent) { - return $this; - } - throw new \InvalidArgumentException('Processor not found'); - } - unset($processors[$key]); - $this->setProcessors($processors); - - return $this; - } - - /** - * Update/replace an existing processor with a new one. - * - * @param callable $processor The new processor - * @param null|callable $matcher Optional matcher callable to identify the processor to replace. - * If none given, matching is based on the processors class. - */ - public function updateProcessor(callable $processor, ?callable $matcher = null): Generator - { - $matcher = $matcher ?: function ($other) use ($processor): bool { - $otherClass = get_class($other); - - return $processor instanceof $otherClass; - }; - - $processors = array_map(function ($other) use ($processor, $matcher) { - return $matcher($other) ? $processor : $other; - }, $this->getProcessors()); - $this->setProcessors($processors); - - return $this; - } - - public function getLogger(): ?LoggerInterface - { - return $this->logger ?: new DefaultLogger(); - } - - public function getVersion(): ?string - { - return $this->version; - } - - public function setVersion(?string $version): Generator - { - $this->version = $version; - - return $this; - } - - public static function scan(iterable $sources, array $options = []): ?OpenApi - { - // merge with defaults - $config = $options + [ - 'aliases' => self::DEFAULT_ALIASES, - 'namespaces' => self::DEFAULT_NAMESPACES, - 'analyser' => null, - 'analysis' => null, - 'processors' => null, - 'logger' => null, - 'validate' => true, - 'version' => null, - ]; - - return (new Generator($config['logger'])) - ->setVersion($config['version']) - ->setAliases($config['aliases']) - ->setNamespaces($config['namespaces']) - ->setAnalyser($config['analyser']) - ->setProcessors($config['processors']) - ->generate($sources, $config['analysis'], $config['validate']); - } - - /** - * Run code in the context of this generator. - * - * @param callable $callable Callable in the form of - * `function(Generator $generator, Analysis $analysis, Context $context): mixed` - * - * @return mixed the result of the `callable` - */ - public function withContext(callable $callable) - { - $rootContext = new Context([ - 'version' => $this->getVersion(), - 'logger' => $this->getLogger(), - ]); - $analysis = new Analysis([], $rootContext); - - $this->configStack->push($this); - try { - return $callable($this, $analysis, $rootContext); - } finally { - $this->configStack->pop(); - } - } - - /** - * Generate OpenAPI spec by scanning the given source files. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - file / directory name - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param null|Analysis $analysis custom analysis instance - * @param bool $validate flag to enable/disable validation of the returned spec - */ - public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): ?OpenApi - { - $rootContext = new Context([ - 'version' => $this->getVersion(), - 'logger' => $this->getLogger(), - ]); - $analysis = $analysis ?: new Analysis([], $rootContext); - - $this->configStack->push($this); - try { - $this->scanSources($sources, $analysis, $rootContext); - - // post processing - $analysis->process($this->getProcessors()); - - if ($analysis->openapi) { - $analysis->openapi->openapi = $this->version ?: $analysis->openapi->openapi; - $rootContext->version = $analysis->openapi->openapi; - } - - // validation - if ($validate) { - $analysis->validate(); - } - } finally { - $this->configStack->pop(); - } - - return $analysis->openapi; - } - - protected function scanSources(iterable $sources, Analysis $analysis, Context $rootContext): void - { - $analyser = $this->getAnalyser(); - - foreach ($sources as $source) { - if (is_iterable($source)) { - $this->scanSources($source, $analysis, $rootContext); - } else { - $resolvedSource = $source instanceof \SplFileInfo ? $source->getPathname() : realpath($source); - if (!$resolvedSource) { - $rootContext->logger->warning(sprintf('Skipping invalid source: %s', $source)); - continue; - } - if (is_dir($resolvedSource)) { - $this->scanSources(Util::finder($resolvedSource), $analysis, $rootContext); - } else { - $analysis->addAnalysis($analyser->fromFile($resolvedSource, $rootContext)); - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php b/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php deleted file mode 100644 index 94e9406..0000000 --- a/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php +++ /dev/null @@ -1,95 +0,0 @@ -debug = $debug; - } - - public function loggedMessageAboveNotice(): bool - { - return $this->loggedMessageAboveNotice; - } - - /** - * @param array $context additional details; supports custom `prefix` and `exception` - */ - public function log($level, $message, array $context = []): void - { - $prefix = ''; - $color = ''; - // level adjustments - switch ($level) { - case LogLevel::DEBUG: - if (!$this->debug) { - return; - } - // no break - case LogLevel::WARNING: - $prefix = $context['prefix'] ?? 'Warning: '; - $color = static::COLOR_WARNING; - break; - case LogLevel::ERROR: - $prefix = $context['prefix'] ?? 'Error: '; - $color = static::COLOR_ERROR; - break; - } - $stop = !empty($color) ? static::COLOR_STOP : ''; - - if (!in_array($level, self::LOG_LEVELS_UP_TO_NOTICE, true)) { - $this->loggedMessageAboveNotice = true; - } - - /** @var ?\Exception $exception */ - $exception = $context['exception'] ?? null; - if ($message instanceof \Exception) { - $exception = $message; - $message = $exception->getMessage(); - } - - $logLine = sprintf('%s%s%s%s', $color, $prefix, $message, $stop); - error_log($logLine); - - if ($this->debug) { - if ($exception) { - error_log($exception->getTraceAsString()); - } elseif (!empty($logLine)) { - $stack = explode(PHP_EOL, (new \Exception())->getTraceAsString()); - // self - array_shift($stack); - // AbstractLogger - array_shift($stack); - foreach ($stack as $line) { - error_log($line); - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php b/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php deleted file mode 100644 index d4118f0..0000000 --- a/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php +++ /dev/null @@ -1,33 +0,0 @@ -getMessage(); - } - - if (in_array($level, [LogLevel::NOTICE, LogLevel::INFO])) { - $error_level = E_USER_NOTICE; - } else { - $error_level = E_USER_WARNING; - } - - trigger_error($message, $error_level); - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php b/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php deleted file mode 100644 index 2949702..0000000 --- a/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php +++ /dev/null @@ -1,94 +0,0 @@ -augmentOperationParameters = $augmentOperationParameters; - } - - public function isAugmentOperationParameters(): bool - { - return $this->augmentOperationParameters; - } - - public function setAugmentOperationParameters(bool $augmentOperationParameters): void - { - $this->augmentOperationParameters = $augmentOperationParameters; - } - - public function __invoke(Analysis $analysis) - { - $this->augmentSharedParameters($analysis); - if ($this->augmentOperationParameters) { - $this->augmentOperationParameters($analysis); - } - } - - /** - * Use the parameter->name as key field (parameter->parameter) when used as reusable component - * (openapi->components->parameters). - */ - protected function augmentSharedParameters(Analysis $analysis) - { - if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) { - $keys = []; - $parametersWithoutKey = []; - foreach ($analysis->openapi->components->parameters as $parameter) { - if (!Generator::isDefault($parameter->parameter)) { - $keys[$parameter->parameter] = $parameter; - } else { - $parametersWithoutKey[] = $parameter; - } - } - foreach ($parametersWithoutKey as $parameter) { - if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) { - $parameter->parameter = $parameter->name; - $keys[$parameter->parameter] = $parameter; - } - } - } - } - - protected function augmentOperationParameters(Analysis $analysis) - { - /** @var Operation[] $operations */ - $operations = $analysis->getAnnotationsOfType(Operation::class); - - foreach ($operations as $operation) { - if (!Generator::isDefault($operation->parameters)) { - $tags = []; - $this->extractContent($operation->_context->comment, $tags); - if (array_key_exists('param', $tags)) { - foreach ($tags['param'] as $name => $details) { - foreach ($operation->parameters as $parameter) { - if ($parameter->name == $name) { - if (Generator::isDefault($parameter->description) && $details['description']) { - $parameter->description = $details['description']; - } - } - } - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php b/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php deleted file mode 100644 index 9f3e7fc..0000000 --- a/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php +++ /dev/null @@ -1,197 +0,0 @@ -openapi->components) && !Generator::isDefault($analysis->openapi->components->schemas)) { - foreach ($analysis->openapi->components->schemas as $schema) { - if (!Generator::isDefault($schema->schema)) { - $refKey = $this->toRefKey($schema->_context, $schema->_context->class); - $refs[$refKey] = Components::ref($schema); - } - } - } - - /** @var Property[] $properties */ - $properties = $analysis->getAnnotationsOfType(Property::class); - - foreach ($properties as $property) { - $context = $property->_context; - - if (Generator::isDefault($property->property)) { - $property->property = $context->property; - } - - if (!Generator::isDefault($property->ref)) { - continue; - } - - $comment = str_replace("\r\n", "\n", (string) $context->comment); - preg_match('/@var\s+(?[^\s]+)([ \t])?(?.+)?$/im', $comment, $varMatches); - - if (Generator::isDefault($property->type)) { - $this->augmentType($analysis, $property, $context, $refs, $varMatches); - } else { - Util::mapNativeType($property, $property->type); - } - - if (Generator::isDefault($property->description) && isset($varMatches['description'])) { - $property->description = trim($varMatches['description']); - } - if (Generator::isDefault($property->description) && $this->isRoot($property)) { - $property->description = $this->extractContent($context->comment); - } - - if (Generator::isDefault($property->example) && preg_match('/@example\s+([ \t])?(?.+)?$/im', $comment, $varMatches)) { - $property->example = $varMatches['example']; - } - } - } - - protected function toRefKey(Context $context, ?string $name): string - { - $fqn = strtolower($context->fullyQualifiedName($name)); - - return ltrim($fqn, '\\'); - } - - protected function augmentType(Analysis $analysis, Property $property, Context $context, array $refs, array $varMatches): void - { - // docblock typehints - if (isset($varMatches['type'])) { - $allTypes = strtolower(trim($varMatches['type'])); - - if ($this->isNullable($allTypes) && Generator::isDefault($property->nullable)) { - $property->nullable = true; - } - - $allTypes = $this->stripNull($allTypes); - preg_match('/^([^\[]+)(.*$)/', $allTypes, $typeMatches); - $type = $typeMatches[1]; - - // finalise property type/ref - if (!Util::mapNativeType($property, $type)) { - $refKey = $this->toRefKey($context, $type); - if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { - $property->ref = $refs[$refKey]; - } - } - - // ok, so we possibly have a type or ref - if (!Generator::isDefault($property->ref) && $typeMatches[2] === '' && $property->nullable) { - $refKey = $this->toRefKey($context, $type); - $property->oneOf = [ - $schema = new Schema([ - 'ref' => $refs[$refKey], - '_context' => $property->_context, - '_aux' => true, - ]), - ]; - $analysis->addAnnotation($schema, $schema->_context); - $property->nullable = true; - } elseif ($typeMatches[2] === '[]') { - if (Generator::isDefault($property->items)) { - $property->items = $items = new Items( - [ - 'type' => $property->type, - '_context' => new Context(['generated' => true], $context), - '_aux' => true, - ] - ); - $analysis->addAnnotation($items, $items->_context); - if (!Generator::isDefault($property->ref)) { - $property->items->ref = $property->ref; - $property->ref = Generator::UNDEFINED; - } - $property->type = 'array'; - } - } - } - - // native typehints - if ($context->type && !Generator::isDefault($context->type)) { - if ($context->nullable === true) { - $property->nullable = true; - } - $type = strtolower($context->type); - if (!Util::mapNativeType($property, $type)) { - $refKey = $this->toRefKey($context, $type); - if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { - $this->applyRef($analysis, $property, $refs[$refKey]); - } else { - if ($typeSchema = $analysis->getSchemaForSource($context->type)) { - if (Generator::isDefault($property->format)) { - $property->ref = Components::ref($typeSchema); - $property->type = Generator::UNDEFINED; - } - } - } - } - } - - if (!Generator::isDefault($property->const) && Generator::isDefault($property->type)) { - if (!Util::mapNativeType($property, gettype($property->const))) { - $property->type = Generator::UNDEFINED; - } - } - } - - protected function isNullable(string $typeDescription): bool - { - return in_array('null', explode('|', strtolower($typeDescription))); - } - - protected function stripNull(string $typeDescription): string - { - if (strpos($typeDescription, '|') === false) { - return $typeDescription; - } - $types = []; - foreach (explode('|', $typeDescription) as $type) { - if (strtolower($type) === 'null') { - continue; - } - $types[] = $type; - } - - return implode('|', $types); - } - - protected function applyRef(Analysis $analysis, Property $property, string $ref): void - { - if ($property->nullable === true) { - $property->oneOf = [ - $schema = new Schema([ - 'ref' => $ref, - '_context' => $property->_context, - '_aux' => true, - ]), - ]; - $analysis->addAnnotation($schema, $schema->_context); - } else { - $property->ref = $ref; - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php b/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php deleted file mode 100644 index adfb898..0000000 --- a/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php +++ /dev/null @@ -1,50 +0,0 @@ -getAnnotationsOfType(Schema::class); - - // ref rewriting - $updatedRefs = []; - foreach ($schemas as $schema) { - if ($schema->allOf!== Generator::UNDEFINED) { - // do we have to keep track of properties refs that need updating? - foreach ($schema->allOf as $ii => $allOfSchema) { - if ($allOfSchema->properties!== Generator::UNDEFINED) { - $updatedRefs[Components::ref($schema->schema . '/properties', false)] = Components::ref($schema->schema . '/allOf/' . $ii . '/properties', false); - break; - } - } - } - } - - if ($updatedRefs) { - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, 'ref') && $annotation->ref !== Generator::UNDEFINED && $annotation->ref !== null) { - foreach ($updatedRefs as $origRef => $updatedRef) { - if (0 === strpos($annotation->ref, $origRef)) { - $annotation->ref = str_replace($origRef, $updatedRef, $annotation->ref); - } - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php b/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php deleted file mode 100644 index 0e1186c..0000000 --- a/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php +++ /dev/null @@ -1,137 +0,0 @@ -getAnnotationsOfType(Schema::class); - - // Use the class names for @OA\Schema() - foreach ($schemas as $schema) { - if (Generator::isDefault($schema->schema)) { - if ($schema->_context->is('class')) { - $schema->schema = $schema->_context->class; - } elseif ($schema->_context->is('interface')) { - $schema->schema = $schema->_context->interface; - } elseif ($schema->_context->is('trait')) { - $schema->schema = $schema->_context->trait; - } elseif ($schema->_context->is('enum')) { - $schema->schema = $schema->_context->enum; - } - } - } - - // Merge unmerged @OA\Property annotations into the @OA\Schema of the class - $unmergedProperties = $analysis->unmerged()->getAnnotationsOfType(Property::class); - foreach ($unmergedProperties as $property) { - if ($property->_context->nested) { - continue; - } - - $schemaContext = $property->_context->with('class') - ?: $property->_context->with('interface') - ?: $property->_context->with('trait') - ?: $property->_context->with('enum'); - if ($schemaContext->annotations) { - foreach ($schemaContext->annotations as $annotation) { - if ($annotation instanceof Schema) { - if ($annotation->_context->nested) { - // we shouldn't merge property into nested schemas - continue; - } - - if (!Generator::isDefault($annotation->allOf)) { - $schema = null; - foreach ($annotation->allOf as $nestedSchema) { - if (!Generator::isDefault($nestedSchema->ref)) { - continue; - } - - $schema = $nestedSchema; - } - - if ($schema === null) { - $schema = new Schema([ - '_context' => $annotation->_context, - '_aux' => true, - ]); - $analysis->addAnnotation($schema, $schema->_context); - $annotation->allOf[] = $schema; - } - - $schema->merge([$property], true); - break; - } - - $annotation->merge([$property], true); - break; - } - } - } - } - - // set schema type based on various properties - foreach ($schemas as $schema) { - if (Generator::isDefault($schema->type)) { - if (is_array($schema->properties) && count($schema->properties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->additionalProperties) && count($schema->additionalProperties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->patternProperties) && count($schema->patternProperties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->propertyNames) && count($schema->propertyNames) > 0) { - $schema->type = 'object'; - } - } else { - if ($typeSchema = $analysis->getSchemaForSource($schema->type)) { - if (Generator::isDefault($schema->format)) { - $schema->ref = Components::ref($typeSchema); - $schema->type = Generator::UNDEFINED; - } - } - } - } - - // move schema properties into allOf if both exist - foreach ($schemas as $schema) { - if (!Generator::isDefault($schema->properties) && !Generator::isDefault($schema->allOf)) { - $allOfPropertiesSchema = null; - foreach ($schema->allOf as $allOfSchema) { - if (!Generator::isDefault($allOfSchema->properties)) { - $allOfPropertiesSchema = $allOfSchema; - break; - } - } - if (!$allOfPropertiesSchema) { - $allOfPropertiesSchema = new Schema([ - 'properties' => [], - '_context' => $schema->_context, - '_aux' => true, - ]); - $analysis->addAnnotation($allOfPropertiesSchema, $allOfPropertiesSchema->_context); - $schema->allOf[] = $allOfPropertiesSchema; - } - $allOfPropertiesSchema->properties = array_merge($allOfPropertiesSchema->properties, $schema->properties); - $schema->properties = Generator::UNDEFINED; - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/BuildPaths.php b/vendor/zircote/swagger-php/src/Processors/BuildPaths.php deleted file mode 100644 index 4688b96..0000000 --- a/vendor/zircote/swagger-php/src/Processors/BuildPaths.php +++ /dev/null @@ -1,62 +0,0 @@ -paths using the detected `@OA\PathItem` and `@OA\Operation` (`@OA\Get`, `@OA\Post`, etc). - */ -class BuildPaths -{ - public function __invoke(Analysis $analysis) - { - $paths = []; - // Merge @OA\PathItems with the same path. - if (!Generator::isDefault($analysis->openapi->paths)) { - foreach ($analysis->openapi->paths as $annotation) { - if (empty($annotation->path)) { - $annotation->_context->logger->warning($annotation->identity() . ' is missing required property "path" in ' . $annotation->_context); - } elseif (isset($paths[$annotation->path])) { - $paths[$annotation->path]->mergeProperties($annotation); - $analysis->annotations->detach($annotation); - } else { - $paths[$annotation->path] = $annotation; - } - } - } - - /** @var Operation[] $operations */ - $operations = $analysis->unmerged()->getAnnotationsOfType(Operation::class); - - // Merge @OA\Operations into existing @OA\PathItems or create a new one. - foreach ($operations as $operation) { - if ($operation->path) { - if (empty($paths[$operation->path])) { - $paths[$operation->path] = $pathItem = new PathItem( - [ - 'path' => $operation->path, - '_context' => new Context(['generated' => true], $operation->_context), - '_aux' => true, - ] - ); - $analysis->addAnnotation($pathItem, $pathItem->_context); - } - if ($paths[$operation->path]->merge([$operation])) { - $operation->_context->logger->warning('Unable to merge ' . $operation->identity() . ' in ' . $operation->_context); - } - } - } - if ($paths) { - $analysis->openapi->paths = array_values($paths); - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php b/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php deleted file mode 100644 index 20c12a6..0000000 --- a/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php +++ /dev/null @@ -1,35 +0,0 @@ -split(); - $merged = $split->merged->annotations; - $unmerged = $split->unmerged->annotations; - - /** @var AbstractAnnotation $annotation */ - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, '_unmerged')) { - foreach ($annotation->_unmerged as $i => $item) { - if ($merged->contains($item)) { - unset($annotation->_unmerged[$i]); // Property was merged - } - } - } - } - $analysis->openapi->_unmerged = []; - foreach ($unmerged as $annotation) { - $analysis->openapi->_unmerged[] = $annotation; - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php b/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php deleted file mode 100644 index adadf1b..0000000 --- a/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php +++ /dev/null @@ -1,110 +0,0 @@ -openapi->components)) { - return; - } - - // allow multiple runs to catch nested dependencies - for ($ii = 0; $ii < 10; ++$ii) { - if (!$this->cleanup($analysis)) { - break; - } - } - } - - protected function cleanup(Analysis $analysis): bool - { - $usedRefs = []; - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, 'ref') && !Generator::isDefault($annotation->ref) && $annotation->ref !== null) { - $usedRefs[$annotation->ref] = $annotation->ref; - } - foreach (['allOf', 'anyOf', 'oneOff'] as $sub) { - if (property_exists($annotation, $sub) && !Generator::isDefault($annotation->{$sub})) { - foreach ($annotation->{$sub} as $subElem) { - if (is_object($subElem) && property_exists($subElem, 'ref') && !Generator::isDefault($subElem->ref) && $subElem->ref !== null) { - $usedRefs[$subElem->ref] = $subElem->ref; - } - } - } - } - if ($annotation instanceof OpenApi || $annotation instanceof Operation) { - if (!Generator::isDefault($annotation->security)) { - foreach ($annotation->security as $security) { - foreach (array_keys($security) as $securityName) { - $ref = Components::COMPONENTS_PREFIX . 'securitySchemes/' . $securityName; - $usedRefs[$ref] = $ref; - } - } - } - } - } - - $unusedRefs = []; - foreach (Components::$_nested as $nested) { - if (2 == count($nested)) { - // $nested[1] is the name of the property that holds the component name - [$componentType, $nameProperty] = $nested; - if (!Generator::isDefault($analysis->openapi->components->{$componentType})) { - foreach ($analysis->openapi->components->{$componentType} as $component) { - $ref = Components::ref($component); - if (!in_array($ref, $usedRefs)) { - $unusedRefs[$ref] = [$ref, $nameProperty]; - } - } - } - } - } - - $detachNested = function (Analysis $analysis, AbstractAnnotation $annotation, callable $detachNested): void { - foreach ($annotation::$_nested as $nested) { - $nestedKey = ((array) $nested)[0]; - if (!Generator::isDefault($annotation->{$nestedKey})) { - if (is_array($annotation->{$nestedKey})) { - foreach ($annotation->{$nestedKey} as $elem) { - if ($elem instanceof AbstractAnnotation) { - $detachNested($analysis, $elem, $detachNested); - } - } - } elseif ($annotation->{$nestedKey} instanceof AbstractAnnotation) { - $analysis->annotations->detach($annotation->{$nestedKey}); - } - } - } - $analysis->annotations->detach($annotation); - }; - - // remove unused - foreach ($unusedRefs as $refDetails) { - [$ref, $nameProperty] = $refDetails; - [$hash, $components, $componentType, $name] = explode('/', $ref); - foreach ($analysis->openapi->components->{$componentType} as $ii => $component) { - if ($component->{$nameProperty} == $name) { - $annotation = $analysis->openapi->components->{$componentType}[$ii]; - $detachNested($analysis, $annotation, $detachNested); - unset($analysis->openapi->components->{$componentType}[$ii]); - } - } - } - - return 0 != count($unusedRefs); - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php b/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php deleted file mode 100644 index 7f4f845..0000000 --- a/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php +++ /dev/null @@ -1,104 +0,0 @@ -annotations as $annotation) { - if (property_exists($annotation, '_context') === false) { - // only annotations with context - continue; - } - - if (!$this->isRoot($annotation)) { - // only top-level annotations - continue; - } - - $hasSummary = property_exists($annotation, 'summary'); - $hasDescription = property_exists($annotation, 'description'); - if (!$hasSummary && !$hasDescription) { - continue; - } - - if ($hasSummary && $hasDescription) { - $this->summaryAndDescription($annotation); - } elseif ($hasDescription) { - $this->description($annotation); - } - } - } - - /** - * @param Operation|Property|Parameter|Schema $annotation - */ - protected function description(AbstractAnnotation $annotation): void - { - if (!Generator::isDefault($annotation->description)) { - if ($annotation->description === null) { - $annotation->description = Generator::UNDEFINED; - } - - return; - } - - $annotation->description = $this->extractContent($annotation->_context->comment); - } - - /** - * @param Operation|Property|Parameter|Schema $annotation - */ - protected function summaryAndDescription(AbstractAnnotation $annotation): void - { - $ignoreSummary = !Generator::isDefault($annotation->summary); - $ignoreDescription = !Generator::isDefault($annotation->description); - if ($annotation->summary === null) { - $ignoreSummary = true; - $annotation->summary = Generator::UNDEFINED; - } - if ($annotation->description === null) { - $annotation->description = Generator::UNDEFINED; - $ignoreDescription = true; - } - if ($ignoreSummary && $ignoreDescription) { - return; - } - if ($ignoreSummary) { - $annotation->description = $this->extractContent($annotation->_context->comment); - } elseif ($ignoreDescription) { - $annotation->summary = $this->extractContent($annotation->_context->comment); - } else { - $annotation->summary = $this->extractSummary($annotation->_context->comment); - $annotation->description = $this->extractDescription($annotation->_context->comment); - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php b/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php deleted file mode 100644 index 650b024..0000000 --- a/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php +++ /dev/null @@ -1,170 +0,0 @@ -_context) { - return true; - } - - if (1 == count($annotation->_context->annotations)) { - return true; - } - - // find best match - $matchPriorityMap = [ - Operation::class => false, - Property::class => false, - Parameter::class => false, - AnnotationSchema::class => true, - AttributeSchema::class => true, - ]; - foreach ($matchPriorityMap as $className => $strict) { - foreach ($annotation->_context->annotations as $contextAnnotation) { - if ($strict) { - if ($className == get_class($contextAnnotation)) { - return $annotation === $contextAnnotation; - } - } else { - if ($contextAnnotation instanceof $className) { - return $annotation === $contextAnnotation; - } - } - } - } - - return false; - } - - protected function handleTag(string $line, ?array &$tags = null): void - { - if (null === $tags) { - return; - } - - // split of tag name - $token = preg_split("@[\s+ ]@u", $line, 2); - if (2 == count($token)) { - $tag = substr($token[0], 1); - $tail = $token[1]; - if (!array_key_exists($tag, $tags)) { - $tags[$tag] = []; - } - - if (false !== ($dpos = strpos($tail, '$'))) { - $type = trim(substr($tail, 0, $dpos)); - $token = preg_split("@[\s+ ]@u", substr($tail, $dpos), 2); - $name = trim(substr($token[0], 1)); - $description = 2 == count($token) ? trim($token[1]) : null; - - $tags[$tag][$name] = [ - 'type' => $type, - 'description' => $description, - ]; - } - } - } - - /** - * The text contents of the phpdoc comment (excl. tags). - */ - public function extractContent(?string $docblock, ?array &$tags = null): string - { - if (Generator::isDefault($docblock)) { - return Generator::UNDEFINED; - } - - $comment = preg_split('/(\n|\r\n)/', (string) $docblock); - $comment[0] = preg_replace('/[ \t]*\\/\*\*/', '', $comment[0]); // strip '/**' - $i = count($comment) - 1; - $comment[$i] = preg_replace('/\*\/[ \t]*$/', '', $comment[$i]); // strip '*/' - $lines = []; - $append = false; - $skip = false; - foreach ($comment as $line) { - $line = ltrim($line, "\t *"); - if (substr($line, 0, 1) === '@') { - $this->handleTag($line, $tags); - $skip = true; - } - if ($skip) { - continue; - } - if ($append) { - $i = count($lines) - 1; - $lines[$i] = substr($lines[$i], 0, -1) . $line; - } else { - $lines[] = $line; - } - $append = (substr($line, -1) === '\\'); - } - $description = trim(implode("\n", $lines)); - if ($description === '') { - return Generator::UNDEFINED; - } - - return $description; - } - - /** - * A short piece of text, usually one line, providing the basic function of the associated element. - */ - public function extractSummary(?string $docblock): string - { - if (!$content = $this->extractContent($docblock)) { - return Generator::UNDEFINED; - } - $lines = preg_split('/(\n|\r\n)/', $content); - $summary = ''; - foreach ($lines as $line) { - $summary .= $line . "\n"; - if ($line === '' || substr($line, -1) === '.') { - return trim($summary); - } - } - $summary = trim($summary); - if ($summary === '') { - return Generator::UNDEFINED; - } - - return $summary; - } - - /** - * An optional longer piece of text providing more details on the associated element’s function. - * - * This is very useful when working with a complex element. - */ - public function extractDescription(?string $docblock): string - { - $summary = $this->extractSummary($docblock); - if (!$summary) { - return Generator::UNDEFINED; - } - - $description = ''; - if (false !== ($substr = substr($this->extractContent($docblock), strlen($summary)))) { - $description = trim($substr); - } - - return $description ?: Generator::UNDEFINED; - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php b/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php deleted file mode 100644 index 7e729de..0000000 --- a/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php +++ /dev/null @@ -1,49 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class')) { - $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); - $existing = []; - foreach ($ancestors as $ancestor) { - $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); - if ($ancestorSchema) { - $refPath = !Generator::isDefault($ancestorSchema->schema) ? $ancestorSchema->schema : $ancestor['class']; - $this->inheritFrom($analysis, $schema, $ancestorSchema, $refPath, $ancestor['context']); - - // one ancestor is enough - break; - } else { - $this->mergeAnnotations($schema, $ancestor, $existing); - $this->mergeMethods($schema, $ancestor, $existing); - $this->mergeProperties($schema, $ancestor, $existing); - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php b/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php deleted file mode 100644 index e7cf895..0000000 --- a/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php +++ /dev/null @@ -1,57 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('enum')) { - $source = $schema->_context->enum; - $re = new \ReflectionEnum($schema->_context->fullyQualifiedName($source)); - $schema->schema = !Generator::isDefault($schema->schema) ? $schema->schema : $re->getShortName(); - $type = 'string'; - $schemaType = 'string'; - if ($re->isBacked() && ($backingType = $re->getBackingType()) && method_exists($backingType, 'getName')) { - if (Generator::isDefault($schema->type)) { - $type = $backingType->getName(); - } else { - $type = $schema->type; - $schemaType = $schema->type; - } - } - $schema->enum = array_map(function ($case) use ($re, $schemaType, $type) { - if ($re->isBacked() && $type === $schemaType) { - return $case->getBackingValue(); - } - - return $case->name; - }, $re->getCases()); - Util::mapNativeType($schema, $type); - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php b/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php deleted file mode 100644 index 0c78f8d..0000000 --- a/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php +++ /dev/null @@ -1,57 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class')) { - $className = $schema->_context->fullyQualifiedName($schema->_context->class); - $interfaces = $analysis->getInterfacesOfClass($className, true); - - if (class_exists($className) && ($parent = get_parent_class($className)) && ($inherited = array_keys(class_implements($parent)))) { - // strip interfaces we inherit from ancestor - foreach (array_keys($interfaces) as $interface) { - if (in_array(ltrim($interface, '\\'), $inherited)) { - unset($interfaces[$interface]); - } - } - } - - $existing = []; - foreach ($interfaces as $interface) { - $interfaceName = $interface['context']->fullyQualifiedName($interface['interface']); - $interfaceSchema = $analysis->getSchemaForSource($interfaceName); - if ($interfaceSchema) { - $refPath = !Generator::isDefault($interfaceSchema->schema) ? $interfaceSchema->schema : $interface['interface']; - $this->inheritFrom($analysis, $schema, $interfaceSchema, $refPath, $interface['context']); - } else { - $this->mergeAnnotations($schema, $interface, $existing); - $this->mergeMethods($schema, $interface, $existing); - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php b/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php deleted file mode 100644 index 952ef0b..0000000 --- a/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php +++ /dev/null @@ -1,49 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class') || $schema->_context->is('trait')) { - $source = $schema->_context->class ?: $schema->_context->trait; - $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($source), true); - $existing = []; - foreach ($traits as $trait) { - $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); - if ($traitSchema) { - $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; - $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); - } else { - if ($schema->_context->is('class')) { - $this->mergeAnnotations($schema, $trait, $existing); - $this->mergeMethods($schema, $trait, $existing); - $this->mergeProperties($schema, $trait, $existing); - } - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php b/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php deleted file mode 100644 index e84e9bf..0000000 --- a/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php +++ /dev/null @@ -1,34 +0,0 @@ -openapi->components; - if (Generator::isDefault($components)) { - $components = new Components(['_context' => new Context(['generated' => true], $analysis->context)]); - } - - foreach ($analysis->annotations as $annotation) { - if (Components::matchNested(get_class($annotation)) && $annotation->_context->is('nested') === false) { - // A top level annotation. - $components->merge([$annotation], true); - $analysis->openapi->components = $components; - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php b/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php deleted file mode 100644 index a0d2279..0000000 --- a/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php +++ /dev/null @@ -1,56 +0,0 @@ -openapi) { - $context = new Context([], $analysis->context); - $analysis->addAnnotation(new OpenApi(['_context' => $context]), $context); - } - $openapi = $analysis->openapi; - $openapi->_analysis = $analysis; - - // Merge annotations into the target openapi - $merge = []; - /** @var AbstractAnnotation $annotation */ - foreach ($analysis->annotations as $annotation) { - if ($annotation === $openapi) { - continue; - } - if ($annotation instanceof OpenApi) { - $paths = $annotation->paths; - unset($annotation->paths); - $openapi->mergeProperties($annotation); - if (!Generator::isDefault($paths)) { - foreach ($paths as $path) { - if (Generator::isDefault($openapi->paths)) { - $openapi->paths = []; - } - $openapi->paths[] = $path; - } - } - } elseif (OpenApi::matchNested(get_class($annotation)) && property_exists($annotation, '_context') && $annotation->_context->is('nested') === false) { - // A top level annotation. - $merge[] = $annotation; - } - } - $openapi->merge($merge, true); - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php b/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php deleted file mode 100644 index bf87bae..0000000 --- a/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php +++ /dev/null @@ -1,61 +0,0 @@ -getAnnotationsOfType(JsonContent::class); - - foreach ($annotations as $jsonContent) { - $parent = $jsonContent->_context->nested; - if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { - if ($parent) { - $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); - } else { - $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' must be nested'); - } - continue; - } - if (Generator::isDefault($parent->content)) { - $parent->content = []; - } - $parent->content['application/json'] = $mediaType = new MediaType([ - 'schema' => $jsonContent, - 'example' => $jsonContent->example, - 'examples' => $jsonContent->examples, - '_context' => new Context(['generated' => true], $jsonContent->_context), - '_aux' => true, - ]); - $analysis->addAnnotation($mediaType, $mediaType->_context); - if (!$parent instanceof Parameter) { - $parent->content['application/json']->mediaType = 'application/json'; - } - $jsonContent->example = Generator::UNDEFINED; - $jsonContent->examples = Generator::UNDEFINED; - - $index = array_search($jsonContent, $parent->_unmerged, true); - if ($index !== false) { - array_splice($parent->_unmerged, $index, 1); - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeTrait.php b/vendor/zircote/swagger-php/src/Processors/MergeTrait.php deleted file mode 100644 index 43eca14..0000000 --- a/vendor/zircote/swagger-php/src/Processors/MergeTrait.php +++ /dev/null @@ -1,80 +0,0 @@ - update all $ref that might reference a property merged. - */ -trait MergeTrait -{ - protected function inheritFrom(Analysis $analysis, Schema $schema, Schema $from, string $refPath, Context $context): void - { - if (Generator::isDefault($schema->allOf)) { - $schema->allOf = []; - } - // merging other properties into allOf is done in the AugmentSchemas processor - $schema->allOf[] = $refSchema = new Schema([ - 'ref' => Components::ref($refPath), - '_context' => $context, - '_aux' => true, - ]); - $analysis->addAnnotation($refSchema, $refSchema->_context); - } - - protected function mergeAnnotations(Schema $schema, array $from, array &$existing): void - { - if (is_iterable($from['context']->annotations)) { - foreach ($from['context']->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - - protected function mergeProperties(Schema $schema, array $from, array &$existing): void - { - foreach ($from['properties'] as $method) { - if (is_iterable($method->annotations)) { - foreach ($method->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - } - - protected function mergeMethods(Schema $schema, array $from, array &$existing): void - { - foreach ($from['methods'] as $method) { - if (is_iterable($method->annotations)) { - foreach ($method->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php b/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php deleted file mode 100644 index 127b591..0000000 --- a/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php +++ /dev/null @@ -1,61 +0,0 @@ -getAnnotationsOfType(XmlContent::class); - - foreach ($annotations as $xmlContent) { - $parent = $xmlContent->_context->nested; - if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { - if ($parent) { - $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); - } else { - $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' must be nested'); - } - continue; - } - if (Generator::isDefault($parent->content)) { - $parent->content = []; - } - $parent->content['application/xml'] = $mediaType = new MediaType([ - 'schema' => $xmlContent, - 'example' => $xmlContent->example, - 'examples' => $xmlContent->examples, - '_context' => new Context(['generated' => true], $xmlContent->_context), - '_aux' => true, - ]); - $analysis->addAnnotation($mediaType, $mediaType->_context); - if (!$parent instanceof Parameter) { - $parent->content['application/xml']->mediaType = 'application/xml'; - } - $xmlContent->example = Generator::UNDEFINED; - $xmlContent->examples = Generator::UNDEFINED; - - $index = array_search($xmlContent, $parent->_unmerged, true); - if ($index !== false) { - array_splice($parent->_unmerged, $index, 1); - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Processors/OperationId.php b/vendor/zircote/swagger-php/src/Processors/OperationId.php deleted file mode 100644 index e2e6924..0000000 --- a/vendor/zircote/swagger-php/src/Processors/OperationId.php +++ /dev/null @@ -1,72 +0,0 @@ -hash = $hash; - } - - public function isHash(): bool - { - return $this->hash; - } - - public function setHash(bool $hash): OperationId - { - $this->hash = $hash; - - return $this; - } - - public function __invoke(Analysis $analysis) - { - $allOperations = $analysis->getAnnotationsOfType(Operation::class); - - /** @var Operation $operation */ - foreach ($allOperations as $operation) { - if (null === $operation->operationId) { - $operation->operationId = Generator::UNDEFINED; - } - - if (!Generator::isDefault($operation->operationId)) { - continue; - } - - $context = $operation->_context; - if ($context && $context->method) { - $source = $context->class ?? $context->interface ?? $context->trait; - $operationId = null; - if ($source) { - if ($context->namespace) { - $operationId = $context->namespace . '\\' . $source . '::' . $context->method; - } else { - $operationId = $source . '::' . $context->method; - } - } else { - $operationId = $context->method; - } - $operationId = strtoupper($operation->method) . '::' . $operation->path . '::' . $operationId; - $operation->operationId = $this->hash ? md5($operationId) : $operationId; - } - } - } -} diff --git a/vendor/zircote/swagger-php/src/Serializer.php b/vendor/zircote/swagger-php/src/Serializer.php deleted file mode 100644 index 003ad62..0000000 --- a/vendor/zircote/swagger-php/src/Serializer.php +++ /dev/null @@ -1,205 +0,0 @@ -isValidAnnotationClass($className)) { - throw new \Exception($className . ' is not defined in OpenApi PHP Annotations'); - } - - return $this->doDeserialize(json_decode($jsonString), $className, new Context(['generated' => true])); - } - - /** - * Deserialize a file. - */ - public function deserializeFile(string $filename, string $format = 'json', string $className = OA\OpenApi::class): OA\AbstractAnnotation - { - if (!$this->isValidAnnotationClass($className)) { - throw new \Exception($className . ' is not a valid OpenApi PHP Annotations'); - } - - $contents = file_get_contents($filename); - - $ext = pathinfo($filename, PATHINFO_EXTENSION); - if ('yaml' == $format || in_array($ext, ['yml', 'yaml'])) { - $contents = json_encode(Yaml::parse($contents)); - } - - return $this->doDeserialize(json_decode($contents), $className, new Context(['generated' => true])); - } - - /** - * Do deserialization. - */ - protected function doDeserialize(\stdClass $c, string $class, Context $context): OA\AbstractAnnotation - { - $annotation = new $class(['_context' => $context]); - foreach ((array) $c as $property => $value) { - if ($property === '$ref') { - $property = 'ref'; - } - - if (substr($property, 0, 2) === 'x-') { - if (Generator::isDefault($annotation->x)) { - $annotation->x = []; - } - $custom = substr($property, 2); - $annotation->x[$custom] = $value; - } else { - $annotation->$property = $this->doDeserializeProperty($annotation, $property, $value, $context); - } - } - - if ($annotation instanceof OA\OpenApi) { - $context->root()->version = $annotation->openapi; - } - - return $annotation; - } - - /** - * Deserialize the annotation's property. - */ - protected function doDeserializeProperty(OA\AbstractAnnotation $annotation, string $property, $value, Context $context) - { - // property is primitive type - if (array_key_exists($property, $annotation::$_types)) { - return $this->doDeserializeBaseProperty($annotation::$_types[$property], $value, $context); - } - - // property is embedded annotation - // note: this does not support custom nested annotation classes - foreach ($annotation::$_nested as $nestedClass => $declaration) { - // property is an annotation - if (is_string($declaration) && $declaration === $property) { - if (is_object($value)) { - return $this->doDeserialize($value, $nestedClass, $context); - } else { - return $value; - } - } - - // property is an annotation array - if (is_array($declaration) && count($declaration) === 1 && $declaration[0] === $property) { - $annotationArr = []; - foreach ($value as $v) { - $annotationArr[] = $this->doDeserialize($v, $nestedClass, $context); - } - - return $annotationArr; - } - - // property is an annotation hash map - if (is_array($declaration) && count($declaration) === 2 && $declaration[0] === $property) { - $key = $declaration[1]; - $annotationHash = []; - foreach ($value as $k => $v) { - $annotation = $this->doDeserialize($v, $nestedClass, $context); - $annotation->$key = $k; - $annotationHash[$k] = $annotation; - } - - return $annotationHash; - } - } - - return $value; - } - - /** - * Deserialize base annotation property. - * - * @param array|string $type The property type - * @param mixed $value The value to deserialization - * - * @return array|OA\AbstractAnnotation - */ - protected function doDeserializeBaseProperty($type, $value, Context $context) - { - $isAnnotationClass = is_string($type) && is_subclass_of(trim($type, '[]'), OA\AbstractAnnotation::class); - - if ($isAnnotationClass) { - $isArray = strpos($type, '[') === 0 && substr($type, -1) === ']'; - - if ($isArray) { - $annotationArr = []; - $class = trim($type, '[]'); - - foreach ($value as $v) { - $annotationArr[] = $this->doDeserialize($v, $class, $context); - } - - return $annotationArr; - } - - return $this->doDeserialize($value, $type, $context); - } - - return $value; - } -} diff --git a/vendor/zircote/swagger-php/src/Util.php b/vendor/zircote/swagger-php/src/Util.php deleted file mode 100644 index 085abac..0000000 --- a/vendor/zircote/swagger-php/src/Util.php +++ /dev/null @@ -1,197 +0,0 @@ - 'array', - 'byte' => ['string', 'byte'], - 'boolean' => 'boolean', - 'bool' => 'boolean', - 'int' => 'integer', - 'integer' => 'integer', - 'long' => ['integer', 'long'], - 'float' => ['number', 'float'], - 'double' => ['number', 'double'], - 'string' => 'string', - 'date' => ['string', 'date'], - 'datetime' => ['string', 'date-time'], - '\\datetime' => ['string', 'date-time'], - 'datetimeimmutable' => ['string', 'date-time'], - '\\datetimeimmutable' => ['string', 'date-time'], - 'datetimeinterface' => ['string', 'date-time'], - '\\datetimeinterface' => ['string', 'date-time'], - 'number' => 'number', - 'object' => 'object', - ]; - - public static function mapNativeType(Schema $schema, string $type): bool - { - if (!array_key_exists($type, self::$NATIVE_TYPE_MAP)) { - return false; - } - - $type = self::$NATIVE_TYPE_MAP[$type]; - if (is_array($type)) { - if (Generator::isDefault($schema->format)) { - $schema->format = $type[1]; - } - $type = $type[0]; - } - - $schema->type = $type; - - return true; - } - - /** - * Turns the given $fullPath into a relative path based on $basePaths, which can either - * be a single string path, or a list of possible paths. If a list is given, the first - * matching basePath in the list will be used to compute the relative path. If no - * relative path could be computed, the original string will be returned because there - * is always a chance it was a valid relative path to begin with. - * - * It should be noted that these are "relative paths" primarily in Finder's sense of them, - * and conform specifically to what is expected by functions like `exclude()` and `notPath()`. - * In particular, leading and trailing slashes are removed. - * - * @param array|string $basePaths - */ - public static function getRelativePath(string $fullPath, $basePaths): string - { - $relativePath = null; - if (is_string($basePaths)) { // just a single path, not an array of possible paths - $relativePath = self::removePrefix($fullPath, $basePaths); - } else { // an array of paths - foreach ($basePaths as $basePath) { - $relativePath = self::removePrefix($fullPath, $basePath); - if (!empty($relativePath)) { - break; - } - } - } - - return !empty($relativePath) ? trim($relativePath, '/') : $fullPath; - } - - /** - * Removes a prefix from the start of a string if it exists, or null otherwise. - */ - private static function removePrefix(string $str, string $prefix): ?string - { - if (substr($str, 0, strlen($prefix)) == $prefix) { - return substr($str, strlen($prefix)); - } - - return null; - } - - /** - * Build a Symfony Finder object that scans the given $directory. - * - * @param array|Finder|string $directory The directory(s) or filename(s) - * @param null|array|string $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) - * @param null|string $pattern The pattern of the files to scan - * - * @throws InvalidArgumentException - */ - public static function finder($directory, $exclude = null, $pattern = null): Finder - { - if ($directory instanceof Finder) { - // Make sure that the provided Finder only finds files and follows symbolic links. - return $directory->files()->followLinks(); - } else { - $finder = new Finder(); - $finder->sortByName(); - } - if ($pattern === null) { - $pattern = '*.php'; - } - - $finder->files()->followLinks()->name($pattern); - if (is_string($directory)) { - if (is_file($directory)) { // Scan a single file? - $finder->append([$directory]); - } else { // Scan a directory - $finder->in($directory); - } - } elseif (is_array($directory)) { - foreach ($directory as $path) { - if (is_file($path)) { // Scan a file? - $finder->append([$path]); - } else { - $finder->in($path); - } - } - } else { - throw new InvalidArgumentException('Unexpected $directory value:' . gettype($directory)); - } - if ($exclude !== null) { - if (is_string($exclude)) { - $finder->notPath(Util::getRelativePath($exclude, $directory)); - } elseif (is_array($exclude)) { - foreach ($exclude as $path) { - $finder->notPath(Util::getRelativePath($path, $directory)); - } - } else { - throw new InvalidArgumentException('Unexpected $exclude value:' . gettype($exclude)); - } - } - - return $finder; - } - - /** - * Escapes the special characters "/" and "~". - * - * https://swagger.io/docs/specification/using-ref/ - * https://tools.ietf.org/html/rfc6901#page-3 - */ - public static function refEncode(string $raw): string - { - return str_replace('/', '~1', str_replace('~', '~0', $raw)); - } - - /** - * Converted the escaped characters "~1" and "~" back to "/" and "~". - * - * https://swagger.io/docs/specification/using-ref/ - * https://tools.ietf.org/html/rfc6901#page-3 - */ - public static function refDecode(string $encoded): string - { - return str_replace('~1', '/', str_replace('~0', '~', $encoded)); - } - - /** - * Shorten class name(s). - * - * @param array|object|string $classes Class(es) to shorten - * - * @return string|string[] One or more shortened class names - */ - public static function shorten($classes) - { - $short = []; - foreach ((array) $classes as $class) { - $short[] = '@' . str_replace([ - 'OpenApi\\Annotations\\', - 'OpenApi\\Attributes\\', - ], 'OA\\', $class); - } - - return is_array($classes) ? $short : array_pop($short); - } -} From 973eb4d6348efb10fb36b0092c88a0a4d49ff6c9 Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:36:14 +0000 Subject: [PATCH 4/6] Edits to quickstart Added vendor to gitignore Added sdk badge --- .gitignore | 1 + README.md | 2 + composer.json | 2 +- composer.lock | 645 +-------------------------------- vendor/composer/installed.json | 24 +- vendor/composer/installed.php | 12 +- 6 files changed, 41 insertions(+), 645 deletions(-) diff --git a/.gitignore b/.gitignore index 4177bb4..9a33915 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.pem +vendor/ diff --git a/README.md b/README.md index 9ee6d02..925f2fa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ PassKit PHP Quickstart ======================= [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/PassKit/passkit-php-grpc-sdk/main/LICENSE) + +[![Latest Stable Version](https://poser.pugx.org/passkit/passkit-php-grpc-sdk/v)](https://packagist.org/packages/passkit/passkit-php-grpc-sdk) ### Overview This quickstart aims to help get PHP developers up and running with the PassKit SDK as quickly as possible. diff --git a/composer.json b/composer.json index 9e439cb..5ede435 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "require": { "grpc/grpc": "^v1.42.0", "google/protobuf": "^v3.21.7", - "passkit/passkit-php-grpc-sdk": "1.1.70" + "passkit/passkit-php-grpc-sdk": "1.1.72" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 18a526f..494628b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,168 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bb9b6790afc6f40fdf27b2be8a3dba9a", + "content-hash": "c9257d3490aa6d8f7528201e1c512798", "packages": [ - { - "name": "doctrine/annotations", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" - }, - "time": "2021-08-05T19:00:23+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-02-28T11:07:21+00:00" - }, { "name": "google/protobuf", - "version": "v3.21.1", + "version": "v3.21.12", "source": { "type": "git", "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "68f71264d8816f001177d68ce99d25b28e212d4c" + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/68f71264d8816f001177d68ce99d25b28e212d4c", - "reference": "68f71264d8816f001177d68ce99d25b28e212d4c", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/93019df2df0f8c5c01757ef79f3f077d2cb35b65", + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65", "shasum": "" }, "require": { @@ -194,10 +46,9 @@ "proto" ], "support": { - "issues": "https://github.com/protocolbuffers/protobuf-php/issues", - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.1" + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.12" }, - "time": "2022-05-27T22:57:31+00:00" + "time": "2022-12-14T14:50:49+00:00" }, { "name": "grpc/grpc", @@ -245,27 +96,31 @@ }, { "name": "passkit/passkit-php-grpc-sdk", - "version": "1.0.0", + "version": "v1.1.72", "source": { "type": "git", "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", - "reference": "b03c1020c50d27d5fd51ed20267ba10da73be94e" + "reference": "ebce339d47a6af89beeaa1c0e901d6a5681e9e70" }, "require": { - "google/protobuf": "^v3.13.0", - "grpc/grpc": "^v1.30.0" + "google/protobuf": "^v3.21.12", + "grpc/grpc": "^v1.42.0" }, "type": "library", "autoload": { "psr-4": { "Analytics\\": "lib/Analytics", "Cabin_codes\\": "lib/Cabin_codes", + "Ct\\": "lib/Ct", "Event_tickets\\": "lib/Event_tickets", "Flights\\": "lib/Flights", "Io\\": "lib/Io", "Members\\": "lib/Members", + "Raw\\": "lib/Raw", + "Scheduler\\": "lib/Scheduler", "Single_use_coupons\\": "lib/Single_use_coupons", "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", + "GPBMetadata\\Ct\\": "lib/GPBMetadata/Ct", "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", "Google\\Api\\": "lib/extra/google/api" } @@ -284,475 +139,13 @@ "keywords": [ "api", "grpc", + "mobile-wallet", "passkit", "php", - "sdk" + "sdk", + "wallet" ], - "time": "2020-10-15T09:16:03+00:00" - }, - { - "name": "protobuf-php/protobuf", - "version": "v0.1.3", - "source": { - "type": "git", - "url": "https://github.com/protobuf-php/protobuf.git", - "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/protobuf-php/protobuf/zipball/c0da95f75ea418b39b02ff4528ca9926cc246a8c", - "reference": "c0da95f75ea418b39b02ff4528ca9926cc246a8c", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "instaclick/coding-standard": "^1.1", - "instaclick/object-calisthenics-sniffs": "dev-master", - "instaclick/symfony2-coding-standard": "dev-remaster", - "php-mock/php-mock-phpunit": "^0.2", - "phpunit/phpunit": "^4", - "protobuf-php/protobuf-plugin": ">=0.1", - "satooshi/php-coveralls": "^0.6", - "squizlabs/php_codesniffer": "^1.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Protobuf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabio B. Silva", - "email": "fabio.bat.silva@gmail.com", - "homepage": "https://github.com/FabioBatSilva" - }, - { - "name": "Iván -DrSlump- Montes", - "email": "drslump@pollinimini.net", - "homepage": "https://github.com/drslump" - } - ], - "description": "PHP implementation of Google's Protocol Buffers", - "homepage": "https://github.com/protobuf-php/protobuf", - "keywords": [ - "protobuf", - "protocol buffer", - "serializing" - ], - "support": { - "issues": "https://github.com/protobuf-php/protobuf/issues", - "source": "https://github.com/protobuf-php/protobuf/tree/master" - }, - "time": "2016-09-21T23:47:34+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-15T08:08:08+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/yaml", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-15T14:25:02+00:00" - }, - { - "name": "zircote/swagger-php", - "version": "4.4.5", - "source": { - "type": "git", - "url": "https://github.com/zircote/swagger-php.git", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.7", - "ext-json": "*", - "php": ">=7.2", - "psr/log": "^1.1 || ^2.0 || 3.0", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "bin": [ - "bin/openapi" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", - "keywords": [ - "api", - "json", - "rest", - "service discovery" - ], - "support": { - "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.4.5" - }, - "time": "2022-06-02T21:05:02+00:00" + "time": "2022-12-30T11:06:45+00:00" } ], "packages-dev": [], diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 75f38f0..18e2fa0 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -2,17 +2,17 @@ "packages": [ { "name": "google/protobuf", - "version": "v3.21.11", - "version_normalized": "3.21.11.0", + "version": "v3.21.12", + "version_normalized": "3.21.12.0", "source": { "type": "git", "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "8f8dc48540aed2c96eb3febcc4816f1321f66b85" + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/8f8dc48540aed2c96eb3febcc4816f1321f66b85", - "reference": "8f8dc48540aed2c96eb3febcc4816f1321f66b85", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/93019df2df0f8c5c01757ef79f3f077d2cb35b65", + "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65", "shasum": "" }, "require": { @@ -24,7 +24,7 @@ "suggest": { "ext-bcmath": "Need to support JSON deserialization" }, - "time": "2022-12-08T06:36:59+00:00", + "time": "2022-12-14T14:50:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -43,7 +43,7 @@ "proto" ], "support": { - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.11" + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.12" }, "install-path": "../google/protobuf" }, @@ -96,18 +96,18 @@ }, { "name": "passkit/passkit-php-grpc-sdk", - "version": "v1.1.70", - "version_normalized": "1.1.70.0", + "version": "v1.1.72", + "version_normalized": "1.1.72.0", "source": { "type": "git", "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", - "reference": "aa4501206dbf2f80131c492892c5de8626a79039" + "reference": "ebce339d47a6af89beeaa1c0e901d6a5681e9e70" }, "require": { - "google/protobuf": "^v3.21.7", + "google/protobuf": "^v3.21.12", "grpc/grpc": "^v1.42.0" }, - "time": "2022-10-06T08:27:41+00:00", + "time": "2022-12-30T11:06:45+00:00", "type": "library", "installation-source": "source", "autoload": { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index b0c1930..2175436 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -11,12 +11,12 @@ ), 'versions' => array( 'google/protobuf' => array( - 'pretty_version' => 'v3.21.11', - 'version' => '3.21.11.0', + 'pretty_version' => 'v3.21.12', + 'version' => '3.21.12.0', 'type' => 'library', 'install_path' => __DIR__ . '/../google/protobuf', 'aliases' => array(), - 'reference' => '8f8dc48540aed2c96eb3febcc4816f1321f66b85', + 'reference' => '93019df2df0f8c5c01757ef79f3f077d2cb35b65', 'dev_requirement' => false, ), 'grpc/grpc' => array( @@ -29,12 +29,12 @@ 'dev_requirement' => false, ), 'passkit/passkit-php-grpc-sdk' => array( - 'pretty_version' => 'v1.1.70', - 'version' => '1.1.70.0', + 'pretty_version' => 'v1.1.72', + 'version' => '1.1.72.0', 'type' => 'library', 'install_path' => __DIR__ . '/../passkit/passkit-php-grpc-sdk', 'aliases' => array(), - 'reference' => 'aa4501206dbf2f80131c492892c5de8626a79039', + 'reference' => 'ebce339d47a6af89beeaa1c0e901d6a5681e9e70', 'dev_requirement' => false, ), 'passkit/passkit-php-quickstart' => array( From 626d27c94e760fc9d46208b2ccd64a8eeb2f224d Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:40:10 +0000 Subject: [PATCH 5/6] Removed vendor --- .gitattributes | 2 - .gitignore | 3 - certs/ca-chain.pem | 32 + certs/certificate.pem | 14 + certs/key.pem | 5 + vendor/autoload.php | 12 - vendor/composer/ClassLoader.php | 572 --- vendor/composer/InstalledVersions.php | 352 -- vendor/composer/LICENSE | 21 - vendor/composer/autoload_classmap.php | 10 - vendor/composer/autoload_namespaces.php | 9 - vendor/composer/autoload_psr4.php | 26 - vendor/composer/autoload_real.php | 38 - vendor/composer/autoload_static.php | 154 - vendor/composer/installed.json | 156 - vendor/composer/installed.php | 50 - vendor/composer/platform_check.php | 26 - vendor/google/protobuf/LICENSE | 29 - vendor/google/protobuf/README.md | 2 - vendor/google/protobuf/composer.json | 23 - .../src/GPBMetadata/Google/Protobuf/Any.php | 30 - .../src/GPBMetadata/Google/Protobuf/Api.php | 48 - .../GPBMetadata/Google/Protobuf/Duration.php | 30 - .../GPBMetadata/Google/Protobuf/FieldMask.php | 29 - .../GPBMetadata/Google/Protobuf/GPBEmpty.php | 29 - .../Google/Protobuf/Internal/Descriptor.php | 279 -- .../Google/Protobuf/SourceContext.php | 29 - .../GPBMetadata/Google/Protobuf/Struct.php | Bin 1162 -> 0 bytes .../GPBMetadata/Google/Protobuf/Timestamp.php | 30 - .../src/GPBMetadata/Google/Protobuf/Type.php | Bin 2205 -> 0 bytes .../GPBMetadata/Google/Protobuf/Wrappers.php | 49 - .../protobuf/src/Google/Protobuf/Any.php | 253 - .../protobuf/src/Google/Protobuf/Api.php | 360 -- .../src/Google/Protobuf/BoolValue.php | 68 - .../src/Google/Protobuf/BytesValue.php | 68 - .../src/Google/Protobuf/Descriptor.php | 108 - .../src/Google/Protobuf/DescriptorPool.php | 76 - .../src/Google/Protobuf/DoubleValue.php | 68 - .../protobuf/src/Google/Protobuf/Duration.php | 173 - .../protobuf/src/Google/Protobuf/Enum.php | 213 - .../src/Google/Protobuf/EnumDescriptor.php | 79 - .../src/Google/Protobuf/EnumValue.php | 135 - .../Google/Protobuf/EnumValueDescriptor.php | 64 - .../protobuf/src/Google/Protobuf/Field.php | 381 -- .../src/Google/Protobuf/Field/Cardinality.php | 71 - .../src/Google/Protobuf/Field/Kind.php | 176 - .../src/Google/Protobuf/FieldDescriptor.php | 144 - .../src/Google/Protobuf/FieldMask.php | 217 - .../src/Google/Protobuf/Field_Cardinality.php | 16 - .../src/Google/Protobuf/Field_Kind.php | 16 - .../src/Google/Protobuf/FloatValue.php | 68 - .../protobuf/src/Google/Protobuf/GPBEmpty.php | 38 - .../src/Google/Protobuf/Int32Value.php | 68 - .../src/Google/Protobuf/Int64Value.php | 68 - .../src/Google/Protobuf/Internal/AnyBase.php | 86 - .../Protobuf/Internal/CodedInputStream.php | 382 -- .../Protobuf/Internal/CodedOutputStream.php | 159 - .../Google/Protobuf/Internal/Descriptor.php | 236 - .../Protobuf/Internal/DescriptorPool.php | 194 - .../Protobuf/Internal/DescriptorProto.php | 336 -- .../DescriptorProto/ExtensionRange.php | 161 - .../DescriptorProto/ReservedRange.php | 128 - .../DescriptorProto_ExtensionRange.php | 16 - .../DescriptorProto_ReservedRange.php | 16 - .../Protobuf/Internal/EnumBuilderContext.php | 63 - .../Protobuf/Internal/EnumDescriptor.php | 116 - .../Protobuf/Internal/EnumDescriptorProto.php | 216 - .../EnumDescriptorProto/EnumReservedRange.php | 130 - .../EnumDescriptorProto_EnumReservedRange.php | 16 - .../Google/Protobuf/Internal/EnumOptions.php | 171 - .../Internal/EnumValueDescriptorProto.php | 146 - .../Protobuf/Internal/EnumValueOptions.php | 123 - .../Internal/ExtensionRangeOptions.php | 67 - .../Protobuf/Internal/FieldDescriptor.php | 326 -- .../Internal/FieldDescriptorProto.php | 611 --- .../Internal/FieldDescriptorProto/Label.php | 58 - .../Internal/FieldDescriptorProto/Type.php | 153 - .../Internal/FieldDescriptorProto_Label.php | 16 - .../Internal/FieldDescriptorProto_Type.php | 16 - .../Google/Protobuf/Internal/FieldOptions.php | 567 --- .../Protobuf/Internal/FieldOptions/CType.php | 58 - .../Protobuf/Internal/FieldOptions/JSType.php | 62 - .../Protobuf/Internal/FieldOptions_CType.php | 16 - .../Protobuf/Internal/FieldOptions_JSType.php | 16 - .../Protobuf/Internal/FileDescriptor.php | 89 - .../Protobuf/Internal/FileDescriptorProto.php | 485 -- .../Protobuf/Internal/FileDescriptorSet.php | 63 - .../Google/Protobuf/Internal/FileOptions.php | 1106 ----- .../Internal/FileOptions/OptimizeMode.php | 64 - .../Internal/FileOptions_OptimizeMode.php | 16 - .../Protobuf/Internal/GPBDecodeException.php | 47 - .../Google/Protobuf/Internal/GPBJsonWire.php | 304 -- .../src/Google/Protobuf/Internal/GPBLabel.php | 40 - .../src/Google/Protobuf/Internal/GPBType.php | 55 - .../src/Google/Protobuf/Internal/GPBUtil.php | 663 --- .../src/Google/Protobuf/Internal/GPBWire.php | 622 --- .../Google/Protobuf/Internal/GPBWireType.php | 43 - .../Protobuf/Internal/GeneratedCodeInfo.php | 75 - .../Internal/GeneratedCodeInfo/Annotation.php | 218 - .../Internal/GeneratedCodeInfo_Annotation.php | 16 - .../Internal/GetPublicDescriptorTrait.php | 41 - .../Internal/HasPublicDescriptorTrait.php | 43 - .../src/Google/Protobuf/Internal/MapEntry.php | 71 - .../src/Google/Protobuf/Internal/MapField.php | 298 -- .../Google/Protobuf/Internal/MapFieldIter.php | 142 - .../src/Google/Protobuf/Internal/Message.php | 2034 -------- .../Internal/MessageBuilderContext.php | 120 - .../Protobuf/Internal/MessageOptions.php | 387 -- .../Internal/MethodDescriptorProto.php | 282 -- .../Protobuf/Internal/MethodOptions.php | 160 - .../MethodOptions/IdempotencyLevel.php | 64 - .../MethodOptions_IdempotencyLevel.php | 16 - .../Protobuf/Internal/OneofDescriptor.php | 87 - .../Internal/OneofDescriptorProto.php | 109 - .../Google/Protobuf/Internal/OneofField.php | 77 - .../Google/Protobuf/Internal/OneofOptions.php | 67 - .../Protobuf/Internal/RawInputStream.php | 50 - .../Protobuf/Internal/RepeatedField.php | 264 - .../Protobuf/Internal/RepeatedFieldIter.php | 126 - .../Internal/ServiceDescriptorProto.php | 136 - .../Protobuf/Internal/ServiceOptions.php | 123 - .../Protobuf/Internal/SourceCodeInfo.php | 230 - .../Internal/SourceCodeInfo/Location.php | 448 -- .../Internal/SourceCodeInfo_Location.php | 16 - .../Protobuf/Internal/TimestampBase.php | 32 - .../Protobuf/Internal/UninterpretedOption.php | 300 -- .../Internal/UninterpretedOption/NamePart.php | 116 - .../Internal/UninterpretedOption_NamePart.php | 16 - .../src/Google/Protobuf/ListValue.php | 68 - .../protobuf/src/Google/Protobuf/Method.php | 271 - .../protobuf/src/Google/Protobuf/Mixin.php | 166 - .../src/Google/Protobuf/NullValue.php | 49 - .../src/Google/Protobuf/OneofDescriptor.php | 87 - .../protobuf/src/Google/Protobuf/Option.php | 136 - .../src/Google/Protobuf/SourceContext.php | 72 - .../src/Google/Protobuf/StringValue.php | 68 - .../protobuf/src/Google/Protobuf/Struct.php | 73 - .../protobuf/src/Google/Protobuf/Syntax.php | 54 - .../src/Google/Protobuf/Timestamp.php | 186 - .../protobuf/src/Google/Protobuf/Type.php | 247 - .../src/Google/Protobuf/UInt32Value.php | 68 - .../src/Google/Protobuf/UInt64Value.php | 68 - .../protobuf/src/Google/Protobuf/Value.php | 244 - vendor/google/protobuf/src/phpdoc.dist.xml | 15 - vendor/grpc/grpc/LICENSE | 201 - vendor/grpc/grpc/MAINTAINERS.md | 16 - vendor/grpc/grpc/README.md | 9 - vendor/grpc/grpc/composer.json | 24 - vendor/grpc/grpc/etc/roots.pem | 4337 ----------------- vendor/grpc/grpc/src/lib/AbstractCall.php | 147 - vendor/grpc/grpc/src/lib/BaseStub.php | 618 --- .../grpc/grpc/src/lib/BidiStreamingCall.php | 105 - vendor/grpc/grpc/src/lib/CallInvoker.php | 32 - .../grpc/grpc/src/lib/ClientStreamingCall.php | 80 - .../grpc/grpc/src/lib/DefaultCallInvoker.php | 46 - vendor/grpc/grpc/src/lib/Interceptor.php | 91 - .../src/lib/Internal/InterceptorChannel.php | 76 - vendor/grpc/grpc/src/lib/MethodDescriptor.php | 52 - vendor/grpc/grpc/src/lib/RpcServer.php | 151 - vendor/grpc/grpc/src/lib/ServerCallReader.php | 52 - vendor/grpc/grpc/src/lib/ServerCallWriter.php | 109 - vendor/grpc/grpc/src/lib/ServerContext.php | 76 - .../grpc/grpc/src/lib/ServerStreamingCall.php | 100 - vendor/grpc/grpc/src/lib/Status.php | 55 - vendor/grpc/grpc/src/lib/UnaryCall.php | 85 - vendor/passkit/vendor/autoload.php | 12 - vendor/passkit/vendor/bin/openapi | 117 - vendor/passkit/vendor/bin/yaml-lint | 117 - .../passkit/vendor/composer/ClassLoader.php | 572 --- .../vendor/composer/InstalledVersions.php | 352 -- vendor/passkit/vendor/composer/LICENSE | 21 - .../vendor/composer/autoload_classmap.php | 10 - .../vendor/composer/autoload_files.php | 10 - .../vendor/composer/autoload_namespaces.php | 9 - .../passkit/vendor/composer/autoload_psr4.php | 17 - .../passkit/vendor/composer/autoload_real.php | 57 - .../vendor/composer/autoload_static.php | 84 - vendor/passkit/vendor/composer/installed.json | 574 --- vendor/passkit/vendor/composer/installed.php | 95 - .../vendor/composer/platform_check.php | 26 - .../vendor/doctrine/annotations/LICENSE | 19 - .../vendor/doctrine/annotations/README.md | 18 - .../vendor/doctrine/annotations/composer.json | 44 - .../annotations/docs/en/annotations.rst | 252 - .../doctrine/annotations/docs/en/custom.rst | 443 -- .../doctrine/annotations/docs/en/index.rst | 101 - .../doctrine/annotations/docs/en/sidebar.rst | 6 - .../Common/Annotations/Annotation.php | 59 - .../Annotations/Annotation/Attribute.php | 21 - .../Annotations/Annotation/Attributes.php | 15 - .../Common/Annotations/Annotation/Enum.php | 69 - .../Annotation/IgnoreAnnotation.php | 43 - .../Annotation/NamedArgumentConstructor.php | 13 - .../Annotations/Annotation/Required.php | 13 - .../Common/Annotations/Annotation/Target.php | 101 - .../Annotations/AnnotationException.php | 171 - .../Common/Annotations/AnnotationReader.php | 389 -- .../Common/Annotations/AnnotationRegistry.php | 190 - .../Common/Annotations/CachedReader.php | 268 - .../Doctrine/Common/Annotations/DocLexer.php | 129 - .../Doctrine/Common/Annotations/DocParser.php | 1459 ------ .../Common/Annotations/FileCacheReader.php | 315 -- .../ImplicitlyIgnoredAnnotationNames.php | 177 - .../Common/Annotations/IndexedReader.php | 100 - .../NamedArgumentConstructorAnnotation.php | 14 - .../Doctrine/Common/Annotations/PhpParser.php | 92 - .../Common/Annotations/PsrCachedReader.php | 232 - .../Doctrine/Common/Annotations/Reader.php | 80 - .../Annotations/SimpleAnnotationReader.php | 114 - .../Common/Annotations/TokenParser.php | 208 - vendor/passkit/vendor/doctrine/lexer/LICENSE | 19 - .../passkit/vendor/doctrine/lexer/README.md | 9 - .../vendor/doctrine/lexer/composer.json | 41 - .../Doctrine/Common/Lexer/AbstractLexer.php | 337 -- .../passkit/vendor/doctrine/lexer/psalm.xml | 15 - vendor/passkit/vendor/psr/cache/CHANGELOG.md | 16 - vendor/passkit/vendor/psr/cache/LICENSE.txt | 19 - vendor/passkit/vendor/psr/cache/README.md | 12 - vendor/passkit/vendor/psr/cache/composer.json | 25 - .../vendor/psr/cache/src/CacheException.php | 10 - .../psr/cache/src/CacheItemInterface.php | 105 - .../psr/cache/src/CacheItemPoolInterface.php | 138 - .../cache/src/InvalidArgumentException.php | 13 - vendor/passkit/vendor/psr/log/LICENSE | 19 - vendor/passkit/vendor/psr/log/README.md | 58 - vendor/passkit/vendor/psr/log/composer.json | 26 - .../vendor/psr/log/src/AbstractLogger.php | 15 - .../psr/log/src/InvalidArgumentException.php | 7 - .../passkit/vendor/psr/log/src/LogLevel.php | 18 - .../psr/log/src/LoggerAwareInterface.php | 18 - .../vendor/psr/log/src/LoggerAwareTrait.php | 26 - .../vendor/psr/log/src/LoggerInterface.php | 125 - .../vendor/psr/log/src/LoggerTrait.php | 142 - .../passkit/vendor/psr/log/src/NullLogger.php | 30 - .../vendor/symfony/finder/CHANGELOG.md | 92 - .../symfony/finder/Comparator/Comparator.php | 62 - .../finder/Comparator/DateComparator.php | 50 - .../finder/Comparator/NumberComparator.php | 78 - .../Exception/AccessDeniedException.php | 19 - .../Exception/DirectoryNotFoundException.php | 19 - .../passkit/vendor/symfony/finder/Finder.php | 798 --- .../vendor/symfony/finder/Gitignore.php | 93 - vendor/passkit/vendor/symfony/finder/Glob.php | 109 - .../finder/Iterator/CustomFilterIterator.php | 61 - .../Iterator/DateRangeFilterIterator.php | 58 - .../Iterator/DepthRangeFilterIterator.php | 48 - .../ExcludeDirectoryFilterIterator.php | 88 - .../Iterator/FileTypeFilterIterator.php | 53 - .../Iterator/FilecontentFilterIterator.php | 58 - .../Iterator/FilenameFilterIterator.php | 45 - .../symfony/finder/Iterator/LazyIterator.php | 32 - .../Iterator/MultiplePcreFilterIterator.php | 111 - .../finder/Iterator/PathFilterIterator.php | 56 - .../Iterator/RecursiveDirectoryIterator.php | 146 - .../Iterator/SizeRangeFilterIterator.php | 57 - .../finder/Iterator/SortableIterator.php | 101 - .../Iterator/VcsIgnoredFilterIterator.php | 178 - vendor/passkit/vendor/symfony/finder/LICENSE | 19 - .../passkit/vendor/symfony/finder/README.md | 14 - .../vendor/symfony/finder/SplFileInfo.php | 82 - .../vendor/symfony/finder/composer.json | 31 - .../vendor/symfony/polyfill-ctype/Ctype.php | 232 - .../vendor/symfony/polyfill-ctype/LICENSE | 19 - .../vendor/symfony/polyfill-ctype/README.md | 12 - .../symfony/polyfill-ctype/bootstrap.php | 50 - .../symfony/polyfill-ctype/bootstrap80.php | 46 - .../symfony/polyfill-ctype/composer.json | 41 - .../passkit/vendor/symfony/yaml/CHANGELOG.md | 242 - .../symfony/yaml/Command/LintCommand.php | 279 -- vendor/passkit/vendor/symfony/yaml/Dumper.php | 138 - .../passkit/vendor/symfony/yaml/Escaper.php | 95 - .../symfony/yaml/Exception/DumpException.php | 21 - .../yaml/Exception/ExceptionInterface.php | 21 - .../symfony/yaml/Exception/ParseException.php | 126 - .../yaml/Exception/RuntimeException.php | 21 - vendor/passkit/vendor/symfony/yaml/Inline.php | 779 --- vendor/passkit/vendor/symfony/yaml/LICENSE | 19 - vendor/passkit/vendor/symfony/yaml/Parser.php | 1255 ----- vendor/passkit/vendor/symfony/yaml/README.md | 13 - .../symfony/yaml/Resources/bin/yaml-lint | 45 - .../vendor/symfony/yaml/Tag/TaggedValue.php | 38 - .../passkit/vendor/symfony/yaml/Unescaper.php | 110 - vendor/passkit/vendor/symfony/yaml/Yaml.php | 96 - .../passkit/vendor/symfony/yaml/composer.json | 41 - .../vendor/zircote/swagger-php/Changelog.md | 3 - .../zircote/swagger-php/Examples/Readme.md | 71 - .../Examples/example-object/OpenApiSpec.php | 117 - .../example-object/example-object.yaml | 90 - .../swagger-php/Examples/misc/OpenApiSpec.php | 107 - .../swagger-php/Examples/misc/misc.yaml | 100 - .../swagger-php/Examples/misc/sideeffect.php | 5 - .../Examples/nesting/ActualModel.php | 16 - .../Examples/nesting/AlmostModel.php | 16 - .../Examples/nesting/ApiController.php | 49 - .../Examples/nesting/BaseModel.php | 16 - .../Examples/nesting/IntermediateModel.php | 16 - .../Examples/nesting/SoCloseModel.php | 16 - .../swagger-php/Examples/nesting/nesting.yaml | 66 - .../Examples/petstore-3.0/Controllers/Pet.php | 327 -- .../petstore-3.0/Controllers/Store.php | 137 - .../petstore-3.0/Controllers/User.php | 231 - .../petstore-3.0/Models/ApiResponse.php | 51 - .../Examples/petstore-3.0/Models/Category.php | 43 - .../Examples/petstore-3.0/Models/Order.php | 93 - .../Examples/petstore-3.0/Models/Pet.php | 88 - .../petstore-3.0/Models/PetRequestBody.php | 23 - .../Examples/petstore-3.0/Models/Tag.php | 43 - .../Examples/petstore-3.0/Models/User.php | 106 - .../Models/UserArrayRequestBody.php | 22 - .../Examples/petstore-3.0/Petstore.php | 57 - .../Examples/petstore-3.0/Security.php | 32 - .../Examples/petstore-3.0/petstore-3.0.yaml | 734 --- .../petstore.swagger.io/ApiResponse.php | 31 - .../Controllers/PetController.php | 342 -- .../Controllers/StoreController.php | 111 - .../Controllers/UserController.php | 218 - .../petstore.swagger.io/Models/Category.php | 26 - .../petstore.swagger.io/Models/Order.php | 52 - .../petstore.swagger.io/Models/Pet.php | 50 - .../petstore.swagger.io/Models/Tag.php | 26 - .../petstore.swagger.io/Models/User.php | 64 - .../petstore.swagger.io/OpenApiSpec.php | 32 - .../petstore.swagger.io/OpenApiTags.php | 29 - .../petstore.swagger.io/PetstoreAuth.php | 27 - .../petstore.swagger.io.json | 980 ---- .../petstore.swagger.io.yaml | 669 --- .../polymorphism/AbstractResponsible.php | 38 - .../Examples/polymorphism/Controller.php | 40 - .../Examples/polymorphism/Employee.php | 23 - .../swagger-php/Examples/polymorphism/Fl.php | 20 - .../Examples/polymorphism/Request.php | 20 - .../polymorphism/polymorphism-3.1.0.yaml | 76 - .../Examples/polymorphism/polymorphism.yaml | 78 - .../SchemaQueryParameter.php | 82 - .../schema-query-parameter/app/OpenApi.php | 17 - .../schema-query-parameter/app/Product.php | 27 - .../app/ProductController.php | 49 - .../schema-query-parameter/scan.php | 33 - .../schema-query-parameter.yaml | 62 - .../sort-components/SortComponents.php | 20 - .../petstore-simple/OpenApiSpec.php | 46 - .../petstore-simple/SimplePet.php | 41 - .../petstore-simple/SimplePetsController.php | 196 - .../petstore-simple-3.1.0.yaml | 209 - .../petstore-simple/petstore-simple.yaml | 208 - .../Controllers/PetWithDocsController.php | 197 - .../Models/ErrorModel.php | 22 - .../Models/Pet.php | 40 - .../OpenApiSpec.php | 38 - .../petstore-with-external-docs.yaml | 217 - .../swagger-spec/petstore/OpenApiSpec.php | 50 - .../Examples/swagger-spec/petstore/Pet.php | 29 - .../swagger-spec/petstore/PetsController.php | 88 - .../swagger-spec/petstore/petstore.yaml | 95 - .../using-interfaces/ColorInterface.php | 16 - .../using-interfaces/GreenProduct.php | 17 - .../Examples/using-interfaces/OpenApiSpec.php | 29 - .../Examples/using-interfaces/Product.php | 26 - .../using-interfaces/ProductController.php | 58 - .../using-interfaces/ProductInterface.php | 16 - .../using-interfaces/using-interfaces.yaml | 89 - .../using-links-php81/MyAttribute.php | 8 - .../using-links-php81/OpenApiSpec.php | 10 - .../using-links-php81/PullRequest.php | 38 - .../RepositoriesController.php | 108 - .../Examples/using-links-php81/Repository.php | 19 - .../Examples/using-links-php81/State.php | 13 - .../Examples/using-links-php81/User.php | 27 - .../using-links-php81/UsersController.php | 16 - .../using-links-php81/using-links-php81.yaml | 217 - .../Examples/using-links/OpenApiSpec.php | 15 - .../Examples/using-links/PullRequest.php | 40 - .../using-links/RepositoriesController.php | 168 - .../Examples/using-links/Repository.php | 26 - .../swagger-php/Examples/using-links/User.php | 26 - .../Examples/using-links/UsersController.php | 30 - .../Examples/using-links/using-links.yaml | 212 - .../swagger-php/Examples/using-refs/Model.php | 12 - .../Examples/using-refs/OpenApiSpec.php | 91 - .../Examples/using-refs/Product.php | 36 - .../Examples/using-refs/ProductController.php | 41 - .../using-refs/PropertyRefController.php | 21 - .../Examples/using-refs/StockLevel.php | 13 - .../Examples/using-refs/using-refs.yaml | 97 - .../using-traits/BellsAndWhistles.php | 21 - .../Examples/using-traits/Blink.php | 17 - .../Examples/using-traits/Colour.php | 17 - .../using-traits/Decoration/Bells.php | 17 - .../Decoration/UndocumentedBell.php | 8 - .../using-traits/Decoration/Whistles.php | 16 - .../Examples/using-traits/DeleteEntity.php | 30 - .../Examples/using-traits/OpenApiSpec.php | 21 - .../Examples/using-traits/Product.php | 27 - .../using-traits/ProductController.php | 43 - .../Examples/using-traits/SimpleProduct.php | 21 - .../Examples/using-traits/TrickyProduct.php | 21 - .../Examples/using-traits/using-traits.yaml | 127 - .../vendor/zircote/swagger-php/LICENSE | 202 - .../vendor/zircote/swagger-php/README.md | 150 - .../vendor/zircote/swagger-php/bin/openapi | 234 - .../vendor/zircote/swagger-php/composer.json | 112 - .../swagger-php/docs/.vitepress/config.js | 82 - .../.vitepress/theme/components/Codeblock.vue | 31 - .../docs/.vitepress/theme/custom.css | 30 - .../docs/.vitepress/theme/index.js | 14 - .../docs/.vitepress/theme/tabs.css | 80 - .../swagger-php/docs/guide/annotations.md | 141 - .../swagger-php/docs/guide/attributes.md | 41 - .../docs/guide/common-techniques.md | 190 - .../swagger-php/docs/guide/cookbook.md | 690 --- .../zircote/swagger-php/docs/guide/faq.md | 80 - .../guide/generating-openapi-documents.md | 60 - .../zircote/swagger-php/docs/guide/index.md | 20 - .../swagger-php/docs/guide/installation.md | 20 - .../swagger-php/docs/guide/migrating-to-v3.md | 58 - .../swagger-php/docs/guide/migrating-to-v4.md | 138 - .../docs/guide/required-elements.md | 41 - .../swagger-php/docs/guide/under-the-hood.md | 50 - .../vendor/zircote/swagger-php/docs/index.md | 56 - .../zircote/swagger-php/docs/package.json | 14 - .../swagger-php/docs/reference/annotations.md | 1212 ----- .../swagger-php/docs/reference/attributes.md | 1664 ------- .../swagger-php/docs/reference/generator.md | 161 - .../swagger-php/docs/reference/index.md | 23 - .../swagger-php/docs/reference/processors.md | 6 - .../swagger-php/docs/related-projects.md | 35 - .../docs/snippets/example_annotations.php | 21 - .../docs/snippets/minimal_api.yaml | 11 - .../docs/snippets/minimal_api_annotations.php | 27 - .../docs/snippets/minimal_api_attributes.php | 15 - .../src/Analysers/AnalyserInterface.php | 18 - .../Analysers/AnnotationFactoryInterface.php | 21 - .../Analysers/AttributeAnnotationFactory.php | 132 - .../Analysers/ComposerAutoloaderScanner.php | 49 - .../Analysers/DocBlockAnnotationFactory.php | 58 - .../src/Analysers/DocBlockParser.php | 76 - .../src/Analysers/ReflectionAnalyser.php | 186 - .../src/Analysers/TokenAnalyser.php | 639 --- .../src/Analysers/TokenScanner.php | 356 -- .../zircote/swagger-php/src/Analysis.php | 440 -- .../src/Annotations/AbstractAnnotation.php | 714 --- .../src/Annotations/AdditionalProperties.php | 38 - .../src/Annotations/Attachable.php | 73 - .../src/Annotations/Components.php | 146 - .../swagger-php/src/Annotations/Contact.php | 63 - .../swagger-php/src/Annotations/Delete.php | 25 - .../src/Annotations/Discriminator.php | 69 - .../swagger-php/src/Annotations/Examples.php | 96 - .../src/Annotations/ExternalDocumentation.php | 76 - .../swagger-php/src/Annotations/Flow.php | 106 - .../swagger-php/src/Annotations/Get.php | 25 - .../swagger-php/src/Annotations/Head.php | 25 - .../swagger-php/src/Annotations/Header.php | 99 - .../swagger-php/src/Annotations/Info.php | 98 - .../swagger-php/src/Annotations/Items.php | 62 - .../src/Annotations/JsonContent.php | 42 - .../swagger-php/src/Annotations/License.php | 102 - .../swagger-php/src/Annotations/Link.php | 113 - .../swagger-php/src/Annotations/MediaType.php | 87 - .../swagger-php/src/Annotations/OpenApi.php | 236 - .../swagger-php/src/Annotations/Operation.php | 248 - .../swagger-php/src/Annotations/Options.php | 25 - .../swagger-php/src/Annotations/Parameter.php | 297 -- .../swagger-php/src/Annotations/Patch.php | 25 - .../swagger-php/src/Annotations/PathItem.php | 151 - .../src/Annotations/PathParameter.php | 25 - .../swagger-php/src/Annotations/Post.php | 25 - .../swagger-php/src/Annotations/Property.php | 47 - .../swagger-php/src/Annotations/Put.php | 25 - .../src/Annotations/RequestBody.php | 94 - .../swagger-php/src/Annotations/Response.php | 128 - .../swagger-php/src/Annotations/Schema.php | 440 -- .../src/Annotations/SecurityScheme.php | 136 - .../swagger-php/src/Annotations/Server.php | 87 - .../src/Annotations/ServerVariable.php | 87 - .../swagger-php/src/Annotations/Tag.php | 66 - .../swagger-php/src/Annotations/Trace.php | 25 - .../swagger-php/src/Annotations/Xml.php | 95 - .../src/Annotations/XmlContent.php | 43 - .../src/Attributes/AdditionalProperties.php | 101 - .../swagger-php/src/Attributes/Attachable.php | 16 - .../swagger-php/src/Attributes/Components.php | 48 - .../swagger-php/src/Attributes/Contact.php | 34 - .../swagger-php/src/Attributes/Delete.php | 13 - .../src/Attributes/Discriminator.php | 33 - .../swagger-php/src/Attributes/Examples.php | 42 - .../src/Attributes/ExternalDocumentation.php | 32 - .../swagger-php/src/Attributes/Flow.php | 38 - .../swagger-php/src/Attributes/Get.php | 13 - .../swagger-php/src/Attributes/Head.php | 13 - .../swagger-php/src/Attributes/Header.php | 40 - .../swagger-php/src/Attributes/Info.php | 38 - .../swagger-php/src/Attributes/Items.php | 105 - .../src/Attributes/JsonContent.php | 108 - .../swagger-php/src/Attributes/License.php | 34 - .../swagger-php/src/Attributes/Link.php | 44 - .../swagger-php/src/Attributes/MediaType.php | 38 - .../swagger-php/src/Attributes/OpenApi.php | 41 - .../src/Attributes/OperationTrait.php | 55 - .../swagger-php/src/Attributes/Options.php | 13 - .../swagger-php/src/Attributes/Parameter.php | 13 - .../src/Attributes/ParameterTrait.php | 58 - .../swagger-php/src/Attributes/Patch.php | 13 - .../swagger-php/src/Attributes/PathItem.php | 38 - .../src/Attributes/PathParameter.php | 13 - .../swagger-php/src/Attributes/Post.php | 13 - .../swagger-php/src/Attributes/Property.php | 107 - .../swagger-php/src/Attributes/Put.php | 13 - .../src/Attributes/RequestBody.php | 38 - .../swagger-php/src/Attributes/Response.php | 43 - .../swagger-php/src/Attributes/Schema.php | 106 - .../src/Attributes/SecurityScheme.php | 48 - .../swagger-php/src/Attributes/Server.php | 34 - .../src/Attributes/ServerVariable.php | 39 - .../swagger-php/src/Attributes/Tag.php | 33 - .../swagger-php/src/Attributes/Trace.php | 13 - .../swagger-php/src/Attributes/Xml.php | 38 - .../swagger-php/src/Attributes/XmlContent.php | 108 - .../zircote/swagger-php/src/Context.php | 273 -- .../zircote/swagger-php/src/Generator.php | 438 -- .../swagger-php/src/Loggers/ConsoleLogger.php | 95 - .../swagger-php/src/Loggers/DefaultLogger.php | 33 - .../src/Processors/AugmentParameters.php | 94 - .../src/Processors/AugmentProperties.php | 197 - .../src/Processors/AugmentRefs.php | 50 - .../src/Processors/AugmentSchemas.php | 137 - .../swagger-php/src/Processors/BuildPaths.php | 62 - .../src/Processors/CleanUnmerged.php | 35 - .../src/Processors/CleanUnusedComponents.php | 110 - .../src/Processors/DocBlockDescriptions.php | 104 - .../src/Processors/DocblockTrait.php | 170 - .../src/Processors/ExpandClasses.php | 49 - .../src/Processors/ExpandEnums.php | 57 - .../src/Processors/ExpandInterfaces.php | 57 - .../src/Processors/ExpandTraits.php | 49 - .../src/Processors/MergeIntoComponents.php | 34 - .../src/Processors/MergeIntoOpenApi.php | 56 - .../src/Processors/MergeJsonContent.php | 61 - .../swagger-php/src/Processors/MergeTrait.php | 80 - .../src/Processors/MergeXmlContent.php | 61 - .../src/Processors/OperationId.php | 72 - .../zircote/swagger-php/src/Serializer.php | 205 - .../vendor/zircote/swagger-php/src/Util.php | 197 - 543 files changed, 51 insertions(+), 68295 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .gitignore create mode 100644 certs/ca-chain.pem create mode 100644 certs/certificate.pem create mode 100644 certs/key.pem delete mode 100644 vendor/autoload.php delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/InstalledVersions.php delete mode 100644 vendor/composer/LICENSE delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/autoload_static.php delete mode 100644 vendor/composer/installed.json delete mode 100644 vendor/composer/installed.php delete mode 100644 vendor/composer/platform_check.php delete mode 100644 vendor/google/protobuf/LICENSE delete mode 100644 vendor/google/protobuf/README.md delete mode 100644 vendor/google/protobuf/composer.json delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php delete mode 100644 vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Wrappers.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Any.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Api.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/BoolValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/BytesValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Descriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Duration.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Enum.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/FieldMask.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Field_Kind.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/FloatValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Int32Value.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Int64Value.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ReservedRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumBuilderContext.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Type.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_JSType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBDecodeException.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBJsonWire.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/TimestampBase.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/ListValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Method.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Mixin.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/NullValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Option.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/SourceContext.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/StringValue.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Struct.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Syntax.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Timestamp.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Type.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php delete mode 100644 vendor/google/protobuf/src/Google/Protobuf/Value.php delete mode 100644 vendor/google/protobuf/src/phpdoc.dist.xml delete mode 100644 vendor/grpc/grpc/LICENSE delete mode 100644 vendor/grpc/grpc/MAINTAINERS.md delete mode 100644 vendor/grpc/grpc/README.md delete mode 100644 vendor/grpc/grpc/composer.json delete mode 100644 vendor/grpc/grpc/etc/roots.pem delete mode 100644 vendor/grpc/grpc/src/lib/AbstractCall.php delete mode 100644 vendor/grpc/grpc/src/lib/BaseStub.php delete mode 100644 vendor/grpc/grpc/src/lib/BidiStreamingCall.php delete mode 100644 vendor/grpc/grpc/src/lib/CallInvoker.php delete mode 100644 vendor/grpc/grpc/src/lib/ClientStreamingCall.php delete mode 100644 vendor/grpc/grpc/src/lib/DefaultCallInvoker.php delete mode 100644 vendor/grpc/grpc/src/lib/Interceptor.php delete mode 100644 vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php delete mode 100644 vendor/grpc/grpc/src/lib/MethodDescriptor.php delete mode 100644 vendor/grpc/grpc/src/lib/RpcServer.php delete mode 100644 vendor/grpc/grpc/src/lib/ServerCallReader.php delete mode 100644 vendor/grpc/grpc/src/lib/ServerCallWriter.php delete mode 100644 vendor/grpc/grpc/src/lib/ServerContext.php delete mode 100644 vendor/grpc/grpc/src/lib/ServerStreamingCall.php delete mode 100644 vendor/grpc/grpc/src/lib/Status.php delete mode 100644 vendor/grpc/grpc/src/lib/UnaryCall.php delete mode 100644 vendor/passkit/vendor/autoload.php delete mode 100755 vendor/passkit/vendor/bin/openapi delete mode 100755 vendor/passkit/vendor/bin/yaml-lint delete mode 100644 vendor/passkit/vendor/composer/ClassLoader.php delete mode 100644 vendor/passkit/vendor/composer/InstalledVersions.php delete mode 100644 vendor/passkit/vendor/composer/LICENSE delete mode 100644 vendor/passkit/vendor/composer/autoload_classmap.php delete mode 100644 vendor/passkit/vendor/composer/autoload_files.php delete mode 100644 vendor/passkit/vendor/composer/autoload_namespaces.php delete mode 100644 vendor/passkit/vendor/composer/autoload_psr4.php delete mode 100644 vendor/passkit/vendor/composer/autoload_real.php delete mode 100644 vendor/passkit/vendor/composer/autoload_static.php delete mode 100644 vendor/passkit/vendor/composer/installed.json delete mode 100644 vendor/passkit/vendor/composer/installed.php delete mode 100644 vendor/passkit/vendor/composer/platform_check.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/LICENSE delete mode 100644 vendor/passkit/vendor/doctrine/annotations/README.md delete mode 100644 vendor/passkit/vendor/doctrine/annotations/composer.json delete mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst delete mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst delete mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst delete mode 100644 vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php delete mode 100644 vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php delete mode 100644 vendor/passkit/vendor/doctrine/lexer/LICENSE delete mode 100644 vendor/passkit/vendor/doctrine/lexer/README.md delete mode 100644 vendor/passkit/vendor/doctrine/lexer/composer.json delete mode 100644 vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php delete mode 100644 vendor/passkit/vendor/doctrine/lexer/psalm.xml delete mode 100644 vendor/passkit/vendor/psr/cache/CHANGELOG.md delete mode 100644 vendor/passkit/vendor/psr/cache/LICENSE.txt delete mode 100644 vendor/passkit/vendor/psr/cache/README.md delete mode 100644 vendor/passkit/vendor/psr/cache/composer.json delete mode 100644 vendor/passkit/vendor/psr/cache/src/CacheException.php delete mode 100644 vendor/passkit/vendor/psr/cache/src/CacheItemInterface.php delete mode 100644 vendor/passkit/vendor/psr/cache/src/CacheItemPoolInterface.php delete mode 100644 vendor/passkit/vendor/psr/cache/src/InvalidArgumentException.php delete mode 100644 vendor/passkit/vendor/psr/log/LICENSE delete mode 100644 vendor/passkit/vendor/psr/log/README.md delete mode 100644 vendor/passkit/vendor/psr/log/composer.json delete mode 100644 vendor/passkit/vendor/psr/log/src/AbstractLogger.php delete mode 100644 vendor/passkit/vendor/psr/log/src/InvalidArgumentException.php delete mode 100644 vendor/passkit/vendor/psr/log/src/LogLevel.php delete mode 100644 vendor/passkit/vendor/psr/log/src/LoggerAwareInterface.php delete mode 100644 vendor/passkit/vendor/psr/log/src/LoggerAwareTrait.php delete mode 100644 vendor/passkit/vendor/psr/log/src/LoggerInterface.php delete mode 100644 vendor/passkit/vendor/psr/log/src/LoggerTrait.php delete mode 100644 vendor/passkit/vendor/psr/log/src/NullLogger.php delete mode 100644 vendor/passkit/vendor/symfony/finder/CHANGELOG.md delete mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Finder.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Gitignore.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Glob.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php delete mode 100644 vendor/passkit/vendor/symfony/finder/LICENSE delete mode 100644 vendor/passkit/vendor/symfony/finder/README.md delete mode 100644 vendor/passkit/vendor/symfony/finder/SplFileInfo.php delete mode 100644 vendor/passkit/vendor/symfony/finder/composer.json delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/README.md delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php delete mode 100644 vendor/passkit/vendor/symfony/polyfill-ctype/composer.json delete mode 100644 vendor/passkit/vendor/symfony/yaml/CHANGELOG.md delete mode 100644 vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Dumper.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Escaper.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Inline.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/LICENSE delete mode 100644 vendor/passkit/vendor/symfony/yaml/Parser.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/README.md delete mode 100755 vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint delete mode 100644 vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Unescaper.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/Yaml.php delete mode 100644 vendor/passkit/vendor/symfony/yaml/composer.json delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Changelog.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/example-object/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/example-object/example-object.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/misc.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/misc/sideeffect.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/ActualModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/AlmostModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/ApiController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/BaseModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/IntermediateModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/SoCloseModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/nesting/nesting.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Pet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Tag.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Petstore.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Security.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/petstore-3.0.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/PetController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/StoreController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Category.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Order.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Pet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/Tag.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Models/User.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/OpenApiTags.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/PetstoreAuth.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.json delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Employee.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Fl.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Request.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/polymorphism-3.1.0.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/polymorphism.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/SchemaQueryParameter.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/Product.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/ProductController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/scan.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/SimplePetsController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple-3.1.0.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/petstore-simple.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Controllers/PetWithDocsController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/ErrorModel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/Models/Pet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/Pet.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/PetsController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore/petstore.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ColorInterface.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/GreenProduct.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/Product.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ProductController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/ProductInterface.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-interfaces/using-interfaces.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/MyAttribute.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/PullRequest.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/RepositoriesController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/State.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/User.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/using-links-php81.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/PullRequest.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/RepositoriesController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/Repository.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/User.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/UsersController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-links/using-links.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/Model.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/Product.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/ProductController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/PropertyRefController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/StockLevel.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-refs/using-refs.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/BellsAndWhistles.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Blink.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Colour.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/Bells.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/UndocumentedBell.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Decoration/Whistles.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/DeleteEntity.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/OpenApiSpec.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/Product.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/ProductController.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/SimpleProduct.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/TrickyProduct.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/Examples/using-traits/using-traits.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/LICENSE delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/README.md delete mode 100755 vendor/passkit/vendor/zircote/swagger-php/bin/openapi delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/composer.json delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/cookbook.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/index.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/package.json delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api.yaml delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api_annotations.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/docs/snippets/minimal_api_attributes.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AnnotationFactoryInterface.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Components.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Discriminator.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Head.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Header.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Parameter.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathItem.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Post.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Property.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/RequestBody.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Xml.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Components.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Discriminator.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Head.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Header.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Parameter.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ParameterTrait.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathItem.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Post.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Property.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/RequestBody.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Xml.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Context.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Generator.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php delete mode 100644 vendor/passkit/vendor/zircote/swagger-php/src/Util.php diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 9a33915..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -*.pem -vendor/ diff --git a/certs/ca-chain.pem b/certs/ca-chain.pem new file mode 100644 index 0000000..6dcd90d --- /dev/null +++ b/certs/ca-chain.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIICkzCCAhqgAwIBAgIUGDXpJ2PQxvE51mRj9hcYZ5ZaWJ8wCgYIKoZIzj0EAwMw +dTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCERlbGF3YXJlMRMwEQYDVQQHEwpXaWxt +aW5ndG9uMRYwFAYDVQQKEw1QYXNzS2l0LCBJbmMuMSYwJAYDVQQDEx1QYXNzS2l0 +IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xOTExMDExNjM1MDBaFw0zOTEwMzEx +NjM1MDBaMIGWMQswCQYDVQQGEwJISzEjMCEGA1UECAwaQ2VudHJhbCAmIFdlc3Rl +cm4gRGlzdHJpY3QxEzARBgNVBAcTClNoZXVuZyBXYW4xFjAUBgNVBAoTDVBhc3NL +aXQsIEluYy4xEzARBgNVBAsTCnBhc3NraXQuaW8xIDAeBgNVBAMTF1Bhc3NLaXQg +SW50ZXJtZWRpYXRlIENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaeZN6Gv4 +lnqF5oUj4ab83VrkzGesE5rnxhFnxkDGXxhNvZ29Et8PzbyQ4JNNgfyssZA9N5pO +ipr4FeW9VkzUjKNmMGQwDgYDVR0PAQH/BAQDAgGmMBIGA1UdEwEB/wQIMAYBAf8C +AQAwHQYDVR0OBBYEFJBf+ZAi99kT6cbS0YNF2pwibNCNMB8GA1UdIwQYMBaAFIsU +qah4/A1DufRWLVIVmuT7MeZiMAoGCCqGSM49BAMDA2cAMGQCMEhYS6WGWrn/raeo +urMFZCAmRF6GcYoysn25UPJIDiX+m/7VYvGmTfQu0t3OlGPWXgIwMvFdImYbChw5 +Y7oHKvHCmCtuFbZ3jVSlIESF4s5YHUyRh+upPeZOUcLXOkoK449e +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICbTCCAfSgAwIBAgIUdbqHey0TaOXKrR008Mm2ei5J9V0wCgYIKoZIzj0EAwMw +dTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCERlbGF3YXJlMRMwEQYDVQQHEwpXaWxt +aW5ndG9uMRYwFAYDVQQKEw1QYXNzS2l0LCBJbmMuMSYwJAYDVQQDEx1QYXNzS2l0 +IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xOTExMDExNjM1MDBaFw00OTEwMjQx +NjM1MDBaMHUxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhEZWxhd2FyZTETMBEGA1UE +BxMKV2lsbWluZ3RvbjEWMBQGA1UEChMNUGFzc0tpdCwgSW5jLjEmMCQGA1UEAxMd +UGFzc0tpdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAASzCYEbF2augOANBffbc3pwxJDxCC9JXgGciomSefyTLf1ExFgDFkbORPnI +BsvfxsT9mAkAzQ3oa6AeWJe5Zvg90p+/5WpaYdNKrpT2H2cbOxPPqai60Nh3jSaa +HFglRwajRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMB0G +A1UdDgQWBBSLFKmoePwNQ7n0Vi1SFZrk+zHmYjAKBggqhkjOPQQDAwNnADBkAjBu +avYzOFquYhumDEoS+5qmuMM8dwCNyo4tKMG3fazQB6h5GnDUx1B8TVmoxIf10RsC +MCXVuy9HNPIG1oKm7fXptMBNT1sg5A91XVktaXEkeykNPMoxJUyZamI3ta9xMHNl +0A== +-----END CERTIFICATE----- diff --git a/certs/certificate.pem b/certs/certificate.pem new file mode 100644 index 0000000..26af65b --- /dev/null +++ b/certs/certificate.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAcmgAwIBAgIVAM4KElwsm92TWZTX/TxOHT5tw0wuMAoGCCqGSM49BAMC +MIGWMQswCQYDVQQGEwJISzEjMCEGA1UECAwaQ2VudHJhbCAmIFdlc3Rlcm4gRGlz +dHJpY3QxEzARBgNVBAcTClNoZXVuZyBXYW4xFjAUBgNVBAoTDVBhc3NLaXQsIElu +Yy4xEzARBgNVBAsTCnBhc3NraXQuaW8xIDAeBgNVBAMTF1Bhc3NLaXQgSW50ZXJt +ZWRpYXRlIENBMB4XDTIyMTExMTAzMDY0MVoXDTMyMTEwODAzMDY0MVowEjEQMA4G +A1UEAxMHY2xhdWRpYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFdwuf2dlYO7 +HjK9dwMIO6qh2POOCJ2LX9FOUemwo8pNc7Wvto39FawHy50Yq6T40XOXwB3ikJS7 +oCVACKt3GBGjdzB1MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcD +AjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFJBf+ZAi99kT6cbS0YNF2pwibNCN +MB8GA1UdEQQYMBaCFGdycGMucHViMS5wYXNza2l0LmlvMAoGCCqGSM49BAMCA0gA +MEUCIQColQ6yyvHlY+mOD5GuUZkgurgr1cfy10/v9XLBq0myNgIgdAFCVHiDPvPx +hafPMjuIAAZ6dAeK0tTkquClbX4aP8Y= +-----END CERTIFICATE----- diff --git a/certs/key.pem b/certs/key.pem new file mode 100644 index 0000000..cc3bedb --- /dev/null +++ b/certs/key.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIAwY1jnahDfYRzNMe7tRUuMlhwlokubzaLCh+BAiDXxyoAoGCCqGSM49 +AwEHoUQDQgAEV3C5/Z2Vg7seMr13Awg7qqHY844InYtf0U5R6bCjyk1zta+2jf0V +rAfLnRirpPjRc5fAHeKQlLugJUAIq3cYEQ== +-----END EC PRIVATE KEY----- diff --git a/vendor/autoload.php b/vendor/autoload.php deleted file mode 100644 index e15e65c..0000000 --- a/vendor/autoload.php +++ /dev/null @@ -1,12 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var ?string */ - private $vendorDir; - - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ - private $missingClasses = array(); - - /** @var ?string */ - private $apcuPrefix; - - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - } - - /** - * @return string[] - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array[] - * @psalm-return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return string[] Array of classname => path - * @psalm-return array - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private - */ -function includeFile($file) -{ - include $file; -} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php deleted file mode 100644 index 41bc143..0000000 --- a/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,352 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints($constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - $installed[] = self::$installed; - - return $installed; - } -} diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -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/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 0fb0a2c..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/composer/InstalledVersions.php', -); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($baseDir . '/lib/Single_use_coupons', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons'), - 'Scheduler\\' => array($baseDir . '/lib/Scheduler', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Scheduler'), - 'Raw\\' => array($baseDir . '/lib/Raw', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Raw'), - 'Members\\' => array($baseDir . '/lib/Members', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Members'), - 'Io\\' => array($baseDir . '/lib/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Io'), - 'Grpc\\' => array($vendorDir . '/grpc/grpc/src/lib'), - 'Google\\Protobuf\\' => array($vendorDir . '/google/protobuf/src/Google/Protobuf'), - 'Google\\Api\\' => array($baseDir . '/lib/extra/google/api', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/extra/google/api'), - 'GPBMetadata\\Io\\' => array($baseDir . '/lib/GPBMetadata/Io', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Io'), - 'GPBMetadata\\Google\\Protobuf\\' => array($vendorDir . '/google/protobuf/src/GPBMetadata/Google/Protobuf'), - 'GPBMetadata\\Google\\' => array($baseDir . '/lib/extra/GPBMetadata/Google', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google'), - 'GPBMetadata\\Ct\\' => array($baseDir . '/lib/GPBMetadata/Ct', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Ct'), - 'Flights\\' => array($baseDir . '/lib/Flights', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Flights'), - 'Event_tickets\\' => array($baseDir . '/lib/Event_tickets', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets'), - 'Ct\\' => array($baseDir . '/lib/Ct', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Ct'), - 'Cabin_codes\\' => array($baseDir . '/lib/Cabin_codes', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Cabin_codes'), - 'Analytics\\' => array($baseDir . '/lib/Analytics', $vendorDir . '/passkit/passkit-php-grpc-sdk/lib/Analytics'), -); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php deleted file mode 100644 index b0e6242..0000000 --- a/vendor/composer/autoload_real.php +++ /dev/null @@ -1,38 +0,0 @@ -register(true); - - return $loader; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php deleted file mode 100644 index 14a6e9e..0000000 --- a/vendor/composer/autoload_static.php +++ /dev/null @@ -1,154 +0,0 @@ - - array ( - 'Single_use_coupons\\' => 19, - 'Scheduler\\' => 10, - ), - 'R' => - array ( - 'Raw\\' => 4, - ), - 'M' => - array ( - 'Members\\' => 8, - ), - 'I' => - array ( - 'Io\\' => 3, - ), - 'G' => - array ( - 'Grpc\\' => 5, - 'Google\\Protobuf\\' => 16, - 'Google\\Api\\' => 11, - 'GPBMetadata\\Io\\' => 15, - 'GPBMetadata\\Google\\Protobuf\\' => 28, - 'GPBMetadata\\Google\\' => 19, - 'GPBMetadata\\Ct\\' => 15, - ), - 'F' => - array ( - 'Flights\\' => 8, - ), - 'E' => - array ( - 'Event_tickets\\' => 14, - ), - 'C' => - array ( - 'Ct\\' => 3, - 'Cabin_codes\\' => 12, - ), - 'A' => - array ( - 'Analytics\\' => 10, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Single_use_coupons\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Single_use_coupons', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Single_use_coupons', - ), - 'Scheduler\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Scheduler', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Scheduler', - ), - 'Raw\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Raw', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Raw', - ), - 'Members\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Members', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Members', - ), - 'Io\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Io', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Io', - ), - 'Grpc\\' => - array ( - 0 => __DIR__ . '/..' . '/grpc/grpc/src/lib', - ), - 'Google\\Protobuf\\' => - array ( - 0 => __DIR__ . '/..' . '/google/protobuf/src/Google/Protobuf', - ), - 'Google\\Api\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/extra/google/api', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/extra/google/api', - ), - 'GPBMetadata\\Io\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/GPBMetadata/Io', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Io', - ), - 'GPBMetadata\\Google\\Protobuf\\' => - array ( - 0 => __DIR__ . '/..' . '/google/protobuf/src/GPBMetadata/Google/Protobuf', - ), - 'GPBMetadata\\Google\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/extra/GPBMetadata/Google', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/extra/GPBMetadata/Google', - ), - 'GPBMetadata\\Ct\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/GPBMetadata/Ct', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/GPBMetadata/Ct', - ), - 'Flights\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Flights', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Flights', - ), - 'Event_tickets\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Event_tickets', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Event_tickets', - ), - 'Ct\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Ct', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Ct', - ), - 'Cabin_codes\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Cabin_codes', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Cabin_codes', - ), - 'Analytics\\' => - array ( - 0 => __DIR__ . '/../..' . '/lib/Analytics', - 1 => __DIR__ . '/..' . '/passkit/passkit-php-grpc-sdk/lib/Analytics', - ), - ); - - public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit34096ee264e58ad06d3d18f45eda2b68::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json deleted file mode 100644 index 18e2fa0..0000000 --- a/vendor/composer/installed.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "packages": [ - { - "name": "google/protobuf", - "version": "v3.21.12", - "version_normalized": "3.21.12.0", - "source": { - "type": "git", - "url": "https://github.com/protocolbuffers/protobuf-php.git", - "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/93019df2df0f8c5c01757ef79f3f077d2cb35b65", - "reference": "93019df2df0f8c5c01757ef79f3f077d2cb35b65", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": ">=5.0.0" - }, - "suggest": { - "ext-bcmath": "Need to support JSON deserialization" - }, - "time": "2022-12-14T14:50:49+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Google\\Protobuf\\": "src/Google/Protobuf", - "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "proto library for PHP", - "homepage": "https://developers.google.com/protocol-buffers/", - "keywords": [ - "proto" - ], - "support": { - "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.12" - }, - "install-path": "../google/protobuf" - }, - { - "name": "grpc/grpc", - "version": "1.42.0", - "version_normalized": "1.42.0.0", - "source": { - "type": "git", - "url": "https://github.com/grpc/grpc-php.git", - "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/grpc/grpc-php/zipball/9fa44f104cb92e924d4da547323a97f3d8aca6d4", - "reference": "9fa44f104cb92e924d4da547323a97f3d8aca6d4", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "google/auth": "^v1.3.0" - }, - "suggest": { - "ext-protobuf": "For better performance, install the protobuf C extension.", - "google/protobuf": "To get started using grpc quickly, install the native protobuf library." - }, - "time": "2021-11-19T08:13:51+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Grpc\\": "src/lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "gRPC library for PHP", - "homepage": "https://grpc.io", - "keywords": [ - "rpc" - ], - "support": { - "source": "https://github.com/grpc/grpc-php/tree/v1.42.0" - }, - "install-path": "../grpc/grpc" - }, - { - "name": "passkit/passkit-php-grpc-sdk", - "version": "v1.1.72", - "version_normalized": "1.1.72.0", - "source": { - "type": "git", - "url": "https://github.com/passkit/passkit-php-grpc-sdk.git", - "reference": "ebce339d47a6af89beeaa1c0e901d6a5681e9e70" - }, - "require": { - "google/protobuf": "^v3.21.12", - "grpc/grpc": "^v1.42.0" - }, - "time": "2022-12-30T11:06:45+00:00", - "type": "library", - "installation-source": "source", - "autoload": { - "psr-4": { - "Analytics\\": "lib/Analytics", - "Cabin_codes\\": "lib/Cabin_codes", - "Ct\\": "lib/Ct", - "Event_tickets\\": "lib/Event_tickets", - "Flights\\": "lib/Flights", - "Io\\": "lib/Io", - "Members\\": "lib/Members", - "Raw\\": "lib/Raw", - "Scheduler\\": "lib/Scheduler", - "Single_use_coupons\\": "lib/Single_use_coupons", - "GPBMetadata\\Io\\": "lib/GPBMetadata/Io", - "GPBMetadata\\Ct\\": "lib/GPBMetadata/Ct", - "GPBMetadata\\Google\\": "lib/extra/GPBMetadata/Google", - "Google\\Api\\": "lib/extra/google/api" - } - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PassKit Inc.", - "homepage": "https://passkit.com" - } - ], - "description": "PHP gRPC SDK for Apple Wallet and Google Pay Membership / Loyalty / Access Cards, Coupons, Flights & Event-Tickets.", - "homepage": "http://passkit.com", - "keywords": [ - "api", - "grpc", - "mobile-wallet", - "passkit", - "php", - "sdk", - "wallet" - ], - "install-path": "../passkit/passkit-php-grpc-sdk" - } - ], - "dev": true, - "dev-package-names": [] -} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php deleted file mode 100644 index 2175436..0000000 --- a/vendor/composer/installed.php +++ /dev/null @@ -1,50 +0,0 @@ - array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'name' => 'passkit/passkit-php-quickstart', - 'dev' => true, - ), - 'versions' => array( - 'google/protobuf' => array( - 'pretty_version' => 'v3.21.12', - 'version' => '3.21.12.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../google/protobuf', - 'aliases' => array(), - 'reference' => '93019df2df0f8c5c01757ef79f3f077d2cb35b65', - 'dev_requirement' => false, - ), - 'grpc/grpc' => array( - 'pretty_version' => '1.42.0', - 'version' => '1.42.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../grpc/grpc', - 'aliases' => array(), - 'reference' => '9fa44f104cb92e924d4da547323a97f3d8aca6d4', - 'dev_requirement' => false, - ), - 'passkit/passkit-php-grpc-sdk' => array( - 'pretty_version' => 'v1.1.72', - 'version' => '1.1.72.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../passkit/passkit-php-grpc-sdk', - 'aliases' => array(), - 'reference' => 'ebce339d47a6af89beeaa1c0e901d6a5681e9e70', - 'dev_requirement' => false, - ), - 'passkit/passkit-php-quickstart' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'dev_requirement' => false, - ), - ), -); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php deleted file mode 100644 index f79e574..0000000 --- a/vendor/composer/platform_check.php +++ /dev/null @@ -1,26 +0,0 @@ -= 70000)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.0.0". You are running ' . PHP_VERSION . '.'; -} - -if ($issues) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); - } elseif (!headers_sent()) { - echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; - } - } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR - ); -} diff --git a/vendor/google/protobuf/LICENSE b/vendor/google/protobuf/LICENSE deleted file mode 100644 index ba32af4..0000000 --- a/vendor/google/protobuf/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2019, Protocol Buffers -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/google/protobuf/README.md b/vendor/google/protobuf/README.md deleted file mode 100644 index 3663050..0000000 --- a/vendor/google/protobuf/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# protobuf-php -This repository contains only PHP files to support Composer installation. This repository is a mirror of [protobuf](https://github.com/protocolbuffers/protobuf). Any support requests, bug reports, or development contributions should be directed to that project. To install protobuf for PHP, please see https://github.com/protocolbuffers/protobuf/tree/master/php diff --git a/vendor/google/protobuf/composer.json b/vendor/google/protobuf/composer.json deleted file mode 100644 index 70af0a0..0000000 --- a/vendor/google/protobuf/composer.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "google/protobuf", - "type": "library", - "description": "proto library for PHP", - "keywords": ["proto"], - "homepage": "https://developers.google.com/protocol-buffers/", - "license": "BSD-3-Clause", - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": ">=5.0.0" - }, - "suggest": { - "ext-bcmath": "Need to support JSON deserialization" - }, - "autoload": { - "psr-4": { - "Google\\Protobuf\\": "src/Google/Protobuf", - "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" - } - } -} diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php deleted file mode 100644 index fbce4bf..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile( - ' - -google/protobuf/any.protogoogle.protobuf"& -Any -type_url (  -value ( Bv -com.google.protobufBAnyProtoPZ,google.golang.org/protobuf/types/known/anypbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php deleted file mode 100644 index 75e0ec6..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php +++ /dev/null @@ -1,48 +0,0 @@ -internalAddGeneratedFile( - ' - -google/protobuf/api.protogoogle.protobufgoogle/protobuf/type.proto" -Api -name ( ( -methods ( 2.google.protobuf.Method( -options ( 2.google.protobuf.Option -version ( 6 -source_context ( 2.google.protobuf.SourceContext& -mixins ( 2.google.protobuf.Mixin\' -syntax (2.google.protobuf.Syntax" -Method -name (  -request_type_url (  -request_streaming ( -response_type_url (  -response_streaming (( -options ( 2.google.protobuf.Option\' -syntax (2.google.protobuf.Syntax"# -Mixin -name (  -root ( Bv -com.google.protobufBApiProtoPZ,google.golang.org/protobuf/types/known/apipbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php deleted file mode 100644 index 5d8023e..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile( - ' - -google/protobuf/duration.protogoogle.protobuf"* -Duration -seconds ( -nanos (B -com.google.protobufB DurationProtoPZ1google.golang.org/protobuf/types/known/durationpbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php deleted file mode 100644 index f31bcc0..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php +++ /dev/null @@ -1,29 +0,0 @@ -internalAddGeneratedFile( - ' - - google/protobuf/field_mask.protogoogle.protobuf" - FieldMask -paths ( B -com.google.protobufBFieldMaskProtoPZ2google.golang.org/protobuf/types/known/fieldmaskpbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php deleted file mode 100644 index 5e42536..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php +++ /dev/null @@ -1,29 +0,0 @@ -internalAddGeneratedFile( - ' - -google/protobuf/empty.protogoogle.protobuf" -EmptyB} -com.google.protobufB -EmptyProtoPZ.google.golang.org/protobuf/types/known/emptypbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php deleted file mode 100644 index d71def9..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php +++ /dev/null @@ -1,279 +0,0 @@ -addMessage('google.protobuf.internal.FileDescriptorSet', \Google\Protobuf\Internal\FileDescriptorSet::class) - ->repeated('file', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.FileDescriptorProto') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.FileDescriptorProto', \Google\Protobuf\Internal\FileDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('package', \Google\Protobuf\Internal\GPBType::STRING, 2) - ->repeated('dependency', \Google\Protobuf\Internal\GPBType::STRING, 3) - ->repeated('public_dependency', \Google\Protobuf\Internal\GPBType::INT32, 10) - ->repeated('weak_dependency', \Google\Protobuf\Internal\GPBType::INT32, 11) - ->repeated('message_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.DescriptorProto') - ->repeated('enum_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 5, 'google.protobuf.internal.EnumDescriptorProto') - ->repeated('service', \Google\Protobuf\Internal\GPBType::MESSAGE, 6, 'google.protobuf.internal.ServiceDescriptorProto') - ->repeated('extension', \Google\Protobuf\Internal\GPBType::MESSAGE, 7, 'google.protobuf.internal.FieldDescriptorProto') - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.FileOptions') - ->optional('source_code_info', \Google\Protobuf\Internal\GPBType::MESSAGE, 9, 'google.protobuf.internal.SourceCodeInfo') - ->optional('syntax', \Google\Protobuf\Internal\GPBType::STRING, 12) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.DescriptorProto', \Google\Protobuf\Internal\DescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->repeated('field', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.FieldDescriptorProto') - ->repeated('extension', \Google\Protobuf\Internal\GPBType::MESSAGE, 6, 'google.protobuf.internal.FieldDescriptorProto') - ->repeated('nested_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.DescriptorProto') - ->repeated('enum_type', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto') - ->repeated('extension_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 5, 'google.protobuf.internal.DescriptorProto.ExtensionRange') - ->repeated('oneof_decl', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.OneofDescriptorProto') - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 7, 'google.protobuf.internal.MessageOptions') - ->repeated('reserved_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 9, 'google.protobuf.internal.DescriptorProto.ReservedRange') - ->repeated('reserved_name', \Google\Protobuf\Internal\GPBType::STRING, 10) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.DescriptorProto.ExtensionRange', \Google\Protobuf\Internal\DescriptorProto\ExtensionRange::class) - ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) - ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.ExtensionRangeOptions') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.DescriptorProto.ReservedRange', \Google\Protobuf\Internal\DescriptorProto\ReservedRange::class) - ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) - ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.ExtensionRangeOptions', \Google\Protobuf\Internal\ExtensionRangeOptions::class) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.FieldDescriptorProto', \Google\Protobuf\Internal\FieldDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('number', \Google\Protobuf\Internal\GPBType::INT32, 3) - ->optional('label', \Google\Protobuf\Internal\GPBType::ENUM, 4, 'google.protobuf.internal.FieldDescriptorProto.Label') - ->optional('type', \Google\Protobuf\Internal\GPBType::ENUM, 5, 'google.protobuf.internal.FieldDescriptorProto.Type') - ->optional('type_name', \Google\Protobuf\Internal\GPBType::STRING, 6) - ->optional('extendee', \Google\Protobuf\Internal\GPBType::STRING, 2) - ->optional('default_value', \Google\Protobuf\Internal\GPBType::STRING, 7) - ->optional('oneof_index', \Google\Protobuf\Internal\GPBType::INT32, 9) - ->optional('json_name', \Google\Protobuf\Internal\GPBType::STRING, 10) - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 8, 'google.protobuf.internal.FieldOptions') - ->optional('proto3_optional', \Google\Protobuf\Internal\GPBType::BOOL, 17) - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Type', \Google\Protobuf\Internal\Type::class) - ->value("TYPE_DOUBLE", 1) - ->value("TYPE_FLOAT", 2) - ->value("TYPE_INT64", 3) - ->value("TYPE_UINT64", 4) - ->value("TYPE_INT32", 5) - ->value("TYPE_FIXED64", 6) - ->value("TYPE_FIXED32", 7) - ->value("TYPE_BOOL", 8) - ->value("TYPE_STRING", 9) - ->value("TYPE_GROUP", 10) - ->value("TYPE_MESSAGE", 11) - ->value("TYPE_BYTES", 12) - ->value("TYPE_UINT32", 13) - ->value("TYPE_ENUM", 14) - ->value("TYPE_SFIXED32", 15) - ->value("TYPE_SFIXED64", 16) - ->value("TYPE_SINT32", 17) - ->value("TYPE_SINT64", 18) - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Label', \Google\Protobuf\Internal\Label::class) - ->value("LABEL_OPTIONAL", 1) - ->value("LABEL_REQUIRED", 2) - ->value("LABEL_REPEATED", 3) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.OneofDescriptorProto', \Google\Protobuf\Internal\OneofDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.OneofOptions') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.EnumDescriptorProto', \Google\Protobuf\Internal\EnumDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->repeated('value', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.EnumValueDescriptorProto') - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumOptions') - ->repeated('reserved_range', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto.EnumReservedRange') - ->repeated('reserved_name', \Google\Protobuf\Internal\GPBType::STRING, 5) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.EnumDescriptorProto.EnumReservedRange', \Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange::class) - ->optional('start', \Google\Protobuf\Internal\GPBType::INT32, 1) - ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 2) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.EnumValueDescriptorProto', \Google\Protobuf\Internal\EnumValueDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('number', \Google\Protobuf\Internal\GPBType::INT32, 2) - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumValueOptions') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.ServiceDescriptorProto', \Google\Protobuf\Internal\ServiceDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->repeated('method', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.MethodDescriptorProto') - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 3, 'google.protobuf.internal.ServiceOptions') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.MethodDescriptorProto', \Google\Protobuf\Internal\MethodDescriptorProto::class) - ->optional('name', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('input_type', \Google\Protobuf\Internal\GPBType::STRING, 2) - ->optional('output_type', \Google\Protobuf\Internal\GPBType::STRING, 3) - ->optional('options', \Google\Protobuf\Internal\GPBType::MESSAGE, 4, 'google.protobuf.internal.MethodOptions') - ->optional('client_streaming', \Google\Protobuf\Internal\GPBType::BOOL, 5) - ->optional('server_streaming', \Google\Protobuf\Internal\GPBType::BOOL, 6) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.FileOptions', \Google\Protobuf\Internal\FileOptions::class) - ->optional('java_package', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->optional('java_outer_classname', \Google\Protobuf\Internal\GPBType::STRING, 8) - ->optional('java_multiple_files', \Google\Protobuf\Internal\GPBType::BOOL, 10) - ->optional('java_generate_equals_and_hash', \Google\Protobuf\Internal\GPBType::BOOL, 20) - ->optional('java_string_check_utf8', \Google\Protobuf\Internal\GPBType::BOOL, 27) - ->optional('optimize_for', \Google\Protobuf\Internal\GPBType::ENUM, 9, 'google.protobuf.internal.FileOptions.OptimizeMode') - ->optional('go_package', \Google\Protobuf\Internal\GPBType::STRING, 11) - ->optional('cc_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 16) - ->optional('java_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 17) - ->optional('py_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 18) - ->optional('php_generic_services', \Google\Protobuf\Internal\GPBType::BOOL, 42) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 23) - ->optional('cc_enable_arenas', \Google\Protobuf\Internal\GPBType::BOOL, 31) - ->optional('objc_class_prefix', \Google\Protobuf\Internal\GPBType::STRING, 36) - ->optional('csharp_namespace', \Google\Protobuf\Internal\GPBType::STRING, 37) - ->optional('swift_prefix', \Google\Protobuf\Internal\GPBType::STRING, 39) - ->optional('php_class_prefix', \Google\Protobuf\Internal\GPBType::STRING, 40) - ->optional('php_namespace', \Google\Protobuf\Internal\GPBType::STRING, 41) - ->optional('php_metadata_namespace', \Google\Protobuf\Internal\GPBType::STRING, 44) - ->optional('ruby_package', \Google\Protobuf\Internal\GPBType::STRING, 45) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.FileOptions.OptimizeMode', \Google\Protobuf\Internal\OptimizeMode::class) - ->value("SPEED", 1) - ->value("CODE_SIZE", 2) - ->value("LITE_RUNTIME", 3) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.MessageOptions', \Google\Protobuf\Internal\MessageOptions::class) - ->optional('message_set_wire_format', \Google\Protobuf\Internal\GPBType::BOOL, 1) - ->optional('no_standard_descriptor_accessor', \Google\Protobuf\Internal\GPBType::BOOL, 2) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) - ->optional('map_entry', \Google\Protobuf\Internal\GPBType::BOOL, 7) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.FieldOptions', \Google\Protobuf\Internal\FieldOptions::class) - ->optional('ctype', \Google\Protobuf\Internal\GPBType::ENUM, 1, 'google.protobuf.internal.FieldOptions.CType') - ->optional('packed', \Google\Protobuf\Internal\GPBType::BOOL, 2) - ->optional('jstype', \Google\Protobuf\Internal\GPBType::ENUM, 6, 'google.protobuf.internal.FieldOptions.JSType') - ->optional('lazy', \Google\Protobuf\Internal\GPBType::BOOL, 5) - ->optional('unverified_lazy', \Google\Protobuf\Internal\GPBType::BOOL, 15) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) - ->optional('weak', \Google\Protobuf\Internal\GPBType::BOOL, 10) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.FieldOptions.CType', \Google\Protobuf\Internal\CType::class) - ->value("STRING", 0) - ->value("CORD", 1) - ->value("STRING_PIECE", 2) - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.FieldOptions.JSType', \Google\Protobuf\Internal\JSType::class) - ->value("JS_NORMAL", 0) - ->value("JS_STRING", 1) - ->value("JS_NUMBER", 2) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.OneofOptions', \Google\Protobuf\Internal\OneofOptions::class) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.EnumOptions', \Google\Protobuf\Internal\EnumOptions::class) - ->optional('allow_alias', \Google\Protobuf\Internal\GPBType::BOOL, 2) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 3) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.EnumValueOptions', \Google\Protobuf\Internal\EnumValueOptions::class) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 1) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.ServiceOptions', \Google\Protobuf\Internal\ServiceOptions::class) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 33) - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.MethodOptions', \Google\Protobuf\Internal\MethodOptions::class) - ->optional('deprecated', \Google\Protobuf\Internal\GPBType::BOOL, 33) - ->optional('idempotency_level', \Google\Protobuf\Internal\GPBType::ENUM, 34, 'google.protobuf.internal.MethodOptions.IdempotencyLevel') - ->repeated('uninterpreted_option', \Google\Protobuf\Internal\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption') - ->finalizeToPool(); - - $pool->addEnum('google.protobuf.internal.MethodOptions.IdempotencyLevel', \Google\Protobuf\Internal\IdempotencyLevel::class) - ->value("IDEMPOTENCY_UNKNOWN", 0) - ->value("NO_SIDE_EFFECTS", 1) - ->value("IDEMPOTENT", 2) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.UninterpretedOption', \Google\Protobuf\Internal\UninterpretedOption::class) - ->repeated('name', \Google\Protobuf\Internal\GPBType::MESSAGE, 2, 'google.protobuf.internal.UninterpretedOption.NamePart') - ->optional('identifier_value', \Google\Protobuf\Internal\GPBType::STRING, 3) - ->optional('positive_int_value', \Google\Protobuf\Internal\GPBType::UINT64, 4) - ->optional('negative_int_value', \Google\Protobuf\Internal\GPBType::INT64, 5) - ->optional('double_value', \Google\Protobuf\Internal\GPBType::DOUBLE, 6) - ->optional('string_value', \Google\Protobuf\Internal\GPBType::BYTES, 7) - ->optional('aggregate_value', \Google\Protobuf\Internal\GPBType::STRING, 8) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.UninterpretedOption.NamePart', \Google\Protobuf\Internal\UninterpretedOption\NamePart::class) - ->required('name_part', \Google\Protobuf\Internal\GPBType::STRING, 1) - ->required('is_extension', \Google\Protobuf\Internal\GPBType::BOOL, 2) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.SourceCodeInfo', \Google\Protobuf\Internal\SourceCodeInfo::class) - ->repeated('location', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.SourceCodeInfo.Location') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.SourceCodeInfo.Location', \Google\Protobuf\Internal\SourceCodeInfo\Location::class) - ->repeated('path', \Google\Protobuf\Internal\GPBType::INT32, 1) - ->repeated('span', \Google\Protobuf\Internal\GPBType::INT32, 2) - ->optional('leading_comments', \Google\Protobuf\Internal\GPBType::STRING, 3) - ->optional('trailing_comments', \Google\Protobuf\Internal\GPBType::STRING, 4) - ->repeated('leading_detached_comments', \Google\Protobuf\Internal\GPBType::STRING, 6) - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo', \Google\Protobuf\Internal\GeneratedCodeInfo::class) - ->repeated('annotation', \Google\Protobuf\Internal\GPBType::MESSAGE, 1, 'google.protobuf.internal.GeneratedCodeInfo.Annotation') - ->finalizeToPool(); - - $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo.Annotation', \Google\Protobuf\Internal\GeneratedCodeInfo\Annotation::class) - ->repeated('path', \Google\Protobuf\Internal\GPBType::INT32, 1) - ->optional('source_file', \Google\Protobuf\Internal\GPBType::STRING, 2) - ->optional('begin', \Google\Protobuf\Internal\GPBType::INT32, 3) - ->optional('end', \Google\Protobuf\Internal\GPBType::INT32, 4) - ->finalizeToPool(); - - $pool->finish(); - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php deleted file mode 100644 index 797732d..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php +++ /dev/null @@ -1,29 +0,0 @@ -internalAddGeneratedFile( - ' - -$google/protobuf/source_context.protogoogle.protobuf"" - SourceContext - file_name ( B -com.google.protobufBSourceContextProtoPZ6google.golang.org/protobuf/types/known/sourcecontextpbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php deleted file mode 100644 index 888a81adee4075a2c04ab9805212f7c132174f4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1162 zcmaJ=(M}UV6lGgzQ;!NdTewO7|)&oBt2tsL<2@T zz1BNs=#UyZ=vd95mo`JqCO{x)9FzA}3txfYCrW(50}>l*@N1RF$6Rv5so-DG?-m(R z5i^udaz}{_3|Eq*f&&?_+B(Tl^zZ{scC-*sSNFu~>rc4XX zHd!%tqM$^ayeYyfY}0eA4A1n^GxQ(&A>a|tP%-T@(oR9VVJwqj^3_Yd8e;GC7h{g3&sXog* zuaW=TaekD_n9`r62OXPF?;@Yx2PVYZl-*B-e#M4+W3AZ7r`eicO2xH_u*_`v&*2>4 EFWv=fg#Z8m diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php deleted file mode 100644 index 0943727..0000000 --- a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php +++ /dev/null @@ -1,30 +0,0 @@ -internalAddGeneratedFile( - ' - -google/protobuf/timestamp.protogoogle.protobuf"+ - Timestamp -seconds ( -nanos (B -com.google.protobufBTimestampProtoPZ2google.golang.org/protobuf/types/known/timestamppbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php b/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php deleted file mode 100644 index 7d0bfbb533a2af7e63c43fd4b02e5bf41c61ac3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2205 zcmb7FTTkOw5N@vE2?S%dU5iSq(<~}sRe}_%trSYDgqSD-;xuu(%PLaj*e6*RV_UY< zlCJnEed%L=NuT;w^{@1?bB@<-+OO8cupGBp}rnclMJUMd`pSv zyP<2iHW^MvBkB{wz4k1d`Xxf@Dru=2QR+?Y3#10_#5ZV#j9qtZ(*sUK(m^=&Xo-IT zIQlgWJl&wA(XL(4P&f5Z?>9K3-)63maRgx4dJqr|neYw>{&|z3Z5bp8^$>q{tYBa{ zR%q$A^()4DOh&pLP$Vv6M-#^gE!QE8pgIOE?vcnQ!|r%4=5|aLW9T=Xkot~p_v|JQ${ zLj9^UtyJz4y5~R2>hcbqxR}~a_+dV;$NqQLUG`PejFUaZwin~@Sg^bB+Zt>?+;3?k z(na0J&Tj84f}^1s7*R|Su<%a;(yaH=8l>68$O)1t3euO59a+>i135`j#a#Kb(t`QY zDN{>%$hr=7M}eF|oFElp#r4<-1ag`apDqzqu9sdyem)>MgPwEcXG?^+QcC?@$Ocm< z)NkZ067uC`4_&S<{GEYJ6y+YIuPn#px#i2BFL~go(iuXeZy;yrzG>k&THzG4XD$j4 zFi!4~tP;-TdPse&M5369>zT$cK@wq=?dD+O+dOPR+JYRf94?nhZ{!tDLL<1bSJaeO z@q2Z)oWkSf+yvpLz;y<^hroS)3hO2v=@UB~{H)s(D(9HE@MjXzJXI0aw9B?K=(WyT z>Z_LciL?PZE~%@%+PNYoFe%`I({r_|iOKl8+0tHqEv8~ZFA}6@0f%KVgLy|jPMfcl zI#ROp62z=X>mYC^HB~(qS7V!9t=%~H62(g6=rQ5AG6fqYgYL}YQ71v@D zEG%@f9=lLly$dlfZNfVD*yUj%Vq-ysk&3aEZe(S1PJjrh5JGNt1fIgyNwrgNwyNh% z?Q*8BGCY}8sBNvOA_xn-py?<-^qL)|j-_7Gw3VucnpEL0Tv-KYEgrFGW%og#D2-Yj zZSD5b+%n#eY#3%oi>+?%1AFw~rm~s-Uz^HS`;krUf^Z+${6loVR%{hBA0Kw%2(otx z%v*d8nfEnfSv*;)5kB}YN|23S5jGgz%a&GsJ!p4SO)cY^EQk)pMC~1H;k8~gRTJ3L z%5QBu@n-+-2_3t(?u<*WKb}9_!NHZ|{^IZ>?hXGinternalAddGeneratedFile( - ' - -google/protobuf/wrappers.protogoogle.protobuf" - DoubleValue -value (" - -FloatValue -value (" - -Int64Value -value (" - UInt64Value -value (" - -Int32Value -value (" - UInt32Value -value ( " - BoolValue -value (" - StringValue -value ( " - -BytesValue -value ( B -com.google.protobufB WrappersProtoPZ1google.golang.org/protobuf/types/known/wrapperspbGPBGoogle.Protobuf.WellKnownTypesbproto3' - , true); - - static::$is_initialized = true; - } -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Any.php b/vendor/google/protobuf/src/Google/Protobuf/Any.php deleted file mode 100644 index cc64bad..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Any.php +++ /dev/null @@ -1,253 +0,0 @@ -, - * "lastName": - * } - * If the embedded message type is well-known and has a custom JSON - * representation, that representation will be embedded adding a field - * `value` which holds the custom JSON in addition to the `@type` - * field. Example (for message [google.protobuf.Duration][]): - * { - * "@type": "type.googleapis.com/google.protobuf.Duration", - * "value": "1.212s" - * } - * - * Generated from protobuf message google.protobuf.Any - */ -class Any extends \Google\Protobuf\Internal\AnyBase -{ - /** - * A URL/resource name that uniquely identifies the type of the serialized - * protocol buffer message. This string must contain at least - * one "/" character. The last segment of the URL's path must represent - * the fully qualified name of the type (as in - * `path/google.protobuf.Duration`). The name should be in a canonical form - * (e.g., leading "." is not accepted). - * In practice, teams usually precompile into the binary all types that they - * expect it to use in the context of Any. However, for URLs which use the - * scheme `http`, `https`, or no scheme, one can optionally set up a type - * server that maps type URLs to message definitions as follows: - * * If no scheme is provided, `https` is assumed. - * * An HTTP GET on the URL must yield a [google.protobuf.Type][] - * value in binary format, or produce an error. - * * Applications are allowed to cache lookup results based on the - * URL, or have them precompiled into a binary to avoid any - * lookup. Therefore, binary compatibility needs to be preserved - * on changes to types. (Use versioned type names to manage - * breaking changes.) - * Note: this functionality is not currently available in the official - * protobuf release, and it is not used for type URLs beginning with - * type.googleapis.com. - * Schemes other than `http`, `https` (or the empty scheme) might be - * used with implementation specific semantics. - * - * Generated from protobuf field string type_url = 1; - */ - protected $type_url = ''; - /** - * Must be a valid serialized protocol buffer of the above specified type. - * - * Generated from protobuf field bytes value = 2; - */ - protected $value = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $type_url - * A URL/resource name that uniquely identifies the type of the serialized - * protocol buffer message. This string must contain at least - * one "/" character. The last segment of the URL's path must represent - * the fully qualified name of the type (as in - * `path/google.protobuf.Duration`). The name should be in a canonical form - * (e.g., leading "." is not accepted). - * In practice, teams usually precompile into the binary all types that they - * expect it to use in the context of Any. However, for URLs which use the - * scheme `http`, `https`, or no scheme, one can optionally set up a type - * server that maps type URLs to message definitions as follows: - * * If no scheme is provided, `https` is assumed. - * * An HTTP GET on the URL must yield a [google.protobuf.Type][] - * value in binary format, or produce an error. - * * Applications are allowed to cache lookup results based on the - * URL, or have them precompiled into a binary to avoid any - * lookup. Therefore, binary compatibility needs to be preserved - * on changes to types. (Use versioned type names to manage - * breaking changes.) - * Note: this functionality is not currently available in the official - * protobuf release, and it is not used for type URLs beginning with - * type.googleapis.com. - * Schemes other than `http`, `https` (or the empty scheme) might be - * used with implementation specific semantics. - * @type string $value - * Must be a valid serialized protocol buffer of the above specified type. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Any::initOnce(); - parent::__construct($data); - } - - /** - * A URL/resource name that uniquely identifies the type of the serialized - * protocol buffer message. This string must contain at least - * one "/" character. The last segment of the URL's path must represent - * the fully qualified name of the type (as in - * `path/google.protobuf.Duration`). The name should be in a canonical form - * (e.g., leading "." is not accepted). - * In practice, teams usually precompile into the binary all types that they - * expect it to use in the context of Any. However, for URLs which use the - * scheme `http`, `https`, or no scheme, one can optionally set up a type - * server that maps type URLs to message definitions as follows: - * * If no scheme is provided, `https` is assumed. - * * An HTTP GET on the URL must yield a [google.protobuf.Type][] - * value in binary format, or produce an error. - * * Applications are allowed to cache lookup results based on the - * URL, or have them precompiled into a binary to avoid any - * lookup. Therefore, binary compatibility needs to be preserved - * on changes to types. (Use versioned type names to manage - * breaking changes.) - * Note: this functionality is not currently available in the official - * protobuf release, and it is not used for type URLs beginning with - * type.googleapis.com. - * Schemes other than `http`, `https` (or the empty scheme) might be - * used with implementation specific semantics. - * - * Generated from protobuf field string type_url = 1; - * @return string - */ - public function getTypeUrl() - { - return $this->type_url; - } - - /** - * A URL/resource name that uniquely identifies the type of the serialized - * protocol buffer message. This string must contain at least - * one "/" character. The last segment of the URL's path must represent - * the fully qualified name of the type (as in - * `path/google.protobuf.Duration`). The name should be in a canonical form - * (e.g., leading "." is not accepted). - * In practice, teams usually precompile into the binary all types that they - * expect it to use in the context of Any. However, for URLs which use the - * scheme `http`, `https`, or no scheme, one can optionally set up a type - * server that maps type URLs to message definitions as follows: - * * If no scheme is provided, `https` is assumed. - * * An HTTP GET on the URL must yield a [google.protobuf.Type][] - * value in binary format, or produce an error. - * * Applications are allowed to cache lookup results based on the - * URL, or have them precompiled into a binary to avoid any - * lookup. Therefore, binary compatibility needs to be preserved - * on changes to types. (Use versioned type names to manage - * breaking changes.) - * Note: this functionality is not currently available in the official - * protobuf release, and it is not used for type URLs beginning with - * type.googleapis.com. - * Schemes other than `http`, `https` (or the empty scheme) might be - * used with implementation specific semantics. - * - * Generated from protobuf field string type_url = 1; - * @param string $var - * @return $this - */ - public function setTypeUrl($var) - { - GPBUtil::checkString($var, True); - $this->type_url = $var; - - return $this; - } - - /** - * Must be a valid serialized protocol buffer of the above specified type. - * - * Generated from protobuf field bytes value = 2; - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * Must be a valid serialized protocol buffer of the above specified type. - * - * Generated from protobuf field bytes value = 2; - * @param string $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkString($var, False); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Api.php b/vendor/google/protobuf/src/Google/Protobuf/Api.php deleted file mode 100644 index 3784263..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Api.php +++ /dev/null @@ -1,360 +0,0 @@ -google.protobuf.Api - */ -class Api extends \Google\Protobuf\Internal\Message -{ - /** - * The fully qualified name of this interface, including package name - * followed by the interface's simple name. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * The methods of this interface, in unspecified order. - * - * Generated from protobuf field repeated .google.protobuf.Method methods = 2; - */ - private $methods; - /** - * Any metadata attached to the interface. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - */ - private $options; - /** - * A version string for this interface. If specified, must have the form - * `major-version.minor-version`, as in `1.10`. If the minor version is - * omitted, it defaults to zero. If the entire version field is empty, the - * major version is derived from the package name, as outlined below. If the - * field is not empty, the version in the package name will be verified to be - * consistent with what is provided here. - * The versioning schema uses [semantic - * versioning](http://semver.org) where the major version number - * indicates a breaking change and the minor version an additive, - * non-breaking change. Both version numbers are signals to users - * what to expect from different versions, and should be carefully - * chosen based on the product plan. - * The major version is also reflected in the package name of the - * interface, which must end in `v`, as in - * `google.feature.v1`. For major versions 0 and 1, the suffix can - * be omitted. Zero major versions must only be used for - * experimental, non-GA interfaces. - * - * Generated from protobuf field string version = 4; - */ - protected $version = ''; - /** - * Source context for the protocol buffer service represented by this - * message. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - */ - protected $source_context = null; - /** - * Included interfaces. See [Mixin][]. - * - * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; - */ - private $mixins; - /** - * The source syntax of the service. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - */ - protected $syntax = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * The fully qualified name of this interface, including package name - * followed by the interface's simple name. - * @type array<\Google\Protobuf\Method>|\Google\Protobuf\Internal\RepeatedField $methods - * The methods of this interface, in unspecified order. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * Any metadata attached to the interface. - * @type string $version - * A version string for this interface. If specified, must have the form - * `major-version.minor-version`, as in `1.10`. If the minor version is - * omitted, it defaults to zero. If the entire version field is empty, the - * major version is derived from the package name, as outlined below. If the - * field is not empty, the version in the package name will be verified to be - * consistent with what is provided here. - * The versioning schema uses [semantic - * versioning](http://semver.org) where the major version number - * indicates a breaking change and the minor version an additive, - * non-breaking change. Both version numbers are signals to users - * what to expect from different versions, and should be carefully - * chosen based on the product plan. - * The major version is also reflected in the package name of the - * interface, which must end in `v`, as in - * `google.feature.v1`. For major versions 0 and 1, the suffix can - * be omitted. Zero major versions must only be used for - * experimental, non-GA interfaces. - * @type \Google\Protobuf\SourceContext $source_context - * Source context for the protocol buffer service represented by this - * message. - * @type array<\Google\Protobuf\Mixin>|\Google\Protobuf\Internal\RepeatedField $mixins - * Included interfaces. See [Mixin][]. - * @type int $syntax - * The source syntax of the service. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Api::initOnce(); - parent::__construct($data); - } - - /** - * The fully qualified name of this interface, including package name - * followed by the interface's simple name. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The fully qualified name of this interface, including package name - * followed by the interface's simple name. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * The methods of this interface, in unspecified order. - * - * Generated from protobuf field repeated .google.protobuf.Method methods = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getMethods() - { - return $this->methods; - } - - /** - * The methods of this interface, in unspecified order. - * - * Generated from protobuf field repeated .google.protobuf.Method methods = 2; - * @param array<\Google\Protobuf\Method>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setMethods($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Method::class); - $this->methods = $arr; - - return $this; - } - - /** - * Any metadata attached to the interface. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * Any metadata attached to the interface. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - - /** - * A version string for this interface. If specified, must have the form - * `major-version.minor-version`, as in `1.10`. If the minor version is - * omitted, it defaults to zero. If the entire version field is empty, the - * major version is derived from the package name, as outlined below. If the - * field is not empty, the version in the package name will be verified to be - * consistent with what is provided here. - * The versioning schema uses [semantic - * versioning](http://semver.org) where the major version number - * indicates a breaking change and the minor version an additive, - * non-breaking change. Both version numbers are signals to users - * what to expect from different versions, and should be carefully - * chosen based on the product plan. - * The major version is also reflected in the package name of the - * interface, which must end in `v`, as in - * `google.feature.v1`. For major versions 0 and 1, the suffix can - * be omitted. Zero major versions must only be used for - * experimental, non-GA interfaces. - * - * Generated from protobuf field string version = 4; - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * A version string for this interface. If specified, must have the form - * `major-version.minor-version`, as in `1.10`. If the minor version is - * omitted, it defaults to zero. If the entire version field is empty, the - * major version is derived from the package name, as outlined below. If the - * field is not empty, the version in the package name will be verified to be - * consistent with what is provided here. - * The versioning schema uses [semantic - * versioning](http://semver.org) where the major version number - * indicates a breaking change and the minor version an additive, - * non-breaking change. Both version numbers are signals to users - * what to expect from different versions, and should be carefully - * chosen based on the product plan. - * The major version is also reflected in the package name of the - * interface, which must end in `v`, as in - * `google.feature.v1`. For major versions 0 and 1, the suffix can - * be omitted. Zero major versions must only be used for - * experimental, non-GA interfaces. - * - * Generated from protobuf field string version = 4; - * @param string $var - * @return $this - */ - public function setVersion($var) - { - GPBUtil::checkString($var, True); - $this->version = $var; - - return $this; - } - - /** - * Source context for the protocol buffer service represented by this - * message. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - * @return \Google\Protobuf\SourceContext|null - */ - public function getSourceContext() - { - return $this->source_context; - } - - public function hasSourceContext() - { - return isset($this->source_context); - } - - public function clearSourceContext() - { - unset($this->source_context); - } - - /** - * Source context for the protocol buffer service represented by this - * message. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - * @param \Google\Protobuf\SourceContext $var - * @return $this - */ - public function setSourceContext($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); - $this->source_context = $var; - - return $this; - } - - /** - * Included interfaces. See [Mixin][]. - * - * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getMixins() - { - return $this->mixins; - } - - /** - * Included interfaces. See [Mixin][]. - * - * Generated from protobuf field repeated .google.protobuf.Mixin mixins = 6; - * @param array<\Google\Protobuf\Mixin>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setMixins($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Mixin::class); - $this->mixins = $arr; - - return $this; - } - - /** - * The source syntax of the service. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - * @return int - */ - public function getSyntax() - { - return $this->syntax; - } - - /** - * The source syntax of the service. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - * @param int $var - * @return $this - */ - public function setSyntax($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); - $this->syntax = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php b/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php deleted file mode 100644 index ecdbf4d..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.BoolValue - */ -class BoolValue extends \Google\Protobuf\Internal\Message -{ - /** - * The bool value. - * - * Generated from protobuf field bool value = 1; - */ - protected $value = false; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $value - * The bool value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The bool value. - * - * Generated from protobuf field bool value = 1; - * @return bool - */ - public function getValue() - { - return $this->value; - } - - /** - * The bool value. - * - * Generated from protobuf field bool value = 1; - * @param bool $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkBool($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php b/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php deleted file mode 100644 index 1582e14..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.BytesValue - */ -class BytesValue extends \Google\Protobuf\Internal\Message -{ - /** - * The bytes value. - * - * Generated from protobuf field bytes value = 1; - */ - protected $value = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $value - * The bytes value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The bytes value. - * - * Generated from protobuf field bytes value = 1; - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * The bytes value. - * - * Generated from protobuf field bytes value = 1; - * @param string $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkString($var, False); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php deleted file mode 100644 index 36436e2..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php +++ /dev/null @@ -1,108 +0,0 @@ -internal_desc = $internal_desc; - } - - /** - * @return string Full protobuf message name - */ - public function getFullName() - { - return trim($this->internal_desc->getFullName(), "."); - } - - /** - * @return string PHP class name - */ - public function getClass() - { - return $this->internal_desc->getClass(); - } - - /** - * @param int $index Must be >= 0 and < getFieldCount() - * @return FieldDescriptor - */ - public function getField($index) - { - return $this->getPublicDescriptor($this->internal_desc->getFieldByIndex($index)); - } - - /** - * @return int Number of fields in message - */ - public function getFieldCount() - { - return count($this->internal_desc->getField()); - } - - /** - * @param int $index Must be >= 0 and < getOneofDeclCount() - * @return OneofDescriptor - */ - public function getOneofDecl($index) - { - return $this->getPublicDescriptor($this->internal_desc->getOneofDecl()[$index]); - } - - /** - * @return int Number of oneofs in message - */ - public function getOneofDeclCount() - { - return count($this->internal_desc->getOneofDecl()); - } - - /** - * @return int Number of real oneofs in message - */ - public function getRealOneofDeclCount() - { - return $this->internal_desc->getRealOneofDeclCount(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php b/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php deleted file mode 100644 index 119f0e2..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php +++ /dev/null @@ -1,76 +0,0 @@ -internal_pool = $internal_pool; - } - - /** - * @param string $className A fully qualified protobuf class name - * @return Descriptor - */ - public function getDescriptorByClassName($className) - { - $desc = $this->internal_pool->getDescriptorByClassName($className); - return is_null($desc) ? null : $desc->getPublicDescriptor(); - } - - /** - * @param string $className A fully qualified protobuf class name - * @return EnumDescriptor - */ - public function getEnumDescriptorByClassName($className) - { - $desc = $this->internal_pool->getEnumDescriptorByClassName($className); - return is_null($desc) ? null : $desc->getPublicDescriptor(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php b/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php deleted file mode 100644 index b72399f..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.DoubleValue - */ -class DoubleValue extends \Google\Protobuf\Internal\Message -{ - /** - * The double value. - * - * Generated from protobuf field double value = 1; - */ - protected $value = 0.0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type float $value - * The double value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The double value. - * - * Generated from protobuf field double value = 1; - * @return float - */ - public function getValue() - { - return $this->value; - } - - /** - * The double value. - * - * Generated from protobuf field double value = 1; - * @param float $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkDouble($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Duration.php b/vendor/google/protobuf/src/Google/Protobuf/Duration.php deleted file mode 100644 index 531cd50..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Duration.php +++ /dev/null @@ -1,173 +0,0 @@ - 0) { - * duration.seconds += 1; - * duration.nanos -= 1000000000; - * } else if (duration.seconds > 0 && duration.nanos < 0) { - * duration.seconds -= 1; - * duration.nanos += 1000000000; - * } - * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. - * Timestamp start = ...; - * Duration duration = ...; - * Timestamp end = ...; - * end.seconds = start.seconds + duration.seconds; - * end.nanos = start.nanos + duration.nanos; - * if (end.nanos < 0) { - * end.seconds -= 1; - * end.nanos += 1000000000; - * } else if (end.nanos >= 1000000000) { - * end.seconds += 1; - * end.nanos -= 1000000000; - * } - * Example 3: Compute Duration from datetime.timedelta in Python. - * td = datetime.timedelta(days=3, minutes=10) - * duration = Duration() - * duration.FromTimedelta(td) - * # JSON Mapping - * In JSON format, the Duration type is encoded as a string rather than an - * object, where the string ends in the suffix "s" (indicating seconds) and - * is preceded by the number of seconds, with nanoseconds expressed as - * fractional seconds. For example, 3 seconds with 0 nanoseconds should be - * encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should - * be expressed in JSON format as "3.000000001s", and 3 seconds and 1 - * microsecond should be expressed in JSON format as "3.000001s". - * - * Generated from protobuf message google.protobuf.Duration - */ -class Duration extends \Google\Protobuf\Internal\Message -{ - /** - * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. Note: these bounds are computed from: - * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - * - * Generated from protobuf field int64 seconds = 1; - */ - protected $seconds = 0; - /** - * Signed fractions of a second at nanosecond resolution of the span - * of time. Durations less than one second are represented with a 0 - * `seconds` field and a positive or negative `nanos` field. For durations - * of one second or more, a non-zero value for the `nanos` field must be - * of the same sign as the `seconds` field. Must be from -999,999,999 - * to +999,999,999 inclusive. - * - * Generated from protobuf field int32 nanos = 2; - */ - protected $nanos = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. Note: these bounds are computed from: - * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - * @type int $nanos - * Signed fractions of a second at nanosecond resolution of the span - * of time. Durations less than one second are represented with a 0 - * `seconds` field and a positive or negative `nanos` field. For durations - * of one second or more, a non-zero value for the `nanos` field must be - * of the same sign as the `seconds` field. Must be from -999,999,999 - * to +999,999,999 inclusive. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Duration::initOnce(); - parent::__construct($data); - } - - /** - * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. Note: these bounds are computed from: - * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Signed seconds of the span of time. Must be from -315,576,000,000 - * to +315,576,000,000 inclusive. Note: these bounds are computed from: - * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - - /** - * Signed fractions of a second at nanosecond resolution of the span - * of time. Durations less than one second are represented with a 0 - * `seconds` field and a positive or negative `nanos` field. For durations - * of one second or more, a non-zero value for the `nanos` field must be - * of the same sign as the `seconds` field. Must be from -999,999,999 - * to +999,999,999 inclusive. - * - * Generated from protobuf field int32 nanos = 2; - * @return int - */ - public function getNanos() - { - return $this->nanos; - } - - /** - * Signed fractions of a second at nanosecond resolution of the span - * of time. Durations less than one second are represented with a 0 - * `seconds` field and a positive or negative `nanos` field. For durations - * of one second or more, a non-zero value for the `nanos` field must be - * of the same sign as the `seconds` field. Must be from -999,999,999 - * to +999,999,999 inclusive. - * - * Generated from protobuf field int32 nanos = 2; - * @param int $var - * @return $this - */ - public function setNanos($var) - { - GPBUtil::checkInt32($var); - $this->nanos = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Enum.php b/vendor/google/protobuf/src/Google/Protobuf/Enum.php deleted file mode 100644 index 185e54e..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Enum.php +++ /dev/null @@ -1,213 +0,0 @@ -google.protobuf.Enum - */ -class Enum extends \Google\Protobuf\Internal\Message -{ - /** - * Enum type name. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * Enum value definitions. - * - * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; - */ - private $enumvalue; - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - */ - private $options; - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; - */ - protected $source_context = null; - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 5; - */ - protected $syntax = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * Enum type name. - * @type array<\Google\Protobuf\EnumValue>|\Google\Protobuf\Internal\RepeatedField $enumvalue - * Enum value definitions. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * Protocol buffer options. - * @type \Google\Protobuf\SourceContext $source_context - * The source context. - * @type int $syntax - * The source syntax. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Type::initOnce(); - parent::__construct($data); - } - - /** - * Enum type name. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Enum type name. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Enum value definitions. - * - * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getEnumvalue() - { - return $this->enumvalue; - } - - /** - * Enum value definitions. - * - * Generated from protobuf field repeated .google.protobuf.EnumValue enumvalue = 2; - * @param array<\Google\Protobuf\EnumValue>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setEnumvalue($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\EnumValue::class); - $this->enumvalue = $arr; - - return $this; - } - - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; - * @return \Google\Protobuf\SourceContext|null - */ - public function getSourceContext() - { - return $this->source_context; - } - - public function hasSourceContext() - { - return isset($this->source_context); - } - - public function clearSourceContext() - { - unset($this->source_context); - } - - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 4; - * @param \Google\Protobuf\SourceContext $var - * @return $this - */ - public function setSourceContext($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); - $this->source_context = $var; - - return $this; - } - - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 5; - * @return int - */ - public function getSyntax() - { - return $this->syntax; - } - - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 5; - * @param int $var - * @return $this - */ - public function setSyntax($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); - $this->syntax = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php deleted file mode 100644 index a8b56c0..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php +++ /dev/null @@ -1,79 +0,0 @@ -internal_desc = $internal_desc; - } - - /** - * @return string Full protobuf message name - */ - public function getFullName() - { - return $this->internal_desc->getFullName(); - } - - /** - * @return string PHP class name - */ - public function getClass() - { - return $this->internal_desc->getClass(); - } - - /** - * @param int $index Must be >= 0 and < getValueCount() - * @return EnumValueDescriptor - */ - public function getValue($index) - { - return $this->internal_desc->getValueDescriptorByIndex($index); - } - - /** - * @return int Number of values in enum - */ - public function getValueCount() - { - return $this->internal_desc->getValueCount(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php b/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php deleted file mode 100644 index 93c20f9..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php +++ /dev/null @@ -1,135 +0,0 @@ -google.protobuf.EnumValue - */ -class EnumValue extends \Google\Protobuf\Internal\Message -{ - /** - * Enum value name. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * Enum value number. - * - * Generated from protobuf field int32 number = 2; - */ - protected $number = 0; - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - */ - private $options; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * Enum value name. - * @type int $number - * Enum value number. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * Protocol buffer options. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Type::initOnce(); - parent::__construct($data); - } - - /** - * Enum value name. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Enum value name. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Enum value number. - * - * Generated from protobuf field int32 number = 2; - * @return int - */ - public function getNumber() - { - return $this->number; - } - - /** - * Enum value number. - * - * Generated from protobuf field int32 number = 2; - * @param int $var - * @return $this - */ - public function setNumber($var) - { - GPBUtil::checkInt32($var); - $this->number = $var; - - return $this; - } - - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * Protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 3; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php deleted file mode 100644 index e76e199..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php +++ /dev/null @@ -1,64 +0,0 @@ -name = $name; - $this->number = $number; - } - - /** - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * @return int - */ - public function getNumber() - { - return $this->number; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field.php b/vendor/google/protobuf/src/Google/Protobuf/Field.php deleted file mode 100644 index ddae570..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Field.php +++ /dev/null @@ -1,381 +0,0 @@ -google.protobuf.Field - */ -class Field extends \Google\Protobuf\Internal\Message -{ - /** - * The field type. - * - * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; - */ - protected $kind = 0; - /** - * The field cardinality. - * - * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; - */ - protected $cardinality = 0; - /** - * The field number. - * - * Generated from protobuf field int32 number = 3; - */ - protected $number = 0; - /** - * The field name. - * - * Generated from protobuf field string name = 4; - */ - protected $name = ''; - /** - * The field type URL, without the scheme, for message or enumeration - * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - * - * Generated from protobuf field string type_url = 6; - */ - protected $type_url = ''; - /** - * The index of the field type in `Type.oneofs`, for message or enumeration - * types. The first type has index 1; zero means the type is not in the list. - * - * Generated from protobuf field int32 oneof_index = 7; - */ - protected $oneof_index = 0; - /** - * Whether to use alternative packed wire representation. - * - * Generated from protobuf field bool packed = 8; - */ - protected $packed = false; - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 9; - */ - private $options; - /** - * The field JSON name. - * - * Generated from protobuf field string json_name = 10; - */ - protected $json_name = ''; - /** - * The string value of the default value of this field. Proto2 syntax only. - * - * Generated from protobuf field string default_value = 11; - */ - protected $default_value = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $kind - * The field type. - * @type int $cardinality - * The field cardinality. - * @type int $number - * The field number. - * @type string $name - * The field name. - * @type string $type_url - * The field type URL, without the scheme, for message or enumeration - * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - * @type int $oneof_index - * The index of the field type in `Type.oneofs`, for message or enumeration - * types. The first type has index 1; zero means the type is not in the list. - * @type bool $packed - * Whether to use alternative packed wire representation. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * The protocol buffer options. - * @type string $json_name - * The field JSON name. - * @type string $default_value - * The string value of the default value of this field. Proto2 syntax only. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Type::initOnce(); - parent::__construct($data); - } - - /** - * The field type. - * - * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; - * @return int - */ - public function getKind() - { - return $this->kind; - } - - /** - * The field type. - * - * Generated from protobuf field .google.protobuf.Field.Kind kind = 1; - * @param int $var - * @return $this - */ - public function setKind($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Field\Kind::class); - $this->kind = $var; - - return $this; - } - - /** - * The field cardinality. - * - * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; - * @return int - */ - public function getCardinality() - { - return $this->cardinality; - } - - /** - * The field cardinality. - * - * Generated from protobuf field .google.protobuf.Field.Cardinality cardinality = 2; - * @param int $var - * @return $this - */ - public function setCardinality($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Field\Cardinality::class); - $this->cardinality = $var; - - return $this; - } - - /** - * The field number. - * - * Generated from protobuf field int32 number = 3; - * @return int - */ - public function getNumber() - { - return $this->number; - } - - /** - * The field number. - * - * Generated from protobuf field int32 number = 3; - * @param int $var - * @return $this - */ - public function setNumber($var) - { - GPBUtil::checkInt32($var); - $this->number = $var; - - return $this; - } - - /** - * The field name. - * - * Generated from protobuf field string name = 4; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The field name. - * - * Generated from protobuf field string name = 4; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * The field type URL, without the scheme, for message or enumeration - * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - * - * Generated from protobuf field string type_url = 6; - * @return string - */ - public function getTypeUrl() - { - return $this->type_url; - } - - /** - * The field type URL, without the scheme, for message or enumeration - * types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. - * - * Generated from protobuf field string type_url = 6; - * @param string $var - * @return $this - */ - public function setTypeUrl($var) - { - GPBUtil::checkString($var, True); - $this->type_url = $var; - - return $this; - } - - /** - * The index of the field type in `Type.oneofs`, for message or enumeration - * types. The first type has index 1; zero means the type is not in the list. - * - * Generated from protobuf field int32 oneof_index = 7; - * @return int - */ - public function getOneofIndex() - { - return $this->oneof_index; - } - - /** - * The index of the field type in `Type.oneofs`, for message or enumeration - * types. The first type has index 1; zero means the type is not in the list. - * - * Generated from protobuf field int32 oneof_index = 7; - * @param int $var - * @return $this - */ - public function setOneofIndex($var) - { - GPBUtil::checkInt32($var); - $this->oneof_index = $var; - - return $this; - } - - /** - * Whether to use alternative packed wire representation. - * - * Generated from protobuf field bool packed = 8; - * @return bool - */ - public function getPacked() - { - return $this->packed; - } - - /** - * Whether to use alternative packed wire representation. - * - * Generated from protobuf field bool packed = 8; - * @param bool $var - * @return $this - */ - public function setPacked($var) - { - GPBUtil::checkBool($var); - $this->packed = $var; - - return $this; - } - - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 9; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 9; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - - /** - * The field JSON name. - * - * Generated from protobuf field string json_name = 10; - * @return string - */ - public function getJsonName() - { - return $this->json_name; - } - - /** - * The field JSON name. - * - * Generated from protobuf field string json_name = 10; - * @param string $var - * @return $this - */ - public function setJsonName($var) - { - GPBUtil::checkString($var, True); - $this->json_name = $var; - - return $this; - } - - /** - * The string value of the default value of this field. Proto2 syntax only. - * - * Generated from protobuf field string default_value = 11; - * @return string - */ - public function getDefaultValue() - { - return $this->default_value; - } - - /** - * The string value of the default value of this field. Proto2 syntax only. - * - * Generated from protobuf field string default_value = 11; - * @param string $var - * @return $this - */ - public function setDefaultValue($var) - { - GPBUtil::checkString($var, True); - $this->default_value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php b/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php deleted file mode 100644 index a422199..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php +++ /dev/null @@ -1,71 +0,0 @@ -google.protobuf.Field.Cardinality - */ -class Cardinality -{ - /** - * For fields with unknown cardinality. - * - * Generated from protobuf enum CARDINALITY_UNKNOWN = 0; - */ - const CARDINALITY_UNKNOWN = 0; - /** - * For optional fields. - * - * Generated from protobuf enum CARDINALITY_OPTIONAL = 1; - */ - const CARDINALITY_OPTIONAL = 1; - /** - * For required fields. Proto2 syntax only. - * - * Generated from protobuf enum CARDINALITY_REQUIRED = 2; - */ - const CARDINALITY_REQUIRED = 2; - /** - * For repeated fields. - * - * Generated from protobuf enum CARDINALITY_REPEATED = 3; - */ - const CARDINALITY_REPEATED = 3; - - private static $valueToName = [ - self::CARDINALITY_UNKNOWN => 'CARDINALITY_UNKNOWN', - self::CARDINALITY_OPTIONAL => 'CARDINALITY_OPTIONAL', - self::CARDINALITY_REQUIRED => 'CARDINALITY_REQUIRED', - self::CARDINALITY_REPEATED => 'CARDINALITY_REPEATED', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Cardinality::class, \Google\Protobuf\Field_Cardinality::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php b/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php deleted file mode 100644 index 2d8dd77..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php +++ /dev/null @@ -1,176 +0,0 @@ -google.protobuf.Field.Kind - */ -class Kind -{ - /** - * Field type unknown. - * - * Generated from protobuf enum TYPE_UNKNOWN = 0; - */ - const TYPE_UNKNOWN = 0; - /** - * Field type double. - * - * Generated from protobuf enum TYPE_DOUBLE = 1; - */ - const TYPE_DOUBLE = 1; - /** - * Field type float. - * - * Generated from protobuf enum TYPE_FLOAT = 2; - */ - const TYPE_FLOAT = 2; - /** - * Field type int64. - * - * Generated from protobuf enum TYPE_INT64 = 3; - */ - const TYPE_INT64 = 3; - /** - * Field type uint64. - * - * Generated from protobuf enum TYPE_UINT64 = 4; - */ - const TYPE_UINT64 = 4; - /** - * Field type int32. - * - * Generated from protobuf enum TYPE_INT32 = 5; - */ - const TYPE_INT32 = 5; - /** - * Field type fixed64. - * - * Generated from protobuf enum TYPE_FIXED64 = 6; - */ - const TYPE_FIXED64 = 6; - /** - * Field type fixed32. - * - * Generated from protobuf enum TYPE_FIXED32 = 7; - */ - const TYPE_FIXED32 = 7; - /** - * Field type bool. - * - * Generated from protobuf enum TYPE_BOOL = 8; - */ - const TYPE_BOOL = 8; - /** - * Field type string. - * - * Generated from protobuf enum TYPE_STRING = 9; - */ - const TYPE_STRING = 9; - /** - * Field type group. Proto2 syntax only, and deprecated. - * - * Generated from protobuf enum TYPE_GROUP = 10; - */ - const TYPE_GROUP = 10; - /** - * Field type message. - * - * Generated from protobuf enum TYPE_MESSAGE = 11; - */ - const TYPE_MESSAGE = 11; - /** - * Field type bytes. - * - * Generated from protobuf enum TYPE_BYTES = 12; - */ - const TYPE_BYTES = 12; - /** - * Field type uint32. - * - * Generated from protobuf enum TYPE_UINT32 = 13; - */ - const TYPE_UINT32 = 13; - /** - * Field type enum. - * - * Generated from protobuf enum TYPE_ENUM = 14; - */ - const TYPE_ENUM = 14; - /** - * Field type sfixed32. - * - * Generated from protobuf enum TYPE_SFIXED32 = 15; - */ - const TYPE_SFIXED32 = 15; - /** - * Field type sfixed64. - * - * Generated from protobuf enum TYPE_SFIXED64 = 16; - */ - const TYPE_SFIXED64 = 16; - /** - * Field type sint32. - * - * Generated from protobuf enum TYPE_SINT32 = 17; - */ - const TYPE_SINT32 = 17; - /** - * Field type sint64. - * - * Generated from protobuf enum TYPE_SINT64 = 18; - */ - const TYPE_SINT64 = 18; - - private static $valueToName = [ - self::TYPE_UNKNOWN => 'TYPE_UNKNOWN', - self::TYPE_DOUBLE => 'TYPE_DOUBLE', - self::TYPE_FLOAT => 'TYPE_FLOAT', - self::TYPE_INT64 => 'TYPE_INT64', - self::TYPE_UINT64 => 'TYPE_UINT64', - self::TYPE_INT32 => 'TYPE_INT32', - self::TYPE_FIXED64 => 'TYPE_FIXED64', - self::TYPE_FIXED32 => 'TYPE_FIXED32', - self::TYPE_BOOL => 'TYPE_BOOL', - self::TYPE_STRING => 'TYPE_STRING', - self::TYPE_GROUP => 'TYPE_GROUP', - self::TYPE_MESSAGE => 'TYPE_MESSAGE', - self::TYPE_BYTES => 'TYPE_BYTES', - self::TYPE_UINT32 => 'TYPE_UINT32', - self::TYPE_ENUM => 'TYPE_ENUM', - self::TYPE_SFIXED32 => 'TYPE_SFIXED32', - self::TYPE_SFIXED64 => 'TYPE_SFIXED64', - self::TYPE_SINT32 => 'TYPE_SINT32', - self::TYPE_SINT64 => 'TYPE_SINT64', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Kind::class, \Google\Protobuf\Field_Kind::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php deleted file mode 100644 index ac919a2..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php +++ /dev/null @@ -1,144 +0,0 @@ -internal_desc = $internal_desc; - } - - /** - * @return string Field name - */ - public function getName() - { - return $this->internal_desc->getName(); - } - - /** - * @return int Protobuf field number - */ - public function getNumber() - { - return $this->internal_desc->getNumber(); - } - - /** - * @return int - */ - public function getLabel() - { - return $this->internal_desc->getLabel(); - } - - /** - * @return int - */ - public function getType() - { - return $this->internal_desc->getType(); - } - - /** - * @return OneofDescriptor - */ - public function getContainingOneof() - { - return $this->getPublicDescriptor($this->internal_desc->getContainingOneof()); - } - - /** - * Gets the field's containing oneof, only if non-synthetic. - * - * @return null|OneofDescriptor - */ - public function getRealContainingOneof() - { - return $this->getPublicDescriptor($this->internal_desc->getRealContainingOneof()); - } - - /** - * @return boolean - */ - public function hasOptionalKeyword() - { - return $this->internal_desc->hasOptionalKeyword(); - } - - /** - * @return Descriptor Returns a descriptor for the field type if the field type is a message, otherwise throws \Exception - * @throws \Exception - */ - public function getMessageType() - { - if ($this->getType() == GPBType::MESSAGE) { - return $this->getPublicDescriptor($this->internal_desc->getMessageType()); - } else { - throw new \Exception("Cannot get message type for non-message field '" . $this->getName() . "'"); - } - } - - /** - * @return EnumDescriptor Returns an enum descriptor if the field type is an enum, otherwise throws \Exception - * @throws \Exception - */ - public function getEnumType() - { - if ($this->getType() == GPBType::ENUM) { - return $this->getPublicDescriptor($this->internal_desc->getEnumType()); - } else { - throw new \Exception("Cannot get enum type for non-enum field '" . $this->getName() . "'"); - } - } - - /** - * @return boolean - */ - public function isMap() - { - return $this->internal_desc->isMap(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php b/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php deleted file mode 100644 index a8e5243..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php +++ /dev/null @@ -1,217 +0,0 @@ -google.protobuf.FieldMask - */ -class FieldMask extends \Google\Protobuf\Internal\Message -{ - /** - * The set of field mask paths. - * - * Generated from protobuf field repeated string paths = 1; - */ - private $paths; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array|\Google\Protobuf\Internal\RepeatedField $paths - * The set of field mask paths. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\FieldMask::initOnce(); - parent::__construct($data); - } - - /** - * The set of field mask paths. - * - * Generated from protobuf field repeated string paths = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getPaths() - { - return $this->paths; - } - - /** - * The set of field mask paths. - * - * Generated from protobuf field repeated string paths = 1; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setPaths($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->paths = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php b/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php deleted file mode 100644 index dff8f89..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php +++ /dev/null @@ -1,16 +0,0 @@ -google.protobuf.FloatValue - */ -class FloatValue extends \Google\Protobuf\Internal\Message -{ - /** - * The float value. - * - * Generated from protobuf field float value = 1; - */ - protected $value = 0.0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type float $value - * The float value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The float value. - * - * Generated from protobuf field float value = 1; - * @return float - */ - public function getValue() - { - return $this->value; - } - - /** - * The float value. - * - * Generated from protobuf field float value = 1; - * @param float $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkFloat($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php b/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php deleted file mode 100644 index 4db6923..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php +++ /dev/null @@ -1,38 +0,0 @@ -google.protobuf.Empty - */ -class GPBEmpty extends \Google\Protobuf\Internal\Message -{ - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\GPBEmpty::initOnce(); - parent::__construct($data); - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php b/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php deleted file mode 100644 index cfd73cd..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.Int32Value - */ -class Int32Value extends \Google\Protobuf\Internal\Message -{ - /** - * The int32 value. - * - * Generated from protobuf field int32 value = 1; - */ - protected $value = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $value - * The int32 value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The int32 value. - * - * Generated from protobuf field int32 value = 1; - * @return int - */ - public function getValue() - { - return $this->value; - } - - /** - * The int32 value. - * - * Generated from protobuf field int32 value = 1; - * @param int $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkInt32($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php b/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php deleted file mode 100644 index 143474f..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.Int64Value - */ -class Int64Value extends \Google\Protobuf\Internal\Message -{ - /** - * The int64 value. - * - * Generated from protobuf field int64 value = 1; - */ - protected $value = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $value - * The int64 value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The int64 value. - * - * Generated from protobuf field int64 value = 1; - * @return int|string - */ - public function getValue() - { - return $this->value; - } - - /** - * The int64 value. - * - * Generated from protobuf field int64 value = 1; - * @param int|string $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkInt64($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php deleted file mode 100644 index cba922d..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php +++ /dev/null @@ -1,86 +0,0 @@ -type_url, 0, $url_prifix_len) != - GPBUtil::TYPE_URL_PREFIX) { - throw new \Exception( - "Type url needs to be type.googleapis.com/fully-qulified"); - } - $fully_qualifed_name = - substr($this->type_url, $url_prifix_len); - - // Create message according to fully qualified name. - $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); - $desc = $pool->getDescriptorByProtoName($fully_qualifed_name); - if (is_null($desc)) { - throw new \Exception("Class ".$fully_qualifed_name - ." hasn't been added to descriptor pool"); - } - $klass = $desc->getClass(); - $msg = new $klass(); - - // Merge data into message. - $msg->mergeFromString($this->value); - return $msg; - } - - /** - * The type_url will be created according to the given message’s type and - * the value is encoded data from the given message.. - * @param message: A proto message. - */ - public function pack($msg) - { - if (!$msg instanceof Message) { - trigger_error("Given parameter is not a message instance.", - E_USER_ERROR); - return; - } - - // Set value using serialized message. - $this->value = $msg->serializeToString(); - - // Set type url. - $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); - $desc = $pool->getDescriptorByClassName(get_class($msg)); - $fully_qualifed_name = $desc->getFullName(); - $this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; - } - - /** - * This method returns whether the type_url in any_message is corresponded - * to the given class. - * @param klass: The fully qualified PHP class name of a proto message type. - */ - public function is($klass) - { - $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); - $desc = $pool->getDescriptorByClassName($klass); - $fully_qualifed_name = $desc->getFullName(); - $type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualifed_name; - return $this->type_url === $type_url; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php deleted file mode 100644 index 2ed2dfd..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php +++ /dev/null @@ -1,382 +0,0 @@ -buffer = $buffer; - $this->buffer_size_after_limit = 0; - $this->buffer_end = $end; - $this->current = $start; - $this->current_limit = $end; - $this->legitimate_message_end = false; - $this->recursion_budget = self::DEFAULT_RECURSION_LIMIT; - $this->recursion_limit = self::DEFAULT_RECURSION_LIMIT; - $this->total_bytes_limit = self::DEFAULT_TOTAL_BYTES_LIMIT; - $this->total_bytes_read = $end - $start; - } - - private function advance($amount) - { - $this->current += $amount; - } - - public function bufferSize() - { - return $this->buffer_end - $this->current; - } - - public function current() - { - return $this->total_bytes_read - - ($this->buffer_end - $this->current + - $this->buffer_size_after_limit); - } - - public function substr($start, $end) - { - return substr($this->buffer, $start, $end - $start); - } - - private function recomputeBufferLimits() - { - $this->buffer_end += $this->buffer_size_after_limit; - $closest_limit = min($this->current_limit, $this->total_bytes_limit); - if ($closest_limit < $this->total_bytes_read) { - // The limit position is in the current buffer. We must adjust the - // buffer size accordingly. - $this->buffer_size_after_limit = $this->total_bytes_read - - $closest_limit; - $this->buffer_end -= $this->buffer_size_after_limit; - } else { - $this->buffer_size_after_limit = 0; - } - } - - private function consumedEntireMessage() - { - return $this->legitimate_message_end; - } - - /** - * Read uint32 into $var. Advance buffer with consumed bytes. If the - * contained varint is larger than 32 bits, discard the high order bits. - * @param $var. - */ - public function readVarint32(&$var) - { - if (!$this->readVarint64($var)) { - return false; - } - - if (PHP_INT_SIZE == 4) { - $var = bcmod($var, 4294967296); - } else { - $var &= 0xFFFFFFFF; - } - - // Convert large uint32 to int32. - if ($var > 0x7FFFFFFF) { - if (PHP_INT_SIZE === 8) { - $var = $var | (0xFFFFFFFF << 32); - } else { - $var = bcsub($var, 4294967296); - } - } - - $var = intval($var); - return true; - } - - /** - * Read Uint64 into $var. Advance buffer with consumed bytes. - * @param $var. - */ - public function readVarint64(&$var) - { - $count = 0; - - if (PHP_INT_SIZE == 4) { - $high = 0; - $low = 0; - $b = 0; - - do { - if ($this->current === $this->buffer_end) { - return false; - } - if ($count === self::MAX_VARINT_BYTES) { - return false; - } - $b = ord($this->buffer[$this->current]); - $bits = 7 * $count; - if ($bits >= 32) { - $high |= (($b & 0x7F) << ($bits - 32)); - } else if ($bits > 25){ - // $bits is 28 in this case. - $low |= (($b & 0x7F) << 28); - $high = ($b & 0x7F) >> 4; - } else { - $low |= (($b & 0x7F) << $bits); - } - - $this->advance(1); - $count += 1; - } while ($b & 0x80); - - $var = GPBUtil::combineInt32ToInt64($high, $low); - if (bccomp($var, 0) < 0) { - $var = bcadd($var, "18446744073709551616"); - } - } else { - $result = 0; - $shift = 0; - - do { - if ($this->current === $this->buffer_end) { - return false; - } - if ($count === self::MAX_VARINT_BYTES) { - return false; - } - - $byte = ord($this->buffer[$this->current]); - $result |= ($byte & 0x7f) << $shift; - $shift += 7; - $this->advance(1); - $count += 1; - } while ($byte > 0x7f); - - $var = $result; - } - - return true; - } - - /** - * Read int into $var. If the result is larger than the largest integer, $var - * will be -1. Advance buffer with consumed bytes. - * @param $var. - */ - public function readVarintSizeAsInt(&$var) - { - if (!$this->readVarint64($var)) { - return false; - } - $var = (int)$var; - return true; - } - - /** - * Read 32-bit unsigned integer to $var. If the buffer has less than 4 bytes, - * return false. Advance buffer with consumed bytes. - * @param $var. - */ - public function readLittleEndian32(&$var) - { - $data = null; - if (!$this->readRaw(4, $data)) { - return false; - } - $var = unpack('V', $data); - $var = $var[1]; - return true; - } - - /** - * Read 64-bit unsigned integer to $var. If the buffer has less than 8 bytes, - * return false. Advance buffer with consumed bytes. - * @param $var. - */ - public function readLittleEndian64(&$var) - { - $data = null; - if (!$this->readRaw(4, $data)) { - return false; - } - $low = unpack('V', $data)[1]; - if (!$this->readRaw(4, $data)) { - return false; - } - $high = unpack('V', $data)[1]; - if (PHP_INT_SIZE == 4) { - $var = GPBUtil::combineInt32ToInt64($high, $low); - } else { - $var = ($high << 32) | $low; - } - return true; - } - - /** - * Read tag into $var. Advance buffer with consumed bytes. - * @param $var. - */ - public function readTag() - { - if ($this->current === $this->buffer_end) { - // Make sure that it failed due to EOF, not because we hit - // total_bytes_limit, which, unlike normal limits, is not a valid - // place to end a message. - $current_position = $this->total_bytes_read - - $this->buffer_size_after_limit; - if ($current_position >= $this->total_bytes_limit) { - // Hit total_bytes_limit_. But if we also hit the normal limit, - // we're still OK. - $this->legitimate_message_end = - ($this->current_limit === $this->total_bytes_limit); - } else { - $this->legitimate_message_end = true; - } - return 0; - } - - $result = 0; - // The largest tag is 2^29 - 1, which can be represented by int32. - $success = $this->readVarint32($result); - if ($success) { - return $result; - } else { - return 0; - } - } - - public function readRaw($size, &$buffer) - { - $current_buffer_size = 0; - if ($this->bufferSize() < $size) { - return false; - } - - if ($size === 0) { - $buffer = ""; - } else { - $buffer = substr($this->buffer, $this->current, $size); - $this->advance($size); - } - - return true; - } - - /* Places a limit on the number of bytes that the stream may read, starting - * from the current position. Once the stream hits this limit, it will act - * like the end of the input has been reached until popLimit() is called. - * - * As the names imply, the stream conceptually has a stack of limits. The - * shortest limit on the stack is always enforced, even if it is not the top - * limit. - * - * The value returned by pushLimit() is opaque to the caller, and must be - * passed unchanged to the corresponding call to popLimit(). - * - * @param integer $byte_limit - * @throws \Exception Fail to push limit. - */ - public function pushLimit($byte_limit) - { - // Current position relative to the beginning of the stream. - $current_position = $this->current(); - $old_limit = $this->current_limit; - - // security: byte_limit is possibly evil, so check for negative values - // and overflow. - if ($byte_limit >= 0 && - $byte_limit <= PHP_INT_MAX - $current_position && - $byte_limit <= $this->current_limit - $current_position) { - $this->current_limit = $current_position + $byte_limit; - $this->recomputeBufferLimits(); - } else { - throw new GPBDecodeException("Fail to push limit."); - } - - return $old_limit; - } - - /* The limit passed in is actually the *old* limit, which we returned from - * PushLimit(). - * - * @param integer $byte_limit - */ - public function popLimit($byte_limit) - { - $this->current_limit = $byte_limit; - $this->recomputeBufferLimits(); - // We may no longer be at a legitimate message end. ReadTag() needs to - // be called again to find out. - $this->legitimate_message_end = false; - } - - public function incrementRecursionDepthAndPushLimit( - $byte_limit, &$old_limit, &$recursion_budget) - { - $old_limit = $this->pushLimit($byte_limit); - $recursion_limit = --$this->recursion_limit; - } - - public function decrementRecursionDepthAndPopLimit($byte_limit) - { - $result = $this->consumedEntireMessage(); - $this->popLimit($byte_limit); - ++$this->recursion_budget; - return $result; - } - - public function bytesUntilLimit() - { - if ($this->current_limit === PHP_INT_MAX) { - return -1; - } - return $this->current_limit - $this->current; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php deleted file mode 100644 index f75e9c6..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php +++ /dev/null @@ -1,159 +0,0 @@ -current = 0; - $this->buffer_size = $size; - $this->buffer = str_repeat(chr(0), $this->buffer_size); - } - - public function getData() - { - return $this->buffer; - } - - public function writeVarint32($value, $trim) - { - $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES); - $size = self::writeVarintToArray($value, $bytes, $trim); - return $this->writeRaw($bytes, $size); - } - - public function writeVarint64($value) - { - $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES); - $size = self::writeVarintToArray($value, $bytes); - return $this->writeRaw($bytes, $size); - } - - public function writeLittleEndian32($value) - { - $bytes = str_repeat(chr(0), 4); - $size = self::writeLittleEndian32ToArray($value, $bytes); - return $this->writeRaw($bytes, $size); - } - - public function writeLittleEndian64($value) - { - $bytes = str_repeat(chr(0), 8); - $size = self::writeLittleEndian64ToArray($value, $bytes); - return $this->writeRaw($bytes, $size); - } - - public function writeTag($tag) - { - return $this->writeVarint32($tag, true); - } - - public function writeRaw($data, $size) - { - if ($this->buffer_size < $size) { - trigger_error("Output stream doesn't have enough buffer."); - return false; - } - - for ($i = 0; $i < $size; $i++) { - $this->buffer[$this->current] = $data[$i]; - $this->current++; - $this->buffer_size--; - } - return true; - } - - public static function writeVarintToArray($value, &$buffer, $trim = false) - { - $current = 0; - - $high = 0; - $low = 0; - if (PHP_INT_SIZE == 4) { - GPBUtil::divideInt64ToInt32($value, $high, $low, $trim); - } else { - $low = $value; - } - - while (($low >= 0x80 || $low < 0) || $high != 0) { - $buffer[$current] = chr($low | 0x80); - $value = ($value >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)); - $carry = ($high & 0x7F) << ((PHP_INT_SIZE << 3) - 7); - $high = ($high >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)); - $low = (($low >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)) | $carry); - $current++; - } - $buffer[$current] = chr($low); - return $current + 1; - } - - private static function writeLittleEndian32ToArray($value, &$buffer) - { - $buffer[0] = chr($value & 0x000000FF); - $buffer[1] = chr(($value >> 8) & 0x000000FF); - $buffer[2] = chr(($value >> 16) & 0x000000FF); - $buffer[3] = chr(($value >> 24) & 0x000000FF); - return 4; - } - - private static function writeLittleEndian64ToArray($value, &$buffer) - { - $high = 0; - $low = 0; - if (PHP_INT_SIZE == 4) { - GPBUtil::divideInt64ToInt32($value, $high, $low); - } else { - $low = $value & 0xFFFFFFFF; - $high = ($value >> 32) & 0xFFFFFFFF; - } - - $buffer[0] = chr($low & 0x000000FF); - $buffer[1] = chr(($low >> 8) & 0x000000FF); - $buffer[2] = chr(($low >> 16) & 0x000000FF); - $buffer[3] = chr(($low >> 24) & 0x000000FF); - $buffer[4] = chr($high & 0x000000FF); - $buffer[5] = chr(($high >> 8) & 0x000000FF); - $buffer[6] = chr(($high >> 16) & 0x000000FF); - $buffer[7] = chr(($high >> 24) & 0x000000FF); - return 8; - } - -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php deleted file mode 100644 index 51a34d6..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php +++ /dev/null @@ -1,236 +0,0 @@ -public_desc = new \Google\Protobuf\Descriptor($this); - } - - public function addOneofDecl($oneof) - { - $this->oneof_decl[] = $oneof; - } - - public function getOneofDecl() - { - return $this->oneof_decl; - } - - public function setFullName($full_name) - { - $this->full_name = $full_name; - } - - public function getFullName() - { - return $this->full_name; - } - - public function addField($field) - { - $this->field[$field->getNumber()] = $field; - $this->json_to_field[$field->getJsonName()] = $field; - $this->name_to_field[$field->getName()] = $field; - $this->index_to_field[] = $field; - } - - public function getField() - { - return $this->field; - } - - public function addNestedType($desc) - { - $this->nested_type[] = $desc; - } - - public function getNestedType() - { - return $this->nested_type; - } - - public function addEnumType($desc) - { - $this->enum_type[] = $desc; - } - - public function getEnumType() - { - return $this->enum_type; - } - - public function getFieldByNumber($number) - { - if (!isset($this->field[$number])) { - return NULL; - } else { - return $this->field[$number]; - } - } - - public function getFieldByJsonName($json_name) - { - if (!isset($this->json_to_field[$json_name])) { - return NULL; - } else { - return $this->json_to_field[$json_name]; - } - } - - public function getFieldByName($name) - { - if (!isset($this->name_to_field[$name])) { - return NULL; - } else { - return $this->name_to_field[$name]; - } - } - - public function getFieldByIndex($index) - { - if (count($this->index_to_field) <= $index) { - return NULL; - } else { - return $this->index_to_field[$index]; - } - } - - public function setClass($klass) - { - $this->klass = $klass; - } - - public function getClass() - { - return $this->klass; - } - - public function setLegacyClass($klass) - { - $this->legacy_klass = $klass; - } - - public function getLegacyClass() - { - return $this->legacy_klass; - } - - public function setPreviouslyUnreservedClass($klass) - { - $this->previous_klass = $klass; - } - - public function getPreviouslyUnreservedClass() - { - return $this->previous_klass; - } - - public function setOptions($options) - { - $this->options = $options; - } - - public function getOptions() - { - return $this->options; - } - - public static function buildFromProto($proto, $file_proto, $containing) - { - $desc = new Descriptor(); - - $message_name_without_package = ""; - $classname = ""; - $legacy_classname = ""; - $previous_classname = ""; - $fullname = ""; - GPBUtil::getFullClassName( - $proto, - $containing, - $file_proto, - $message_name_without_package, - $classname, - $legacy_classname, - $fullname, - $previous_classname); - $desc->setFullName($fullname); - $desc->setClass($classname); - $desc->setLegacyClass($legacy_classname); - $desc->setPreviouslyUnreservedClass($previous_classname); - $desc->setOptions($proto->getOptions()); - - foreach ($proto->getField() as $field_proto) { - $desc->addField(FieldDescriptor::buildFromProto($field_proto)); - } - - // Handle nested types. - foreach ($proto->getNestedType() as $nested_proto) { - $desc->addNestedType(Descriptor::buildFromProto( - $nested_proto, $file_proto, $message_name_without_package)); - } - - // Handle nested enum. - foreach ($proto->getEnumType() as $enum_proto) { - $desc->addEnumType(EnumDescriptor::buildFromProto( - $enum_proto, $file_proto, $message_name_without_package)); - } - - // Handle oneof fields. - $index = 0; - foreach ($proto->getOneofDecl() as $oneof_proto) { - $desc->addOneofDecl( - OneofDescriptor::buildFromProto($oneof_proto, $desc, $index)); - $index++; - } - - return $desc; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php deleted file mode 100644 index 1be00e2..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php +++ /dev/null @@ -1,194 +0,0 @@ -mergeFromString($data); - - foreach($files->getFile() as $file_proto) { - $file = FileDescriptor::buildFromProto($file_proto); - - foreach ($file->getMessageType() as $desc) { - $this->addDescriptor($desc); - } - unset($desc); - - foreach ($file->getEnumType() as $desc) { - $this->addEnumDescriptor($desc); - } - unset($desc); - - foreach ($file->getMessageType() as $desc) { - $this->crossLink($desc); - } - unset($desc); - } - } - - public function addMessage($name, $klass) - { - return new MessageBuilderContext($name, $klass, $this); - } - - public function addEnum($name, $klass) - { - return new EnumBuilderContext($name, $klass, $this); - } - - public function addDescriptor($descriptor) - { - $this->proto_to_class[$descriptor->getFullName()] = - $descriptor->getClass(); - $this->class_to_desc[$descriptor->getClass()] = $descriptor; - $this->class_to_desc[$descriptor->getLegacyClass()] = $descriptor; - $this->class_to_desc[$descriptor->getPreviouslyUnreservedClass()] = $descriptor; - foreach ($descriptor->getNestedType() as $nested_type) { - $this->addDescriptor($nested_type); - } - foreach ($descriptor->getEnumType() as $enum_type) { - $this->addEnumDescriptor($enum_type); - } - } - - public function addEnumDescriptor($descriptor) - { - $this->proto_to_class[$descriptor->getFullName()] = - $descriptor->getClass(); - $this->class_to_enum_desc[$descriptor->getClass()] = $descriptor; - $this->class_to_enum_desc[$descriptor->getLegacyClass()] = $descriptor; - } - - public function getDescriptorByClassName($klass) - { - if (isset($this->class_to_desc[$klass])) { - return $this->class_to_desc[$klass]; - } else { - return null; - } - } - - public function getEnumDescriptorByClassName($klass) - { - if (isset($this->class_to_enum_desc[$klass])) { - return $this->class_to_enum_desc[$klass]; - } else { - return null; - } - } - - public function getDescriptorByProtoName($proto) - { - if (isset($this->proto_to_class[$proto])) { - $klass = $this->proto_to_class[$proto]; - return $this->class_to_desc[$klass]; - } else { - return null; - } - } - - public function getEnumDescriptorByProtoName($proto) - { - $klass = $this->proto_to_class[$proto]; - return $this->class_to_enum_desc[$klass]; - } - - private function crossLink(Descriptor $desc) - { - foreach ($desc->getField() as $field) { - switch ($field->getType()) { - case GPBType::MESSAGE: - $proto = $field->getMessageType(); - if ($proto[0] == '.') { - $proto = substr($proto, 1); - } - $subdesc = $this->getDescriptorByProtoName($proto); - if (is_null($subdesc)) { - trigger_error( - 'proto not added: ' . $proto - . " for " . $desc->getFullName(), E_USER_ERROR); - } - $field->setMessageType($subdesc); - break; - case GPBType::ENUM: - $proto = $field->getEnumType(); - if ($proto[0] == '.') { - $proto = substr($proto, 1); - } - $field->setEnumType( - $this->getEnumDescriptorByProtoName($proto)); - break; - default: - break; - } - } - unset($field); - - foreach ($desc->getNestedType() as $nested_type) { - $this->crossLink($nested_type); - } - unset($nested_type); - } - - public function finish() - { - foreach ($this->class_to_desc as $klass => $desc) { - $this->crossLink($desc); - } - unset($desc); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php deleted file mode 100644 index 2937c5a..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php +++ /dev/null @@ -1,336 +0,0 @@ -google.protobuf.DescriptorProto - */ -class DescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; - */ - private $field; - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; - */ - private $extension; - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; - */ - private $nested_type; - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; - */ - private $enum_type; - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; - */ - private $extension_range; - /** - * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; - */ - private $oneof_decl; - /** - * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; - */ - protected $options = null; - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; - */ - private $reserved_range; - /** - * Reserved field names, which may not be used by fields in the same message. - * A given name may only be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 10; - */ - private $reserved_name; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $field - * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $extension - * @type array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $nested_type - * @type array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $enum_type - * @type array<\Google\Protobuf\Internal\DescriptorProto\ExtensionRange>|\Google\Protobuf\Internal\RepeatedField $extension_range - * @type array<\Google\Protobuf\Internal\OneofDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $oneof_decl - * @type \Google\Protobuf\Internal\MessageOptions $options - * @type array<\Google\Protobuf\Internal\DescriptorProto\ReservedRange>|\Google\Protobuf\Internal\RepeatedField $reserved_range - * @type array|\Google\Protobuf\Internal\RepeatedField $reserved_name - * Reserved field names, which may not be used by fields in the same message. - * A given name may only be reserved once. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getField() - { - return $this->field; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto field = 2; - * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setField($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); - $this->field = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getExtension() - { - return $this->extension; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 6; - * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setExtension($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); - $this->extension = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getNestedType() - { - return $this->nested_type; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto nested_type = 3; - * @param array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setNestedType($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto::class); - $this->nested_type = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getEnumType() - { - return $this->enum_type; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 4; - * @param array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setEnumType($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto::class); - $this->enum_type = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getExtensionRange() - { - return $this->extension_range; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; - * @param array<\Google\Protobuf\Internal\DescriptorProto\ExtensionRange>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setExtensionRange($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto\ExtensionRange::class); - $this->extension_range = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOneofDecl() - { - return $this->oneof_decl; - } - - /** - * Generated from protobuf field repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; - * @param array<\Google\Protobuf\Internal\OneofDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOneofDecl($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\OneofDescriptorProto::class); - $this->oneof_decl = $arr; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; - * @return \Google\Protobuf\Internal\MessageOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.MessageOptions options = 7; - * @param \Google\Protobuf\Internal\MessageOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\MessageOptions::class); - $this->options = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getReservedRange() - { - return $this->reserved_range; - } - - /** - * Generated from protobuf field repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; - * @param array<\Google\Protobuf\Internal\DescriptorProto\ReservedRange>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setReservedRange($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto\ReservedRange::class); - $this->reserved_range = $arr; - - return $this; - } - - /** - * Reserved field names, which may not be used by fields in the same message. - * A given name may only be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 10; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getReservedName() - { - return $this->reserved_name; - } - - /** - * Reserved field names, which may not be used by fields in the same message. - * A given name may only be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 10; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setReservedName($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->reserved_name = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php deleted file mode 100644 index 43c33c4..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php +++ /dev/null @@ -1,161 +0,0 @@ -google.protobuf.DescriptorProto.ExtensionRange - */ -class ExtensionRange extends \Google\Protobuf\Internal\Message -{ - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - */ - protected $start = null; - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - */ - protected $end = null; - /** - * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; - */ - protected $options = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $start - * Inclusive. - * @type int $end - * Exclusive. - * @type \Google\Protobuf\Internal\ExtensionRangeOptions $options - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @return int - */ - public function getStart() - { - return isset($this->start) ? $this->start : 0; - } - - public function hasStart() - { - return isset($this->start); - } - - public function clearStart() - { - unset($this->start); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @param int $var - * @return $this - */ - public function setStart($var) - { - GPBUtil::checkInt32($var); - $this->start = $var; - - return $this; - } - - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @return int - */ - public function getEnd() - { - return isset($this->end) ? $this->end : 0; - } - - public function hasEnd() - { - return isset($this->end); - } - - public function clearEnd() - { - unset($this->end); - } - - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @param int $var - * @return $this - */ - public function setEnd($var) - { - GPBUtil::checkInt32($var); - $this->end = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; - * @return \Google\Protobuf\Internal\ExtensionRangeOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.ExtensionRangeOptions options = 3; - * @param \Google\Protobuf\Internal\ExtensionRangeOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\ExtensionRangeOptions::class); - $this->options = $var; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(ExtensionRange::class, \Google\Protobuf\Internal\DescriptorProto_ExtensionRange::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php deleted file mode 100644 index f099cc3..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php +++ /dev/null @@ -1,128 +0,0 @@ -google.protobuf.DescriptorProto.ReservedRange - */ -class ReservedRange extends \Google\Protobuf\Internal\Message -{ - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - */ - protected $start = null; - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - */ - protected $end = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $start - * Inclusive. - * @type int $end - * Exclusive. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @return int - */ - public function getStart() - { - return isset($this->start) ? $this->start : 0; - } - - public function hasStart() - { - return isset($this->start); - } - - public function clearStart() - { - unset($this->start); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @param int $var - * @return $this - */ - public function setStart($var) - { - GPBUtil::checkInt32($var); - $this->start = $var; - - return $this; - } - - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @return int - */ - public function getEnd() - { - return isset($this->end) ? $this->end : 0; - } - - public function hasEnd() - { - return isset($this->end); - } - - public function clearEnd() - { - unset($this->end); - } - - /** - * Exclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @param int $var - * @return $this - */ - public function setEnd($var) - { - GPBUtil::checkInt32($var); - $this->end = $var; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(ReservedRange::class, \Google\Protobuf\Internal\DescriptorProto_ReservedRange::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php deleted file mode 100644 index c928fbe..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto_ExtensionRange.php +++ /dev/null @@ -1,16 +0,0 @@ -descriptor = new EnumDescriptor(); - $this->descriptor->setFullName($full_name); - $this->descriptor->setClass($klass); - $this->pool = $pool; - } - - public function value($name, $number) - { - $value = new EnumValueDescriptor($name, $number); - $this->descriptor->addValue($number, $value); - return $this; - } - - public function finalizeToPool() - { - $this->pool->addEnumDescriptor($this->descriptor); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php deleted file mode 100644 index 383f53b..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php +++ /dev/null @@ -1,116 +0,0 @@ -public_desc = new \Google\Protobuf\EnumDescriptor($this); - } - - public function setFullName($full_name) - { - $this->full_name = $full_name; - } - - public function getFullName() - { - return $this->full_name; - } - - public function addValue($number, $value) - { - $this->value[$number] = $value; - $this->name_to_value[$value->getName()] = $value; - $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number); - } - - public function getValueByNumber($number) - { - if (isset($this->value[$number])) { - return $this->value[$number]; - } - return null; - } - - public function getValueByName($name) - { - if (isset($this->name_to_value[$name])) { - return $this->name_to_value[$name]; - } - return null; - } - - public function getValueDescriptorByIndex($index) - { - if (isset($this->value_descriptor[$index])) { - return $this->value_descriptor[$index]; - } - return null; - } - - public function getValueCount() - { - return count($this->value); - } - - public function setClass($klass) - { - $this->klass = $klass; - } - - public function getClass() - { - return $this->klass; - } - - public function setLegacyClass($klass) - { - $this->legacy_klass = $klass; - } - - public function getLegacyClass() - { - return $this->legacy_klass; - } - - public static function buildFromProto($proto, $file_proto, $containing) - { - $desc = new EnumDescriptor(); - - $enum_name_without_package = ""; - $classname = ""; - $legacy_classname = ""; - $fullname = ""; - GPBUtil::getFullClassName( - $proto, - $containing, - $file_proto, - $enum_name_without_package, - $classname, - $legacy_classname, - $fullname, - $unused_previous_classname); - $desc->setFullName($fullname); - $desc->setClass($classname); - $desc->setLegacyClass($legacy_classname); - $values = $proto->getValue(); - foreach ($values as $value) { - $desc->addValue($value->getNumber(), $value); - } - - return $desc; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php deleted file mode 100644 index cb2a42a..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php +++ /dev/null @@ -1,216 +0,0 @@ -google.protobuf.EnumDescriptorProto - */ -class EnumDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; - */ - private $value; - /** - * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; - */ - protected $options = null; - /** - * Range of reserved numeric values. Reserved numeric values may not be used - * by enum values in the same enum declaration. Reserved ranges may not - * overlap. - * - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; - */ - private $reserved_range; - /** - * Reserved enum value names, which may not be reused. A given name may only - * be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 5; - */ - private $reserved_name; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type array<\Google\Protobuf\Internal\EnumValueDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $value - * @type \Google\Protobuf\Internal\EnumOptions $options - * @type array<\Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange>|\Google\Protobuf\Internal\RepeatedField $reserved_range - * Range of reserved numeric values. Reserved numeric values may not be used - * by enum values in the same enum declaration. Reserved ranges may not - * overlap. - * @type array|\Google\Protobuf\Internal\RepeatedField $reserved_name - * Reserved enum value names, which may not be reused. A given name may only - * be reserved once. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getValue() - { - return $this->value; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumValueDescriptorProto value = 2; - * @param array<\Google\Protobuf\Internal\EnumValueDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setValue($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumValueDescriptorProto::class); - $this->value = $arr; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; - * @return \Google\Protobuf\Internal\EnumOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.EnumOptions options = 3; - * @param \Google\Protobuf\Internal\EnumOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\EnumOptions::class); - $this->options = $var; - - return $this; - } - - /** - * Range of reserved numeric values. Reserved numeric values may not be used - * by enum values in the same enum declaration. Reserved ranges may not - * overlap. - * - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getReservedRange() - { - return $this->reserved_range; - } - - /** - * Range of reserved numeric values. Reserved numeric values may not be used - * by enum values in the same enum declaration. Reserved ranges may not - * overlap. - * - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; - * @param array<\Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setReservedRange($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto\EnumReservedRange::class); - $this->reserved_range = $arr; - - return $this; - } - - /** - * Reserved enum value names, which may not be reused. A given name may only - * be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 5; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getReservedName() - { - return $this->reserved_name; - } - - /** - * Reserved enum value names, which may not be reused. A given name may only - * be reserved once. - * - * Generated from protobuf field repeated string reserved_name = 5; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setReservedName($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->reserved_name = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php deleted file mode 100644 index 7282fcc..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php +++ /dev/null @@ -1,130 +0,0 @@ -google.protobuf.EnumDescriptorProto.EnumReservedRange - */ -class EnumReservedRange extends \Google\Protobuf\Internal\Message -{ - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - */ - protected $start = null; - /** - * Inclusive. - * - * Generated from protobuf field optional int32 end = 2; - */ - protected $end = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $start - * Inclusive. - * @type int $end - * Inclusive. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @return int - */ - public function getStart() - { - return isset($this->start) ? $this->start : 0; - } - - public function hasStart() - { - return isset($this->start); - } - - public function clearStart() - { - unset($this->start); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 start = 1; - * @param int $var - * @return $this - */ - public function setStart($var) - { - GPBUtil::checkInt32($var); - $this->start = $var; - - return $this; - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @return int - */ - public function getEnd() - { - return isset($this->end) ? $this->end : 0; - } - - public function hasEnd() - { - return isset($this->end); - } - - public function clearEnd() - { - unset($this->end); - } - - /** - * Inclusive. - * - * Generated from protobuf field optional int32 end = 2; - * @param int $var - * @return $this - */ - public function setEnd($var) - { - GPBUtil::checkInt32($var); - $this->end = $var; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(EnumReservedRange::class, \Google\Protobuf\Internal\EnumDescriptorProto_EnumReservedRange::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php deleted file mode 100644 index b1b59ed..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto_EnumReservedRange.php +++ /dev/null @@ -1,16 +0,0 @@ -google.protobuf.EnumOptions - */ -class EnumOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Set this option to true to allow mapping different tag names to the same - * value. - * - * Generated from protobuf field optional bool allow_alias = 2; - */ - protected $allow_alias = null; - /** - * Is this enum deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum, or it will be completely ignored; in the very least, this - * is a formalization for deprecating enums. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - */ - protected $deprecated = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $allow_alias - * Set this option to true to allow mapping different tag names to the same - * value. - * @type bool $deprecated - * Is this enum deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum, or it will be completely ignored; in the very least, this - * is a formalization for deprecating enums. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Set this option to true to allow mapping different tag names to the same - * value. - * - * Generated from protobuf field optional bool allow_alias = 2; - * @return bool - */ - public function getAllowAlias() - { - return isset($this->allow_alias) ? $this->allow_alias : false; - } - - public function hasAllowAlias() - { - return isset($this->allow_alias); - } - - public function clearAllowAlias() - { - unset($this->allow_alias); - } - - /** - * Set this option to true to allow mapping different tag names to the same - * value. - * - * Generated from protobuf field optional bool allow_alias = 2; - * @param bool $var - * @return $this - */ - public function setAllowAlias($var) - { - GPBUtil::checkBool($var); - $this->allow_alias = $var; - - return $this; - } - - /** - * Is this enum deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum, or it will be completely ignored; in the very least, this - * is a formalization for deprecating enums. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this enum deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum, or it will be completely ignored; in the very least, this - * is a formalization for deprecating enums. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php deleted file mode 100644 index 0feaea6..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php +++ /dev/null @@ -1,146 +0,0 @@ -google.protobuf.EnumValueDescriptorProto - */ -class EnumValueDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field optional int32 number = 2; - */ - protected $number = null; - /** - * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; - */ - protected $options = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type int $number - * @type \Google\Protobuf\Internal\EnumValueOptions $options - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field optional int32 number = 2; - * @return int - */ - public function getNumber() - { - return isset($this->number) ? $this->number : 0; - } - - public function hasNumber() - { - return isset($this->number); - } - - public function clearNumber() - { - unset($this->number); - } - - /** - * Generated from protobuf field optional int32 number = 2; - * @param int $var - * @return $this - */ - public function setNumber($var) - { - GPBUtil::checkInt32($var); - $this->number = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; - * @return \Google\Protobuf\Internal\EnumValueOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.EnumValueOptions options = 3; - * @param \Google\Protobuf\Internal\EnumValueOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\EnumValueOptions::class); - $this->options = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php deleted file mode 100644 index 2db7fce..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php +++ /dev/null @@ -1,123 +0,0 @@ -google.protobuf.EnumValueOptions - */ -class EnumValueOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Is this enum value deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum value, or it will be completely ignored; in the very least, - * this is a formalization for deprecating enum values. - * - * Generated from protobuf field optional bool deprecated = 1 [default = false]; - */ - protected $deprecated = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $deprecated - * Is this enum value deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum value, or it will be completely ignored; in the very least, - * this is a formalization for deprecating enum values. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Is this enum value deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum value, or it will be completely ignored; in the very least, - * this is a formalization for deprecating enum values. - * - * Generated from protobuf field optional bool deprecated = 1 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this enum value deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the enum value, or it will be completely ignored; in the very least, - * this is a formalization for deprecating enum values. - * - * Generated from protobuf field optional bool deprecated = 1 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php deleted file mode 100644 index 245173c..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php +++ /dev/null @@ -1,67 +0,0 @@ -google.protobuf.ExtensionRangeOptions - */ -class ExtensionRangeOptions extends \Google\Protobuf\Internal\Message -{ - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php deleted file mode 100644 index 3a9a73b..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php +++ /dev/null @@ -1,326 +0,0 @@ -public_desc = new \Google\Protobuf\FieldDescriptor($this); - } - - public function setOneofIndex($index) - { - $this->oneof_index = $index; - } - - public function getOneofIndex() - { - return $this->oneof_index; - } - - public function setName($name) - { - $this->name = $name; - } - - public function getName() - { - return $this->name; - } - - public function setJsonName($json_name) - { - $this->json_name = $json_name; - } - - public function getJsonName() - { - return $this->json_name; - } - - public function setSetter($setter) - { - $this->setter = $setter; - } - - public function getSetter() - { - return $this->setter; - } - - public function setGetter($getter) - { - $this->getter = $getter; - } - - public function getGetter() - { - return $this->getter; - } - - public function setNumber($number) - { - $this->number = $number; - } - - public function getNumber() - { - return $this->number; - } - - public function setLabel($label) - { - $this->label = $label; - } - - public function getLabel() - { - return $this->label; - } - - public function isRepeated() - { - return $this->label === GPBLabel::REPEATED; - } - - public function setType($type) - { - $this->type = $type; - } - - public function getType() - { - return $this->type; - } - - public function setMessageType($message_type) - { - $this->message_type = $message_type; - } - - public function getMessageType() - { - return $this->message_type; - } - - public function setEnumType($enum_type) - { - $this->enum_type = $enum_type; - } - - public function getEnumType() - { - return $this->enum_type; - } - - public function setPacked($packed) - { - $this->packed = $packed; - } - - public function getPacked() - { - return $this->packed; - } - - public function getProto3Optional() - { - return $this->proto3_optional; - } - - public function setProto3Optional($proto3_optional) - { - $this->proto3_optional = $proto3_optional; - } - - public function getContainingOneof() - { - return $this->containing_oneof; - } - - public function setContainingOneof($containing_oneof) - { - $this->containing_oneof = $containing_oneof; - } - - public function getRealContainingOneof() - { - return !is_null($this->containing_oneof) && !$this->containing_oneof->isSynthetic() - ? $this->containing_oneof : null; - } - - public function isPackable() - { - return $this->isRepeated() && self::isTypePackable($this->type); - } - - public function isMap() - { - return $this->getType() == GPBType::MESSAGE && - !is_null($this->getMessageType()->getOptions()) && - $this->getMessageType()->getOptions()->getMapEntry(); - } - - public function isTimestamp() - { - return $this->getType() == GPBType::MESSAGE && - $this->getMessageType()->getClass() === "Google\Protobuf\Timestamp"; - } - - public function isWrapperType() - { - if ($this->getType() == GPBType::MESSAGE) { - $class = $this->getMessageType()->getClass(); - return in_array($class, [ - "Google\Protobuf\DoubleValue", - "Google\Protobuf\FloatValue", - "Google\Protobuf\Int64Value", - "Google\Protobuf\UInt64Value", - "Google\Protobuf\Int32Value", - "Google\Protobuf\UInt32Value", - "Google\Protobuf\BoolValue", - "Google\Protobuf\StringValue", - "Google\Protobuf\BytesValue", - ]); - } - return false; - } - - private static function isTypePackable($field_type) - { - return ($field_type !== GPBType::STRING && - $field_type !== GPBType::GROUP && - $field_type !== GPBType::MESSAGE && - $field_type !== GPBType::BYTES); - } - - /** - * @param FieldDescriptorProto $proto - * @return FieldDescriptor - */ - public static function getFieldDescriptor($proto) - { - $type_name = null; - $type = $proto->getType(); - switch ($type) { - case GPBType::MESSAGE: - case GPBType::GROUP: - case GPBType::ENUM: - $type_name = $proto->getTypeName(); - break; - default: - break; - } - - $oneof_index = $proto->hasOneofIndex() ? $proto->getOneofIndex() : -1; - // TODO: once proto2 is supported, this default should be false - // for proto2. - if ($proto->getLabel() === GPBLabel::REPEATED && - $proto->getType() !== GPBType::MESSAGE && - $proto->getType() !== GPBType::GROUP && - $proto->getType() !== GPBType::STRING && - $proto->getType() !== GPBType::BYTES) { - $packed = true; - } else { - $packed = false; - } - $options = $proto->getOptions(); - if ($options !== null) { - $packed = $options->getPacked(); - } - - $field = new FieldDescriptor(); - $field->setName($proto->getName()); - - if ($proto->hasJsonName()) { - $json_name = $proto->getJsonName(); - } else { - $proto_name = $proto->getName(); - $json_name = implode('', array_map('ucwords', explode('_', $proto_name))); - if ($proto_name[0] !== "_" && !ctype_upper($proto_name[0])) { - $json_name = lcfirst($json_name); - } - } - $field->setJsonName($json_name); - - $camel_name = implode('', array_map('ucwords', explode('_', $proto->getName()))); - $field->setGetter('get' . $camel_name); - $field->setSetter('set' . $camel_name); - $field->setType($proto->getType()); - $field->setNumber($proto->getNumber()); - $field->setLabel($proto->getLabel()); - $field->setPacked($packed); - $field->setOneofIndex($oneof_index); - $field->setProto3Optional($proto->getProto3Optional()); - - // At this time, the message/enum type may have not been added to pool. - // So we use the type name as place holder and will replace it with the - // actual descriptor in cross building. - switch ($type) { - case GPBType::MESSAGE: - $field->setMessageType($type_name); - break; - case GPBType::ENUM: - $field->setEnumType($type_name); - break; - default: - break; - } - - return $field; - } - - public static function buildFromProto($proto) - { - return FieldDescriptor::getFieldDescriptor($proto); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php deleted file mode 100644 index 5e99bff..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php +++ /dev/null @@ -1,611 +0,0 @@ -google.protobuf.FieldDescriptorProto - */ -class FieldDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field optional int32 number = 3; - */ - protected $number = null; - /** - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; - */ - protected $label = null; - /** - * If type_name is set, this need not be set. If both this and type_name - * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - * - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; - */ - protected $type = null; - /** - * For message and enum types, this is the name of the type. If the name - * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - * rules are used to find the type (i.e. first the nested types within this - * message are searched, then within the parent, on up to the root - * namespace). - * - * Generated from protobuf field optional string type_name = 6; - */ - protected $type_name = null; - /** - * For extensions, this is the name of the type being extended. It is - * resolved in the same manner as type_name. - * - * Generated from protobuf field optional string extendee = 2; - */ - protected $extendee = null; - /** - * For numeric types, contains the original text representation of the value. - * For booleans, "true" or "false". - * For strings, contains the default text contents (not escaped in any way). - * For bytes, contains the C escaped value. All bytes >= 128 are escaped. - * - * Generated from protobuf field optional string default_value = 7; - */ - protected $default_value = null; - /** - * If set, gives the index of a oneof in the containing type's oneof_decl - * list. This field is a member of that oneof. - * - * Generated from protobuf field optional int32 oneof_index = 9; - */ - protected $oneof_index = null; - /** - * JSON name of this field. The value is set by protocol compiler. If the - * user has set a "json_name" option on this field, that option's value - * will be used. Otherwise, it's deduced from the field's name by converting - * it to camelCase. - * - * Generated from protobuf field optional string json_name = 10; - */ - protected $json_name = null; - /** - * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; - */ - protected $options = null; - /** - * If true, this is a proto3 "optional". When a proto3 field is optional, it - * tracks presence regardless of field type. - * When proto3_optional is true, this field must be belong to a oneof to - * signal to old proto3 clients that presence is tracked for this field. This - * oneof is known as a "synthetic" oneof, and this field must be its sole - * member (each proto3 optional field gets its own synthetic oneof). Synthetic - * oneofs exist in the descriptor only, and do not generate any API. Synthetic - * oneofs must be ordered after all "real" oneofs. - * For message fields, proto3_optional doesn't create any semantic change, - * since non-repeated message fields always track presence. However it still - * indicates the semantic detail of whether the user wrote "optional" or not. - * This can be useful for round-tripping the .proto file. For consistency we - * give message fields a synthetic oneof also, even though it is not required - * to track presence. This is especially important because the parser can't - * tell if a field is a message or an enum, so it must always create a - * synthetic oneof. - * Proto2 optional fields do not set this flag, because they already indicate - * optional with `LABEL_OPTIONAL`. - * - * Generated from protobuf field optional bool proto3_optional = 17; - */ - protected $proto3_optional = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type int $number - * @type int $label - * @type int $type - * If type_name is set, this need not be set. If both this and type_name - * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - * @type string $type_name - * For message and enum types, this is the name of the type. If the name - * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - * rules are used to find the type (i.e. first the nested types within this - * message are searched, then within the parent, on up to the root - * namespace). - * @type string $extendee - * For extensions, this is the name of the type being extended. It is - * resolved in the same manner as type_name. - * @type string $default_value - * For numeric types, contains the original text representation of the value. - * For booleans, "true" or "false". - * For strings, contains the default text contents (not escaped in any way). - * For bytes, contains the C escaped value. All bytes >= 128 are escaped. - * @type int $oneof_index - * If set, gives the index of a oneof in the containing type's oneof_decl - * list. This field is a member of that oneof. - * @type string $json_name - * JSON name of this field. The value is set by protocol compiler. If the - * user has set a "json_name" option on this field, that option's value - * will be used. Otherwise, it's deduced from the field's name by converting - * it to camelCase. - * @type \Google\Protobuf\Internal\FieldOptions $options - * @type bool $proto3_optional - * If true, this is a proto3 "optional". When a proto3 field is optional, it - * tracks presence regardless of field type. - * When proto3_optional is true, this field must be belong to a oneof to - * signal to old proto3 clients that presence is tracked for this field. This - * oneof is known as a "synthetic" oneof, and this field must be its sole - * member (each proto3 optional field gets its own synthetic oneof). Synthetic - * oneofs exist in the descriptor only, and do not generate any API. Synthetic - * oneofs must be ordered after all "real" oneofs. - * For message fields, proto3_optional doesn't create any semantic change, - * since non-repeated message fields always track presence. However it still - * indicates the semantic detail of whether the user wrote "optional" or not. - * This can be useful for round-tripping the .proto file. For consistency we - * give message fields a synthetic oneof also, even though it is not required - * to track presence. This is especially important because the parser can't - * tell if a field is a message or an enum, so it must always create a - * synthetic oneof. - * Proto2 optional fields do not set this flag, because they already indicate - * optional with `LABEL_OPTIONAL`. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field optional int32 number = 3; - * @return int - */ - public function getNumber() - { - return isset($this->number) ? $this->number : 0; - } - - public function hasNumber() - { - return isset($this->number); - } - - public function clearNumber() - { - unset($this->number); - } - - /** - * Generated from protobuf field optional int32 number = 3; - * @param int $var - * @return $this - */ - public function setNumber($var) - { - GPBUtil::checkInt32($var); - $this->number = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; - * @return int - */ - public function getLabel() - { - return isset($this->label) ? $this->label : 0; - } - - public function hasLabel() - { - return isset($this->label); - } - - public function clearLabel() - { - unset($this->label); - } - - /** - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Label label = 4; - * @param int $var - * @return $this - */ - public function setLabel($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldDescriptorProto\Label::class); - $this->label = $var; - - return $this; - } - - /** - * If type_name is set, this need not be set. If both this and type_name - * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - * - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; - * @return int - */ - public function getType() - { - return isset($this->type) ? $this->type : 0; - } - - public function hasType() - { - return isset($this->type); - } - - public function clearType() - { - unset($this->type); - } - - /** - * If type_name is set, this need not be set. If both this and type_name - * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - * - * Generated from protobuf field optional .google.protobuf.FieldDescriptorProto.Type type = 5; - * @param int $var - * @return $this - */ - public function setType($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldDescriptorProto\Type::class); - $this->type = $var; - - return $this; - } - - /** - * For message and enum types, this is the name of the type. If the name - * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - * rules are used to find the type (i.e. first the nested types within this - * message are searched, then within the parent, on up to the root - * namespace). - * - * Generated from protobuf field optional string type_name = 6; - * @return string - */ - public function getTypeName() - { - return isset($this->type_name) ? $this->type_name : ''; - } - - public function hasTypeName() - { - return isset($this->type_name); - } - - public function clearTypeName() - { - unset($this->type_name); - } - - /** - * For message and enum types, this is the name of the type. If the name - * starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - * rules are used to find the type (i.e. first the nested types within this - * message are searched, then within the parent, on up to the root - * namespace). - * - * Generated from protobuf field optional string type_name = 6; - * @param string $var - * @return $this - */ - public function setTypeName($var) - { - GPBUtil::checkString($var, True); - $this->type_name = $var; - - return $this; - } - - /** - * For extensions, this is the name of the type being extended. It is - * resolved in the same manner as type_name. - * - * Generated from protobuf field optional string extendee = 2; - * @return string - */ - public function getExtendee() - { - return isset($this->extendee) ? $this->extendee : ''; - } - - public function hasExtendee() - { - return isset($this->extendee); - } - - public function clearExtendee() - { - unset($this->extendee); - } - - /** - * For extensions, this is the name of the type being extended. It is - * resolved in the same manner as type_name. - * - * Generated from protobuf field optional string extendee = 2; - * @param string $var - * @return $this - */ - public function setExtendee($var) - { - GPBUtil::checkString($var, True); - $this->extendee = $var; - - return $this; - } - - /** - * For numeric types, contains the original text representation of the value. - * For booleans, "true" or "false". - * For strings, contains the default text contents (not escaped in any way). - * For bytes, contains the C escaped value. All bytes >= 128 are escaped. - * - * Generated from protobuf field optional string default_value = 7; - * @return string - */ - public function getDefaultValue() - { - return isset($this->default_value) ? $this->default_value : ''; - } - - public function hasDefaultValue() - { - return isset($this->default_value); - } - - public function clearDefaultValue() - { - unset($this->default_value); - } - - /** - * For numeric types, contains the original text representation of the value. - * For booleans, "true" or "false". - * For strings, contains the default text contents (not escaped in any way). - * For bytes, contains the C escaped value. All bytes >= 128 are escaped. - * - * Generated from protobuf field optional string default_value = 7; - * @param string $var - * @return $this - */ - public function setDefaultValue($var) - { - GPBUtil::checkString($var, True); - $this->default_value = $var; - - return $this; - } - - /** - * If set, gives the index of a oneof in the containing type's oneof_decl - * list. This field is a member of that oneof. - * - * Generated from protobuf field optional int32 oneof_index = 9; - * @return int - */ - public function getOneofIndex() - { - return isset($this->oneof_index) ? $this->oneof_index : 0; - } - - public function hasOneofIndex() - { - return isset($this->oneof_index); - } - - public function clearOneofIndex() - { - unset($this->oneof_index); - } - - /** - * If set, gives the index of a oneof in the containing type's oneof_decl - * list. This field is a member of that oneof. - * - * Generated from protobuf field optional int32 oneof_index = 9; - * @param int $var - * @return $this - */ - public function setOneofIndex($var) - { - GPBUtil::checkInt32($var); - $this->oneof_index = $var; - - return $this; - } - - /** - * JSON name of this field. The value is set by protocol compiler. If the - * user has set a "json_name" option on this field, that option's value - * will be used. Otherwise, it's deduced from the field's name by converting - * it to camelCase. - * - * Generated from protobuf field optional string json_name = 10; - * @return string - */ - public function getJsonName() - { - return isset($this->json_name) ? $this->json_name : ''; - } - - public function hasJsonName() - { - return isset($this->json_name); - } - - public function clearJsonName() - { - unset($this->json_name); - } - - /** - * JSON name of this field. The value is set by protocol compiler. If the - * user has set a "json_name" option on this field, that option's value - * will be used. Otherwise, it's deduced from the field's name by converting - * it to camelCase. - * - * Generated from protobuf field optional string json_name = 10; - * @param string $var - * @return $this - */ - public function setJsonName($var) - { - GPBUtil::checkString($var, True); - $this->json_name = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; - * @return \Google\Protobuf\Internal\FieldOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.FieldOptions options = 8; - * @param \Google\Protobuf\Internal\FieldOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\FieldOptions::class); - $this->options = $var; - - return $this; - } - - /** - * If true, this is a proto3 "optional". When a proto3 field is optional, it - * tracks presence regardless of field type. - * When proto3_optional is true, this field must be belong to a oneof to - * signal to old proto3 clients that presence is tracked for this field. This - * oneof is known as a "synthetic" oneof, and this field must be its sole - * member (each proto3 optional field gets its own synthetic oneof). Synthetic - * oneofs exist in the descriptor only, and do not generate any API. Synthetic - * oneofs must be ordered after all "real" oneofs. - * For message fields, proto3_optional doesn't create any semantic change, - * since non-repeated message fields always track presence. However it still - * indicates the semantic detail of whether the user wrote "optional" or not. - * This can be useful for round-tripping the .proto file. For consistency we - * give message fields a synthetic oneof also, even though it is not required - * to track presence. This is especially important because the parser can't - * tell if a field is a message or an enum, so it must always create a - * synthetic oneof. - * Proto2 optional fields do not set this flag, because they already indicate - * optional with `LABEL_OPTIONAL`. - * - * Generated from protobuf field optional bool proto3_optional = 17; - * @return bool - */ - public function getProto3Optional() - { - return isset($this->proto3_optional) ? $this->proto3_optional : false; - } - - public function hasProto3Optional() - { - return isset($this->proto3_optional); - } - - public function clearProto3Optional() - { - unset($this->proto3_optional); - } - - /** - * If true, this is a proto3 "optional". When a proto3 field is optional, it - * tracks presence regardless of field type. - * When proto3_optional is true, this field must be belong to a oneof to - * signal to old proto3 clients that presence is tracked for this field. This - * oneof is known as a "synthetic" oneof, and this field must be its sole - * member (each proto3 optional field gets its own synthetic oneof). Synthetic - * oneofs exist in the descriptor only, and do not generate any API. Synthetic - * oneofs must be ordered after all "real" oneofs. - * For message fields, proto3_optional doesn't create any semantic change, - * since non-repeated message fields always track presence. However it still - * indicates the semantic detail of whether the user wrote "optional" or not. - * This can be useful for round-tripping the .proto file. For consistency we - * give message fields a synthetic oneof also, even though it is not required - * to track presence. This is especially important because the parser can't - * tell if a field is a message or an enum, so it must always create a - * synthetic oneof. - * Proto2 optional fields do not set this flag, because they already indicate - * optional with `LABEL_OPTIONAL`. - * - * Generated from protobuf field optional bool proto3_optional = 17; - * @param bool $var - * @return $this - */ - public function setProto3Optional($var) - { - GPBUtil::checkBool($var); - $this->proto3_optional = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php deleted file mode 100644 index a54b228..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php +++ /dev/null @@ -1,58 +0,0 @@ -google.protobuf.FieldDescriptorProto.Label - */ -class Label -{ - /** - * 0 is reserved for errors - * - * Generated from protobuf enum LABEL_OPTIONAL = 1; - */ - const LABEL_OPTIONAL = 1; - /** - * Generated from protobuf enum LABEL_REQUIRED = 2; - */ - const LABEL_REQUIRED = 2; - /** - * Generated from protobuf enum LABEL_REPEATED = 3; - */ - const LABEL_REPEATED = 3; - - private static $valueToName = [ - self::LABEL_OPTIONAL => 'LABEL_OPTIONAL', - self::LABEL_REQUIRED => 'LABEL_REQUIRED', - self::LABEL_REPEATED => 'LABEL_REPEATED', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Label::class, \Google\Protobuf\Internal\FieldDescriptorProto_Label::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php deleted file mode 100644 index 6072e99..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php +++ /dev/null @@ -1,153 +0,0 @@ -google.protobuf.FieldDescriptorProto.Type - */ -class Type -{ - /** - * 0 is reserved for errors. - * Order is weird for historical reasons. - * - * Generated from protobuf enum TYPE_DOUBLE = 1; - */ - const TYPE_DOUBLE = 1; - /** - * Generated from protobuf enum TYPE_FLOAT = 2; - */ - const TYPE_FLOAT = 2; - /** - * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if - * negative values are likely. - * - * Generated from protobuf enum TYPE_INT64 = 3; - */ - const TYPE_INT64 = 3; - /** - * Generated from protobuf enum TYPE_UINT64 = 4; - */ - const TYPE_UINT64 = 4; - /** - * Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if - * negative values are likely. - * - * Generated from protobuf enum TYPE_INT32 = 5; - */ - const TYPE_INT32 = 5; - /** - * Generated from protobuf enum TYPE_FIXED64 = 6; - */ - const TYPE_FIXED64 = 6; - /** - * Generated from protobuf enum TYPE_FIXED32 = 7; - */ - const TYPE_FIXED32 = 7; - /** - * Generated from protobuf enum TYPE_BOOL = 8; - */ - const TYPE_BOOL = 8; - /** - * Generated from protobuf enum TYPE_STRING = 9; - */ - const TYPE_STRING = 9; - /** - * Tag-delimited aggregate. - * Group type is deprecated and not supported in proto3. However, Proto3 - * implementations should still be able to parse the group wire format and - * treat group fields as unknown fields. - * - * Generated from protobuf enum TYPE_GROUP = 10; - */ - const TYPE_GROUP = 10; - /** - * Length-delimited aggregate. - * - * Generated from protobuf enum TYPE_MESSAGE = 11; - */ - const TYPE_MESSAGE = 11; - /** - * New in version 2. - * - * Generated from protobuf enum TYPE_BYTES = 12; - */ - const TYPE_BYTES = 12; - /** - * Generated from protobuf enum TYPE_UINT32 = 13; - */ - const TYPE_UINT32 = 13; - /** - * Generated from protobuf enum TYPE_ENUM = 14; - */ - const TYPE_ENUM = 14; - /** - * Generated from protobuf enum TYPE_SFIXED32 = 15; - */ - const TYPE_SFIXED32 = 15; - /** - * Generated from protobuf enum TYPE_SFIXED64 = 16; - */ - const TYPE_SFIXED64 = 16; - /** - * Uses ZigZag encoding. - * - * Generated from protobuf enum TYPE_SINT32 = 17; - */ - const TYPE_SINT32 = 17; - /** - * Uses ZigZag encoding. - * - * Generated from protobuf enum TYPE_SINT64 = 18; - */ - const TYPE_SINT64 = 18; - - private static $valueToName = [ - self::TYPE_DOUBLE => 'TYPE_DOUBLE', - self::TYPE_FLOAT => 'TYPE_FLOAT', - self::TYPE_INT64 => 'TYPE_INT64', - self::TYPE_UINT64 => 'TYPE_UINT64', - self::TYPE_INT32 => 'TYPE_INT32', - self::TYPE_FIXED64 => 'TYPE_FIXED64', - self::TYPE_FIXED32 => 'TYPE_FIXED32', - self::TYPE_BOOL => 'TYPE_BOOL', - self::TYPE_STRING => 'TYPE_STRING', - self::TYPE_GROUP => 'TYPE_GROUP', - self::TYPE_MESSAGE => 'TYPE_MESSAGE', - self::TYPE_BYTES => 'TYPE_BYTES', - self::TYPE_UINT32 => 'TYPE_UINT32', - self::TYPE_ENUM => 'TYPE_ENUM', - self::TYPE_SFIXED32 => 'TYPE_SFIXED32', - self::TYPE_SFIXED64 => 'TYPE_SFIXED64', - self::TYPE_SINT32 => 'TYPE_SINT32', - self::TYPE_SINT64 => 'TYPE_SINT64', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Type::class, \Google\Protobuf\Internal\FieldDescriptorProto_Type::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php deleted file mode 100644 index 218a846..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto_Label.php +++ /dev/null @@ -1,16 +0,0 @@ -google.protobuf.FieldOptions - */ -class FieldOptions extends \Google\Protobuf\Internal\Message -{ - /** - * The ctype option instructs the C++ code generator to use a different - * representation of the field than it normally would. See the specific - * options below. This option is not yet implemented in the open source - * release -- sorry, we'll try to include it in a future version! - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - */ - protected $ctype = null; - /** - * The packed option can be enabled for repeated primitive fields to enable - * a more efficient representation on the wire. Rather than repeatedly - * writing the tag and type for each element, the entire array is encoded as - * a single length-delimited blob. In proto3, only explicit setting it to - * false will avoid using packed encoding. - * - * Generated from protobuf field optional bool packed = 2; - */ - protected $packed = null; - /** - * The jstype option determines the JavaScript type used for values of the - * field. The option is permitted only for 64 bit integral and fixed types - * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - * is represented as JavaScript string, which avoids loss of precision that - * can happen when a large value is converted to a floating point JavaScript. - * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - * use the JavaScript "number" type. The behavior of the default option - * JS_NORMAL is implementation dependent. - * This option is an enum to permit additional types to be added, e.g. - * goog.math.Integer. - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - */ - protected $jstype = null; - /** - * Should this field be parsed lazily? Lazy applies only to message-type - * fields. It means that when the outer message is initially parsed, the - * inner message's contents will not be parsed but instead stored in encoded - * form. The inner message will actually be parsed when it is first accessed. - * This is only a hint. Implementations are free to choose whether to use - * eager or lazy parsing regardless of the value of this option. However, - * setting this option true suggests that the protocol author believes that - * using lazy parsing on this field is worth the additional bookkeeping - * overhead typically needed to implement it. - * This option does not affect the public interface of any generated code; - * all method signatures remain the same. Furthermore, thread-safety of the - * interface is not affected by this option; const methods remain safe to - * call from multiple threads concurrently, while non-const methods continue - * to require exclusive access. - * Note that implementations may choose not to check required fields within - * a lazy sub-message. That is, calling IsInitialized() on the outer message - * may return true even if the inner message has missing required fields. - * This is necessary because otherwise the inner message would have to be - * parsed in order to perform the check, defeating the purpose of lazy - * parsing. An implementation which chooses not to check required fields - * must be consistent about it. That is, for any particular sub-message, the - * implementation must either *always* check its required fields, or *never* - * check its required fields, regardless of whether or not the message has - * been parsed. - * As of 2021, lazy does no correctness checks on the byte stream during - * parsing. This may lead to crashes if and when an invalid byte stream is - * finally parsed upon access. - * TODO(b/211906113): Enable validation on lazy fields. - * - * Generated from protobuf field optional bool lazy = 5 [default = false]; - */ - protected $lazy = null; - /** - * unverified_lazy does no correctness checks on the byte stream. This should - * only be used where lazy with verification is prohibitive for performance - * reasons. - * - * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; - */ - protected $unverified_lazy = null; - /** - * Is this field deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for accessors, or it will be completely ignored; in the very least, this - * is a formalization for deprecating fields. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - */ - protected $deprecated = null; - /** - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field optional bool weak = 10 [default = false]; - */ - protected $weak = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $ctype - * The ctype option instructs the C++ code generator to use a different - * representation of the field than it normally would. See the specific - * options below. This option is not yet implemented in the open source - * release -- sorry, we'll try to include it in a future version! - * @type bool $packed - * The packed option can be enabled for repeated primitive fields to enable - * a more efficient representation on the wire. Rather than repeatedly - * writing the tag and type for each element, the entire array is encoded as - * a single length-delimited blob. In proto3, only explicit setting it to - * false will avoid using packed encoding. - * @type int $jstype - * The jstype option determines the JavaScript type used for values of the - * field. The option is permitted only for 64 bit integral and fixed types - * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - * is represented as JavaScript string, which avoids loss of precision that - * can happen when a large value is converted to a floating point JavaScript. - * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - * use the JavaScript "number" type. The behavior of the default option - * JS_NORMAL is implementation dependent. - * This option is an enum to permit additional types to be added, e.g. - * goog.math.Integer. - * @type bool $lazy - * Should this field be parsed lazily? Lazy applies only to message-type - * fields. It means that when the outer message is initially parsed, the - * inner message's contents will not be parsed but instead stored in encoded - * form. The inner message will actually be parsed when it is first accessed. - * This is only a hint. Implementations are free to choose whether to use - * eager or lazy parsing regardless of the value of this option. However, - * setting this option true suggests that the protocol author believes that - * using lazy parsing on this field is worth the additional bookkeeping - * overhead typically needed to implement it. - * This option does not affect the public interface of any generated code; - * all method signatures remain the same. Furthermore, thread-safety of the - * interface is not affected by this option; const methods remain safe to - * call from multiple threads concurrently, while non-const methods continue - * to require exclusive access. - * Note that implementations may choose not to check required fields within - * a lazy sub-message. That is, calling IsInitialized() on the outer message - * may return true even if the inner message has missing required fields. - * This is necessary because otherwise the inner message would have to be - * parsed in order to perform the check, defeating the purpose of lazy - * parsing. An implementation which chooses not to check required fields - * must be consistent about it. That is, for any particular sub-message, the - * implementation must either *always* check its required fields, or *never* - * check its required fields, regardless of whether or not the message has - * been parsed. - * As of 2021, lazy does no correctness checks on the byte stream during - * parsing. This may lead to crashes if and when an invalid byte stream is - * finally parsed upon access. - * TODO(b/211906113): Enable validation on lazy fields. - * @type bool $unverified_lazy - * unverified_lazy does no correctness checks on the byte stream. This should - * only be used where lazy with verification is prohibitive for performance - * reasons. - * @type bool $deprecated - * Is this field deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for accessors, or it will be completely ignored; in the very least, this - * is a formalization for deprecating fields. - * @type bool $weak - * For Google-internal migration only. Do not use. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * The ctype option instructs the C++ code generator to use a different - * representation of the field than it normally would. See the specific - * options below. This option is not yet implemented in the open source - * release -- sorry, we'll try to include it in a future version! - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - * @return int - */ - public function getCtype() - { - return isset($this->ctype) ? $this->ctype : 0; - } - - public function hasCtype() - { - return isset($this->ctype); - } - - public function clearCtype() - { - unset($this->ctype); - } - - /** - * The ctype option instructs the C++ code generator to use a different - * representation of the field than it normally would. See the specific - * options below. This option is not yet implemented in the open source - * release -- sorry, we'll try to include it in a future version! - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; - * @param int $var - * @return $this - */ - public function setCtype($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldOptions\CType::class); - $this->ctype = $var; - - return $this; - } - - /** - * The packed option can be enabled for repeated primitive fields to enable - * a more efficient representation on the wire. Rather than repeatedly - * writing the tag and type for each element, the entire array is encoded as - * a single length-delimited blob. In proto3, only explicit setting it to - * false will avoid using packed encoding. - * - * Generated from protobuf field optional bool packed = 2; - * @return bool - */ - public function getPacked() - { - return isset($this->packed) ? $this->packed : false; - } - - public function hasPacked() - { - return isset($this->packed); - } - - public function clearPacked() - { - unset($this->packed); - } - - /** - * The packed option can be enabled for repeated primitive fields to enable - * a more efficient representation on the wire. Rather than repeatedly - * writing the tag and type for each element, the entire array is encoded as - * a single length-delimited blob. In proto3, only explicit setting it to - * false will avoid using packed encoding. - * - * Generated from protobuf field optional bool packed = 2; - * @param bool $var - * @return $this - */ - public function setPacked($var) - { - GPBUtil::checkBool($var); - $this->packed = $var; - - return $this; - } - - /** - * The jstype option determines the JavaScript type used for values of the - * field. The option is permitted only for 64 bit integral and fixed types - * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - * is represented as JavaScript string, which avoids loss of precision that - * can happen when a large value is converted to a floating point JavaScript. - * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - * use the JavaScript "number" type. The behavior of the default option - * JS_NORMAL is implementation dependent. - * This option is an enum to permit additional types to be added, e.g. - * goog.math.Integer. - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - * @return int - */ - public function getJstype() - { - return isset($this->jstype) ? $this->jstype : 0; - } - - public function hasJstype() - { - return isset($this->jstype); - } - - public function clearJstype() - { - unset($this->jstype); - } - - /** - * The jstype option determines the JavaScript type used for values of the - * field. The option is permitted only for 64 bit integral and fixed types - * (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - * is represented as JavaScript string, which avoids loss of precision that - * can happen when a large value is converted to a floating point JavaScript. - * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - * use the JavaScript "number" type. The behavior of the default option - * JS_NORMAL is implementation dependent. - * This option is an enum to permit additional types to be added, e.g. - * goog.math.Integer. - * - * Generated from protobuf field optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; - * @param int $var - * @return $this - */ - public function setJstype($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FieldOptions\JSType::class); - $this->jstype = $var; - - return $this; - } - - /** - * Should this field be parsed lazily? Lazy applies only to message-type - * fields. It means that when the outer message is initially parsed, the - * inner message's contents will not be parsed but instead stored in encoded - * form. The inner message will actually be parsed when it is first accessed. - * This is only a hint. Implementations are free to choose whether to use - * eager or lazy parsing regardless of the value of this option. However, - * setting this option true suggests that the protocol author believes that - * using lazy parsing on this field is worth the additional bookkeeping - * overhead typically needed to implement it. - * This option does not affect the public interface of any generated code; - * all method signatures remain the same. Furthermore, thread-safety of the - * interface is not affected by this option; const methods remain safe to - * call from multiple threads concurrently, while non-const methods continue - * to require exclusive access. - * Note that implementations may choose not to check required fields within - * a lazy sub-message. That is, calling IsInitialized() on the outer message - * may return true even if the inner message has missing required fields. - * This is necessary because otherwise the inner message would have to be - * parsed in order to perform the check, defeating the purpose of lazy - * parsing. An implementation which chooses not to check required fields - * must be consistent about it. That is, for any particular sub-message, the - * implementation must either *always* check its required fields, or *never* - * check its required fields, regardless of whether or not the message has - * been parsed. - * As of 2021, lazy does no correctness checks on the byte stream during - * parsing. This may lead to crashes if and when an invalid byte stream is - * finally parsed upon access. - * TODO(b/211906113): Enable validation on lazy fields. - * - * Generated from protobuf field optional bool lazy = 5 [default = false]; - * @return bool - */ - public function getLazy() - { - return isset($this->lazy) ? $this->lazy : false; - } - - public function hasLazy() - { - return isset($this->lazy); - } - - public function clearLazy() - { - unset($this->lazy); - } - - /** - * Should this field be parsed lazily? Lazy applies only to message-type - * fields. It means that when the outer message is initially parsed, the - * inner message's contents will not be parsed but instead stored in encoded - * form. The inner message will actually be parsed when it is first accessed. - * This is only a hint. Implementations are free to choose whether to use - * eager or lazy parsing regardless of the value of this option. However, - * setting this option true suggests that the protocol author believes that - * using lazy parsing on this field is worth the additional bookkeeping - * overhead typically needed to implement it. - * This option does not affect the public interface of any generated code; - * all method signatures remain the same. Furthermore, thread-safety of the - * interface is not affected by this option; const methods remain safe to - * call from multiple threads concurrently, while non-const methods continue - * to require exclusive access. - * Note that implementations may choose not to check required fields within - * a lazy sub-message. That is, calling IsInitialized() on the outer message - * may return true even if the inner message has missing required fields. - * This is necessary because otherwise the inner message would have to be - * parsed in order to perform the check, defeating the purpose of lazy - * parsing. An implementation which chooses not to check required fields - * must be consistent about it. That is, for any particular sub-message, the - * implementation must either *always* check its required fields, or *never* - * check its required fields, regardless of whether or not the message has - * been parsed. - * As of 2021, lazy does no correctness checks on the byte stream during - * parsing. This may lead to crashes if and when an invalid byte stream is - * finally parsed upon access. - * TODO(b/211906113): Enable validation on lazy fields. - * - * Generated from protobuf field optional bool lazy = 5 [default = false]; - * @param bool $var - * @return $this - */ - public function setLazy($var) - { - GPBUtil::checkBool($var); - $this->lazy = $var; - - return $this; - } - - /** - * unverified_lazy does no correctness checks on the byte stream. This should - * only be used where lazy with verification is prohibitive for performance - * reasons. - * - * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; - * @return bool - */ - public function getUnverifiedLazy() - { - return isset($this->unverified_lazy) ? $this->unverified_lazy : false; - } - - public function hasUnverifiedLazy() - { - return isset($this->unverified_lazy); - } - - public function clearUnverifiedLazy() - { - unset($this->unverified_lazy); - } - - /** - * unverified_lazy does no correctness checks on the byte stream. This should - * only be used where lazy with verification is prohibitive for performance - * reasons. - * - * Generated from protobuf field optional bool unverified_lazy = 15 [default = false]; - * @param bool $var - * @return $this - */ - public function setUnverifiedLazy($var) - { - GPBUtil::checkBool($var); - $this->unverified_lazy = $var; - - return $this; - } - - /** - * Is this field deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for accessors, or it will be completely ignored; in the very least, this - * is a formalization for deprecating fields. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this field deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for accessors, or it will be completely ignored; in the very least, this - * is a formalization for deprecating fields. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field optional bool weak = 10 [default = false]; - * @return bool - */ - public function getWeak() - { - return isset($this->weak) ? $this->weak : false; - } - - public function hasWeak() - { - return isset($this->weak); - } - - public function clearWeak() - { - unset($this->weak); - } - - /** - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field optional bool weak = 10 [default = false]; - * @param bool $var - * @return $this - */ - public function setWeak($var) - { - GPBUtil::checkBool($var); - $this->weak = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php deleted file mode 100644 index ba9eb4a..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php +++ /dev/null @@ -1,58 +0,0 @@ -google.protobuf.FieldOptions.CType - */ -class CType -{ - /** - * Default mode. - * - * Generated from protobuf enum STRING = 0; - */ - const STRING = 0; - /** - * Generated from protobuf enum CORD = 1; - */ - const CORD = 1; - /** - * Generated from protobuf enum STRING_PIECE = 2; - */ - const STRING_PIECE = 2; - - private static $valueToName = [ - self::STRING => 'STRING', - self::CORD => 'CORD', - self::STRING_PIECE => 'STRING_PIECE', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(CType::class, \Google\Protobuf\Internal\FieldOptions_CType::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php deleted file mode 100644 index 175a433..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php +++ /dev/null @@ -1,62 +0,0 @@ -google.protobuf.FieldOptions.JSType - */ -class JSType -{ - /** - * Use the default type. - * - * Generated from protobuf enum JS_NORMAL = 0; - */ - const JS_NORMAL = 0; - /** - * Use JavaScript strings. - * - * Generated from protobuf enum JS_STRING = 1; - */ - const JS_STRING = 1; - /** - * Use JavaScript numbers. - * - * Generated from protobuf enum JS_NUMBER = 2; - */ - const JS_NUMBER = 2; - - private static $valueToName = [ - self::JS_NORMAL => 'JS_NORMAL', - self::JS_STRING => 'JS_STRING', - self::JS_NUMBER => 'JS_NUMBER', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(JSType::class, \Google\Protobuf\Internal\FieldOptions_JSType::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php deleted file mode 100644 index 4d18783..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions_CType.php +++ /dev/null @@ -1,16 +0,0 @@ -package = $package; - } - - public function getPackage() - { - return $this->package; - } - - public function getMessageType() - { - return $this->message_type; - } - - public function addMessageType($desc) - { - $this->message_type[] = $desc; - } - - public function getEnumType() - { - return $this->enum_type; - } - - public function addEnumType($desc) - { - $this->enum_type[]= $desc; - } - - public static function buildFromProto($proto) - { - $file = new FileDescriptor(); - $file->setPackage($proto->getPackage()); - foreach ($proto->getMessageType() as $message_proto) { - $file->addMessageType(Descriptor::buildFromProto( - $message_proto, $proto, "")); - } - foreach ($proto->getEnumType() as $enum_proto) { - $file->addEnumType( - EnumDescriptor::buildFromProto( - $enum_proto, - $proto, - "")); - } - return $file; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php deleted file mode 100644 index 5ba7db6..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php +++ /dev/null @@ -1,485 +0,0 @@ -google.protobuf.FileDescriptorProto - */ -class FileDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * file name, relative to root of source tree - * - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * e.g. "foo", "foo.bar", etc. - * - * Generated from protobuf field optional string package = 2; - */ - protected $package = null; - /** - * Names of files imported by this file. - * - * Generated from protobuf field repeated string dependency = 3; - */ - private $dependency; - /** - * Indexes of the public imported files in the dependency list above. - * - * Generated from protobuf field repeated int32 public_dependency = 10; - */ - private $public_dependency; - /** - * Indexes of the weak imported files in the dependency list. - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field repeated int32 weak_dependency = 11; - */ - private $weak_dependency; - /** - * All top-level definitions in this file. - * - * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; - */ - private $message_type; - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; - */ - private $enum_type; - /** - * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; - */ - private $service; - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; - */ - private $extension; - /** - * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; - */ - protected $options = null; - /** - * This field contains optional information about the original source code. - * You may safely remove this entire field without harming runtime - * functionality of the descriptors -- the information is needed only by - * development tools. - * - * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; - */ - protected $source_code_info = null; - /** - * The syntax of the proto file. - * The supported values are "proto2" and "proto3". - * - * Generated from protobuf field optional string syntax = 12; - */ - protected $syntax = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * file name, relative to root of source tree - * @type string $package - * e.g. "foo", "foo.bar", etc. - * @type array|\Google\Protobuf\Internal\RepeatedField $dependency - * Names of files imported by this file. - * @type array|\Google\Protobuf\Internal\RepeatedField $public_dependency - * Indexes of the public imported files in the dependency list above. - * @type array|\Google\Protobuf\Internal\RepeatedField $weak_dependency - * Indexes of the weak imported files in the dependency list. - * For Google-internal migration only. Do not use. - * @type array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $message_type - * All top-level definitions in this file. - * @type array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $enum_type - * @type array<\Google\Protobuf\Internal\ServiceDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $service - * @type array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $extension - * @type \Google\Protobuf\Internal\FileOptions $options - * @type \Google\Protobuf\Internal\SourceCodeInfo $source_code_info - * This field contains optional information about the original source code. - * You may safely remove this entire field without harming runtime - * functionality of the descriptors -- the information is needed only by - * development tools. - * @type string $syntax - * The syntax of the proto file. - * The supported values are "proto2" and "proto3". - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * file name, relative to root of source tree - * - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * file name, relative to root of source tree - * - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * e.g. "foo", "foo.bar", etc. - * - * Generated from protobuf field optional string package = 2; - * @return string - */ - public function getPackage() - { - return isset($this->package) ? $this->package : ''; - } - - public function hasPackage() - { - return isset($this->package); - } - - public function clearPackage() - { - unset($this->package); - } - - /** - * e.g. "foo", "foo.bar", etc. - * - * Generated from protobuf field optional string package = 2; - * @param string $var - * @return $this - */ - public function setPackage($var) - { - GPBUtil::checkString($var, True); - $this->package = $var; - - return $this; - } - - /** - * Names of files imported by this file. - * - * Generated from protobuf field repeated string dependency = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getDependency() - { - return $this->dependency; - } - - /** - * Names of files imported by this file. - * - * Generated from protobuf field repeated string dependency = 3; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setDependency($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->dependency = $arr; - - return $this; - } - - /** - * Indexes of the public imported files in the dependency list above. - * - * Generated from protobuf field repeated int32 public_dependency = 10; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getPublicDependency() - { - return $this->public_dependency; - } - - /** - * Indexes of the public imported files in the dependency list above. - * - * Generated from protobuf field repeated int32 public_dependency = 10; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setPublicDependency($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); - $this->public_dependency = $arr; - - return $this; - } - - /** - * Indexes of the weak imported files in the dependency list. - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field repeated int32 weak_dependency = 11; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getWeakDependency() - { - return $this->weak_dependency; - } - - /** - * Indexes of the weak imported files in the dependency list. - * For Google-internal migration only. Do not use. - * - * Generated from protobuf field repeated int32 weak_dependency = 11; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setWeakDependency($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); - $this->weak_dependency = $arr; - - return $this; - } - - /** - * All top-level definitions in this file. - * - * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getMessageType() - { - return $this->message_type; - } - - /** - * All top-level definitions in this file. - * - * Generated from protobuf field repeated .google.protobuf.DescriptorProto message_type = 4; - * @param array<\Google\Protobuf\Internal\DescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setMessageType($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\DescriptorProto::class); - $this->message_type = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getEnumType() - { - return $this->enum_type; - } - - /** - * Generated from protobuf field repeated .google.protobuf.EnumDescriptorProto enum_type = 5; - * @param array<\Google\Protobuf\Internal\EnumDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setEnumType($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\EnumDescriptorProto::class); - $this->enum_type = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getService() - { - return $this->service; - } - - /** - * Generated from protobuf field repeated .google.protobuf.ServiceDescriptorProto service = 6; - * @param array<\Google\Protobuf\Internal\ServiceDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setService($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\ServiceDescriptorProto::class); - $this->service = $arr; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getExtension() - { - return $this->extension; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FieldDescriptorProto extension = 7; - * @param array<\Google\Protobuf\Internal\FieldDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setExtension($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FieldDescriptorProto::class); - $this->extension = $arr; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; - * @return \Google\Protobuf\Internal\FileOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.FileOptions options = 8; - * @param \Google\Protobuf\Internal\FileOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\FileOptions::class); - $this->options = $var; - - return $this; - } - - /** - * This field contains optional information about the original source code. - * You may safely remove this entire field without harming runtime - * functionality of the descriptors -- the information is needed only by - * development tools. - * - * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; - * @return \Google\Protobuf\Internal\SourceCodeInfo|null - */ - public function getSourceCodeInfo() - { - return $this->source_code_info; - } - - public function hasSourceCodeInfo() - { - return isset($this->source_code_info); - } - - public function clearSourceCodeInfo() - { - unset($this->source_code_info); - } - - /** - * This field contains optional information about the original source code. - * You may safely remove this entire field without harming runtime - * functionality of the descriptors -- the information is needed only by - * development tools. - * - * Generated from protobuf field optional .google.protobuf.SourceCodeInfo source_code_info = 9; - * @param \Google\Protobuf\Internal\SourceCodeInfo $var - * @return $this - */ - public function setSourceCodeInfo($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\SourceCodeInfo::class); - $this->source_code_info = $var; - - return $this; - } - - /** - * The syntax of the proto file. - * The supported values are "proto2" and "proto3". - * - * Generated from protobuf field optional string syntax = 12; - * @return string - */ - public function getSyntax() - { - return isset($this->syntax) ? $this->syntax : ''; - } - - public function hasSyntax() - { - return isset($this->syntax); - } - - public function clearSyntax() - { - unset($this->syntax); - } - - /** - * The syntax of the proto file. - * The supported values are "proto2" and "proto3". - * - * Generated from protobuf field optional string syntax = 12; - * @param string $var - * @return $this - */ - public function setSyntax($var) - { - GPBUtil::checkString($var, True); - $this->syntax = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php deleted file mode 100644 index 1dae6fb..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php +++ /dev/null @@ -1,63 +0,0 @@ -google.protobuf.FileDescriptorSet - */ -class FileDescriptorSet extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; - */ - private $file; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\FileDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $file - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getFile() - { - return $this->file; - } - - /** - * Generated from protobuf field repeated .google.protobuf.FileDescriptorProto file = 1; - * @param array<\Google\Protobuf\Internal\FileDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setFile($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\FileDescriptorProto::class); - $this->file = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php deleted file mode 100644 index 43931be..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php +++ /dev/null @@ -1,1106 +0,0 @@ -google.protobuf.FileOptions - */ -class FileOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Sets the Java package where classes generated from this .proto will be - * placed. By default, the proto package is used, but this is often - * inappropriate because proto packages do not normally start with backwards - * domain names. - * - * Generated from protobuf field optional string java_package = 1; - */ - protected $java_package = null; - /** - * Controls the name of the wrapper Java class generated for the .proto file. - * That class will always contain the .proto file's getDescriptor() method as - * well as any top-level extensions defined in the .proto file. - * If java_multiple_files is disabled, then all the other classes from the - * .proto file will be nested inside the single wrapper outer class. - * - * Generated from protobuf field optional string java_outer_classname = 8; - */ - protected $java_outer_classname = null; - /** - * If enabled, then the Java code generator will generate a separate .java - * file for each top-level message, enum, and service defined in the .proto - * file. Thus, these types will *not* be nested inside the wrapper class - * named by java_outer_classname. However, the wrapper class will still be - * generated to contain the file's getDescriptor() method as well as any - * top-level extensions defined in the file. - * - * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; - */ - protected $java_multiple_files = null; - /** - * This option does nothing. - * - * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - * @deprecated - */ - protected $java_generate_equals_and_hash = null; - /** - * If set true, then the Java2 code generator will generate code that - * throws an exception whenever an attempt is made to assign a non-UTF-8 - * byte sequence to a string field. - * Message reflection will do the same. - * However, an extension field still accepts non-UTF-8 byte sequences. - * This option has no effect on when used with the lite runtime. - * - * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; - */ - protected $java_string_check_utf8 = null; - /** - * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - */ - protected $optimize_for = null; - /** - * Sets the Go package where structs generated from this .proto will be - * placed. If omitted, the Go package will be derived from the following: - * - The basename of the package import path, if provided. - * - Otherwise, the package statement in the .proto file, if present. - * - Otherwise, the basename of the .proto file, without extension. - * - * Generated from protobuf field optional string go_package = 11; - */ - protected $go_package = null; - /** - * Should generic services be generated in each language? "Generic" services - * are not specific to any particular RPC system. They are generated by the - * main code generators in each language (without additional plugins). - * Generic services were the only kind of service generation supported by - * early versions of google.protobuf. - * Generic services are now considered deprecated in favor of using plugins - * that generate code specific to your particular RPC system. Therefore, - * these default to false. Old code which depends on generic services should - * explicitly set them to true. - * - * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; - */ - protected $cc_generic_services = null; - /** - * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; - */ - protected $java_generic_services = null; - /** - * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; - */ - protected $py_generic_services = null; - /** - * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; - */ - protected $php_generic_services = null; - /** - * Is this file deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for everything in the file, or it will be completely ignored; in the very - * least, this is a formalization for deprecating files. - * - * Generated from protobuf field optional bool deprecated = 23 [default = false]; - */ - protected $deprecated = null; - /** - * Enables the use of arenas for the proto messages in this file. This applies - * only to generated classes for C++. - * - * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; - */ - protected $cc_enable_arenas = null; - /** - * Sets the objective c class prefix which is prepended to all objective c - * generated classes from this .proto. There is no default. - * - * Generated from protobuf field optional string objc_class_prefix = 36; - */ - protected $objc_class_prefix = null; - /** - * Namespace for generated classes; defaults to the package. - * - * Generated from protobuf field optional string csharp_namespace = 37; - */ - protected $csharp_namespace = null; - /** - * By default Swift generators will take the proto package and CamelCase it - * replacing '.' with underscore and use that to prefix the types/symbols - * defined. When this options is provided, they will use this value instead - * to prefix the types/symbols defined. - * - * Generated from protobuf field optional string swift_prefix = 39; - */ - protected $swift_prefix = null; - /** - * Sets the php class prefix which is prepended to all php generated classes - * from this .proto. Default is empty. - * - * Generated from protobuf field optional string php_class_prefix = 40; - */ - protected $php_class_prefix = null; - /** - * Use this option to change the namespace of php generated classes. Default - * is empty. When this option is empty, the package name will be used for - * determining the namespace. - * - * Generated from protobuf field optional string php_namespace = 41; - */ - protected $php_namespace = null; - /** - * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be - * used for determining the namespace. - * - * Generated from protobuf field optional string php_metadata_namespace = 44; - */ - protected $php_metadata_namespace = null; - /** - * Use this option to change the package of ruby generated classes. Default - * is empty. When this option is not set, the package name will be used for - * determining the ruby package. - * - * Generated from protobuf field optional string ruby_package = 45; - */ - protected $ruby_package = null; - /** - * The parser stores options it doesn't recognize here. - * See the documentation for the "Options" section above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $java_package - * Sets the Java package where classes generated from this .proto will be - * placed. By default, the proto package is used, but this is often - * inappropriate because proto packages do not normally start with backwards - * domain names. - * @type string $java_outer_classname - * Controls the name of the wrapper Java class generated for the .proto file. - * That class will always contain the .proto file's getDescriptor() method as - * well as any top-level extensions defined in the .proto file. - * If java_multiple_files is disabled, then all the other classes from the - * .proto file will be nested inside the single wrapper outer class. - * @type bool $java_multiple_files - * If enabled, then the Java code generator will generate a separate .java - * file for each top-level message, enum, and service defined in the .proto - * file. Thus, these types will *not* be nested inside the wrapper class - * named by java_outer_classname. However, the wrapper class will still be - * generated to contain the file's getDescriptor() method as well as any - * top-level extensions defined in the file. - * @type bool $java_generate_equals_and_hash - * This option does nothing. - * @type bool $java_string_check_utf8 - * If set true, then the Java2 code generator will generate code that - * throws an exception whenever an attempt is made to assign a non-UTF-8 - * byte sequence to a string field. - * Message reflection will do the same. - * However, an extension field still accepts non-UTF-8 byte sequences. - * This option has no effect on when used with the lite runtime. - * @type int $optimize_for - * @type string $go_package - * Sets the Go package where structs generated from this .proto will be - * placed. If omitted, the Go package will be derived from the following: - * - The basename of the package import path, if provided. - * - Otherwise, the package statement in the .proto file, if present. - * - Otherwise, the basename of the .proto file, without extension. - * @type bool $cc_generic_services - * Should generic services be generated in each language? "Generic" services - * are not specific to any particular RPC system. They are generated by the - * main code generators in each language (without additional plugins). - * Generic services were the only kind of service generation supported by - * early versions of google.protobuf. - * Generic services are now considered deprecated in favor of using plugins - * that generate code specific to your particular RPC system. Therefore, - * these default to false. Old code which depends on generic services should - * explicitly set them to true. - * @type bool $java_generic_services - * @type bool $py_generic_services - * @type bool $php_generic_services - * @type bool $deprecated - * Is this file deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for everything in the file, or it will be completely ignored; in the very - * least, this is a formalization for deprecating files. - * @type bool $cc_enable_arenas - * Enables the use of arenas for the proto messages in this file. This applies - * only to generated classes for C++. - * @type string $objc_class_prefix - * Sets the objective c class prefix which is prepended to all objective c - * generated classes from this .proto. There is no default. - * @type string $csharp_namespace - * Namespace for generated classes; defaults to the package. - * @type string $swift_prefix - * By default Swift generators will take the proto package and CamelCase it - * replacing '.' with underscore and use that to prefix the types/symbols - * defined. When this options is provided, they will use this value instead - * to prefix the types/symbols defined. - * @type string $php_class_prefix - * Sets the php class prefix which is prepended to all php generated classes - * from this .proto. Default is empty. - * @type string $php_namespace - * Use this option to change the namespace of php generated classes. Default - * is empty. When this option is empty, the package name will be used for - * determining the namespace. - * @type string $php_metadata_namespace - * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be - * used for determining the namespace. - * @type string $ruby_package - * Use this option to change the package of ruby generated classes. Default - * is empty. When this option is not set, the package name will be used for - * determining the ruby package. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. - * See the documentation for the "Options" section above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Sets the Java package where classes generated from this .proto will be - * placed. By default, the proto package is used, but this is often - * inappropriate because proto packages do not normally start with backwards - * domain names. - * - * Generated from protobuf field optional string java_package = 1; - * @return string - */ - public function getJavaPackage() - { - return isset($this->java_package) ? $this->java_package : ''; - } - - public function hasJavaPackage() - { - return isset($this->java_package); - } - - public function clearJavaPackage() - { - unset($this->java_package); - } - - /** - * Sets the Java package where classes generated from this .proto will be - * placed. By default, the proto package is used, but this is often - * inappropriate because proto packages do not normally start with backwards - * domain names. - * - * Generated from protobuf field optional string java_package = 1; - * @param string $var - * @return $this - */ - public function setJavaPackage($var) - { - GPBUtil::checkString($var, True); - $this->java_package = $var; - - return $this; - } - - /** - * Controls the name of the wrapper Java class generated for the .proto file. - * That class will always contain the .proto file's getDescriptor() method as - * well as any top-level extensions defined in the .proto file. - * If java_multiple_files is disabled, then all the other classes from the - * .proto file will be nested inside the single wrapper outer class. - * - * Generated from protobuf field optional string java_outer_classname = 8; - * @return string - */ - public function getJavaOuterClassname() - { - return isset($this->java_outer_classname) ? $this->java_outer_classname : ''; - } - - public function hasJavaOuterClassname() - { - return isset($this->java_outer_classname); - } - - public function clearJavaOuterClassname() - { - unset($this->java_outer_classname); - } - - /** - * Controls the name of the wrapper Java class generated for the .proto file. - * That class will always contain the .proto file's getDescriptor() method as - * well as any top-level extensions defined in the .proto file. - * If java_multiple_files is disabled, then all the other classes from the - * .proto file will be nested inside the single wrapper outer class. - * - * Generated from protobuf field optional string java_outer_classname = 8; - * @param string $var - * @return $this - */ - public function setJavaOuterClassname($var) - { - GPBUtil::checkString($var, True); - $this->java_outer_classname = $var; - - return $this; - } - - /** - * If enabled, then the Java code generator will generate a separate .java - * file for each top-level message, enum, and service defined in the .proto - * file. Thus, these types will *not* be nested inside the wrapper class - * named by java_outer_classname. However, the wrapper class will still be - * generated to contain the file's getDescriptor() method as well as any - * top-level extensions defined in the file. - * - * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; - * @return bool - */ - public function getJavaMultipleFiles() - { - return isset($this->java_multiple_files) ? $this->java_multiple_files : false; - } - - public function hasJavaMultipleFiles() - { - return isset($this->java_multiple_files); - } - - public function clearJavaMultipleFiles() - { - unset($this->java_multiple_files); - } - - /** - * If enabled, then the Java code generator will generate a separate .java - * file for each top-level message, enum, and service defined in the .proto - * file. Thus, these types will *not* be nested inside the wrapper class - * named by java_outer_classname. However, the wrapper class will still be - * generated to contain the file's getDescriptor() method as well as any - * top-level extensions defined in the file. - * - * Generated from protobuf field optional bool java_multiple_files = 10 [default = false]; - * @param bool $var - * @return $this - */ - public function setJavaMultipleFiles($var) - { - GPBUtil::checkBool($var); - $this->java_multiple_files = $var; - - return $this; - } - - /** - * This option does nothing. - * - * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - * @return bool - * @deprecated - */ - public function getJavaGenerateEqualsAndHash() - { - @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); - return isset($this->java_generate_equals_and_hash) ? $this->java_generate_equals_and_hash : false; - } - - public function hasJavaGenerateEqualsAndHash() - { - @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); - return isset($this->java_generate_equals_and_hash); - } - - public function clearJavaGenerateEqualsAndHash() - { - @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); - unset($this->java_generate_equals_and_hash); - } - - /** - * This option does nothing. - * - * Generated from protobuf field optional bool java_generate_equals_and_hash = 20 [deprecated = true]; - * @param bool $var - * @return $this - * @deprecated - */ - public function setJavaGenerateEqualsAndHash($var) - { - @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED); - GPBUtil::checkBool($var); - $this->java_generate_equals_and_hash = $var; - - return $this; - } - - /** - * If set true, then the Java2 code generator will generate code that - * throws an exception whenever an attempt is made to assign a non-UTF-8 - * byte sequence to a string field. - * Message reflection will do the same. - * However, an extension field still accepts non-UTF-8 byte sequences. - * This option has no effect on when used with the lite runtime. - * - * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; - * @return bool - */ - public function getJavaStringCheckUtf8() - { - return isset($this->java_string_check_utf8) ? $this->java_string_check_utf8 : false; - } - - public function hasJavaStringCheckUtf8() - { - return isset($this->java_string_check_utf8); - } - - public function clearJavaStringCheckUtf8() - { - unset($this->java_string_check_utf8); - } - - /** - * If set true, then the Java2 code generator will generate code that - * throws an exception whenever an attempt is made to assign a non-UTF-8 - * byte sequence to a string field. - * Message reflection will do the same. - * However, an extension field still accepts non-UTF-8 byte sequences. - * This option has no effect on when used with the lite runtime. - * - * Generated from protobuf field optional bool java_string_check_utf8 = 27 [default = false]; - * @param bool $var - * @return $this - */ - public function setJavaStringCheckUtf8($var) - { - GPBUtil::checkBool($var); - $this->java_string_check_utf8 = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - * @return int - */ - public function getOptimizeFor() - { - return isset($this->optimize_for) ? $this->optimize_for : 0; - } - - public function hasOptimizeFor() - { - return isset($this->optimize_for); - } - - public function clearOptimizeFor() - { - unset($this->optimize_for); - } - - /** - * Generated from protobuf field optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; - * @param int $var - * @return $this - */ - public function setOptimizeFor($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\FileOptions\OptimizeMode::class); - $this->optimize_for = $var; - - return $this; - } - - /** - * Sets the Go package where structs generated from this .proto will be - * placed. If omitted, the Go package will be derived from the following: - * - The basename of the package import path, if provided. - * - Otherwise, the package statement in the .proto file, if present. - * - Otherwise, the basename of the .proto file, without extension. - * - * Generated from protobuf field optional string go_package = 11; - * @return string - */ - public function getGoPackage() - { - return isset($this->go_package) ? $this->go_package : ''; - } - - public function hasGoPackage() - { - return isset($this->go_package); - } - - public function clearGoPackage() - { - unset($this->go_package); - } - - /** - * Sets the Go package where structs generated from this .proto will be - * placed. If omitted, the Go package will be derived from the following: - * - The basename of the package import path, if provided. - * - Otherwise, the package statement in the .proto file, if present. - * - Otherwise, the basename of the .proto file, without extension. - * - * Generated from protobuf field optional string go_package = 11; - * @param string $var - * @return $this - */ - public function setGoPackage($var) - { - GPBUtil::checkString($var, True); - $this->go_package = $var; - - return $this; - } - - /** - * Should generic services be generated in each language? "Generic" services - * are not specific to any particular RPC system. They are generated by the - * main code generators in each language (without additional plugins). - * Generic services were the only kind of service generation supported by - * early versions of google.protobuf. - * Generic services are now considered deprecated in favor of using plugins - * that generate code specific to your particular RPC system. Therefore, - * these default to false. Old code which depends on generic services should - * explicitly set them to true. - * - * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; - * @return bool - */ - public function getCcGenericServices() - { - return isset($this->cc_generic_services) ? $this->cc_generic_services : false; - } - - public function hasCcGenericServices() - { - return isset($this->cc_generic_services); - } - - public function clearCcGenericServices() - { - unset($this->cc_generic_services); - } - - /** - * Should generic services be generated in each language? "Generic" services - * are not specific to any particular RPC system. They are generated by the - * main code generators in each language (without additional plugins). - * Generic services were the only kind of service generation supported by - * early versions of google.protobuf. - * Generic services are now considered deprecated in favor of using plugins - * that generate code specific to your particular RPC system. Therefore, - * these default to false. Old code which depends on generic services should - * explicitly set them to true. - * - * Generated from protobuf field optional bool cc_generic_services = 16 [default = false]; - * @param bool $var - * @return $this - */ - public function setCcGenericServices($var) - { - GPBUtil::checkBool($var); - $this->cc_generic_services = $var; - - return $this; - } - - /** - * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; - * @return bool - */ - public function getJavaGenericServices() - { - return isset($this->java_generic_services) ? $this->java_generic_services : false; - } - - public function hasJavaGenericServices() - { - return isset($this->java_generic_services); - } - - public function clearJavaGenericServices() - { - unset($this->java_generic_services); - } - - /** - * Generated from protobuf field optional bool java_generic_services = 17 [default = false]; - * @param bool $var - * @return $this - */ - public function setJavaGenericServices($var) - { - GPBUtil::checkBool($var); - $this->java_generic_services = $var; - - return $this; - } - - /** - * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; - * @return bool - */ - public function getPyGenericServices() - { - return isset($this->py_generic_services) ? $this->py_generic_services : false; - } - - public function hasPyGenericServices() - { - return isset($this->py_generic_services); - } - - public function clearPyGenericServices() - { - unset($this->py_generic_services); - } - - /** - * Generated from protobuf field optional bool py_generic_services = 18 [default = false]; - * @param bool $var - * @return $this - */ - public function setPyGenericServices($var) - { - GPBUtil::checkBool($var); - $this->py_generic_services = $var; - - return $this; - } - - /** - * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; - * @return bool - */ - public function getPhpGenericServices() - { - return isset($this->php_generic_services) ? $this->php_generic_services : false; - } - - public function hasPhpGenericServices() - { - return isset($this->php_generic_services); - } - - public function clearPhpGenericServices() - { - unset($this->php_generic_services); - } - - /** - * Generated from protobuf field optional bool php_generic_services = 42 [default = false]; - * @param bool $var - * @return $this - */ - public function setPhpGenericServices($var) - { - GPBUtil::checkBool($var); - $this->php_generic_services = $var; - - return $this; - } - - /** - * Is this file deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for everything in the file, or it will be completely ignored; in the very - * least, this is a formalization for deprecating files. - * - * Generated from protobuf field optional bool deprecated = 23 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this file deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for everything in the file, or it will be completely ignored; in the very - * least, this is a formalization for deprecating files. - * - * Generated from protobuf field optional bool deprecated = 23 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * Enables the use of arenas for the proto messages in this file. This applies - * only to generated classes for C++. - * - * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; - * @return bool - */ - public function getCcEnableArenas() - { - return isset($this->cc_enable_arenas) ? $this->cc_enable_arenas : false; - } - - public function hasCcEnableArenas() - { - return isset($this->cc_enable_arenas); - } - - public function clearCcEnableArenas() - { - unset($this->cc_enable_arenas); - } - - /** - * Enables the use of arenas for the proto messages in this file. This applies - * only to generated classes for C++. - * - * Generated from protobuf field optional bool cc_enable_arenas = 31 [default = true]; - * @param bool $var - * @return $this - */ - public function setCcEnableArenas($var) - { - GPBUtil::checkBool($var); - $this->cc_enable_arenas = $var; - - return $this; - } - - /** - * Sets the objective c class prefix which is prepended to all objective c - * generated classes from this .proto. There is no default. - * - * Generated from protobuf field optional string objc_class_prefix = 36; - * @return string - */ - public function getObjcClassPrefix() - { - return isset($this->objc_class_prefix) ? $this->objc_class_prefix : ''; - } - - public function hasObjcClassPrefix() - { - return isset($this->objc_class_prefix); - } - - public function clearObjcClassPrefix() - { - unset($this->objc_class_prefix); - } - - /** - * Sets the objective c class prefix which is prepended to all objective c - * generated classes from this .proto. There is no default. - * - * Generated from protobuf field optional string objc_class_prefix = 36; - * @param string $var - * @return $this - */ - public function setObjcClassPrefix($var) - { - GPBUtil::checkString($var, True); - $this->objc_class_prefix = $var; - - return $this; - } - - /** - * Namespace for generated classes; defaults to the package. - * - * Generated from protobuf field optional string csharp_namespace = 37; - * @return string - */ - public function getCsharpNamespace() - { - return isset($this->csharp_namespace) ? $this->csharp_namespace : ''; - } - - public function hasCsharpNamespace() - { - return isset($this->csharp_namespace); - } - - public function clearCsharpNamespace() - { - unset($this->csharp_namespace); - } - - /** - * Namespace for generated classes; defaults to the package. - * - * Generated from protobuf field optional string csharp_namespace = 37; - * @param string $var - * @return $this - */ - public function setCsharpNamespace($var) - { - GPBUtil::checkString($var, True); - $this->csharp_namespace = $var; - - return $this; - } - - /** - * By default Swift generators will take the proto package and CamelCase it - * replacing '.' with underscore and use that to prefix the types/symbols - * defined. When this options is provided, they will use this value instead - * to prefix the types/symbols defined. - * - * Generated from protobuf field optional string swift_prefix = 39; - * @return string - */ - public function getSwiftPrefix() - { - return isset($this->swift_prefix) ? $this->swift_prefix : ''; - } - - public function hasSwiftPrefix() - { - return isset($this->swift_prefix); - } - - public function clearSwiftPrefix() - { - unset($this->swift_prefix); - } - - /** - * By default Swift generators will take the proto package and CamelCase it - * replacing '.' with underscore and use that to prefix the types/symbols - * defined. When this options is provided, they will use this value instead - * to prefix the types/symbols defined. - * - * Generated from protobuf field optional string swift_prefix = 39; - * @param string $var - * @return $this - */ - public function setSwiftPrefix($var) - { - GPBUtil::checkString($var, True); - $this->swift_prefix = $var; - - return $this; - } - - /** - * Sets the php class prefix which is prepended to all php generated classes - * from this .proto. Default is empty. - * - * Generated from protobuf field optional string php_class_prefix = 40; - * @return string - */ - public function getPhpClassPrefix() - { - return isset($this->php_class_prefix) ? $this->php_class_prefix : ''; - } - - public function hasPhpClassPrefix() - { - return isset($this->php_class_prefix); - } - - public function clearPhpClassPrefix() - { - unset($this->php_class_prefix); - } - - /** - * Sets the php class prefix which is prepended to all php generated classes - * from this .proto. Default is empty. - * - * Generated from protobuf field optional string php_class_prefix = 40; - * @param string $var - * @return $this - */ - public function setPhpClassPrefix($var) - { - GPBUtil::checkString($var, True); - $this->php_class_prefix = $var; - - return $this; - } - - /** - * Use this option to change the namespace of php generated classes. Default - * is empty. When this option is empty, the package name will be used for - * determining the namespace. - * - * Generated from protobuf field optional string php_namespace = 41; - * @return string - */ - public function getPhpNamespace() - { - return isset($this->php_namespace) ? $this->php_namespace : ''; - } - - public function hasPhpNamespace() - { - return isset($this->php_namespace); - } - - public function clearPhpNamespace() - { - unset($this->php_namespace); - } - - /** - * Use this option to change the namespace of php generated classes. Default - * is empty. When this option is empty, the package name will be used for - * determining the namespace. - * - * Generated from protobuf field optional string php_namespace = 41; - * @param string $var - * @return $this - */ - public function setPhpNamespace($var) - { - GPBUtil::checkString($var, True); - $this->php_namespace = $var; - - return $this; - } - - /** - * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be - * used for determining the namespace. - * - * Generated from protobuf field optional string php_metadata_namespace = 44; - * @return string - */ - public function getPhpMetadataNamespace() - { - return isset($this->php_metadata_namespace) ? $this->php_metadata_namespace : ''; - } - - public function hasPhpMetadataNamespace() - { - return isset($this->php_metadata_namespace); - } - - public function clearPhpMetadataNamespace() - { - unset($this->php_metadata_namespace); - } - - /** - * Use this option to change the namespace of php generated metadata classes. - * Default is empty. When this option is empty, the proto file name will be - * used for determining the namespace. - * - * Generated from protobuf field optional string php_metadata_namespace = 44; - * @param string $var - * @return $this - */ - public function setPhpMetadataNamespace($var) - { - GPBUtil::checkString($var, True); - $this->php_metadata_namespace = $var; - - return $this; - } - - /** - * Use this option to change the package of ruby generated classes. Default - * is empty. When this option is not set, the package name will be used for - * determining the ruby package. - * - * Generated from protobuf field optional string ruby_package = 45; - * @return string - */ - public function getRubyPackage() - { - return isset($this->ruby_package) ? $this->ruby_package : ''; - } - - public function hasRubyPackage() - { - return isset($this->ruby_package); - } - - public function clearRubyPackage() - { - unset($this->ruby_package); - } - - /** - * Use this option to change the package of ruby generated classes. Default - * is empty. When this option is not set, the package name will be used for - * determining the ruby package. - * - * Generated from protobuf field optional string ruby_package = 45; - * @param string $var - * @return $this - */ - public function setRubyPackage($var) - { - GPBUtil::checkString($var, True); - $this->ruby_package = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. - * See the documentation for the "Options" section above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. - * See the documentation for the "Options" section above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php deleted file mode 100644 index 0df27b5..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php +++ /dev/null @@ -1,64 +0,0 @@ -google.protobuf.FileOptions.OptimizeMode - */ -class OptimizeMode -{ - /** - * Generate complete code for parsing, serialization, - * - * Generated from protobuf enum SPEED = 1; - */ - const SPEED = 1; - /** - * etc. - * - * Generated from protobuf enum CODE_SIZE = 2; - */ - const CODE_SIZE = 2; - /** - * Generate code using MessageLite and the lite runtime. - * - * Generated from protobuf enum LITE_RUNTIME = 3; - */ - const LITE_RUNTIME = 3; - - private static $valueToName = [ - self::SPEED => 'SPEED', - self::CODE_SIZE => 'CODE_SIZE', - self::LITE_RUNTIME => 'LITE_RUNTIME', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(OptimizeMode::class, \Google\Protobuf\Internal\FileOptions_OptimizeMode::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php deleted file mode 100644 index 8926e63..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions_OptimizeMode.php +++ /dev/null @@ -1,16 +0,0 @@ -writeRaw("\"", 1); - $field_name = GPBJsonWire::formatFieldName($field); - $output->writeRaw($field_name, strlen($field_name)); - $output->writeRaw("\":", 2); - } - return static::serializeFieldValueToStream( - $value, - $field, - $output, - !$has_field_name); - } - - public static function serializeFieldValueToStream( - $values, - $field, - &$output, - $is_well_known = false) - { - if ($field->isMap()) { - $output->writeRaw("{", 1); - $first = true; - $map_entry = $field->getMessageType(); - $key_field = $map_entry->getFieldByNumber(1); - $value_field = $map_entry->getFieldByNumber(2); - - switch ($key_field->getType()) { - case GPBType::STRING: - case GPBType::SFIXED64: - case GPBType::INT64: - case GPBType::SINT64: - case GPBType::FIXED64: - case GPBType::UINT64: - $additional_quote = false; - break; - default: - $additional_quote = true; - } - - foreach ($values as $key => $value) { - if ($first) { - $first = false; - } else { - $output->writeRaw(",", 1); - } - if ($additional_quote) { - $output->writeRaw("\"", 1); - } - if (!static::serializeSingularFieldValueToStream( - $key, - $key_field, - $output, - $is_well_known)) { - return false; - } - if ($additional_quote) { - $output->writeRaw("\"", 1); - } - $output->writeRaw(":", 1); - if (!static::serializeSingularFieldValueToStream( - $value, - $value_field, - $output, - $is_well_known)) { - return false; - } - } - $output->writeRaw("}", 1); - return true; - } elseif ($field->isRepeated()) { - $output->writeRaw("[", 1); - $first = true; - foreach ($values as $value) { - if ($first) { - $first = false; - } else { - $output->writeRaw(",", 1); - } - if (!static::serializeSingularFieldValueToStream( - $value, - $field, - $output, - $is_well_known)) { - return false; - } - } - $output->writeRaw("]", 1); - return true; - } else { - return static::serializeSingularFieldValueToStream( - $values, - $field, - $output, - $is_well_known); - } - } - - private static function serializeSingularFieldValueToStream( - $value, - $field, - &$output, $is_well_known = false) - { - switch ($field->getType()) { - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::INT32: - $str_value = strval($value); - $output->writeRaw($str_value, strlen($str_value)); - break; - case GPBType::FIXED32: - case GPBType::UINT32: - if ($value < 0) { - $value = bcadd($value, "4294967296"); - } - $str_value = strval($value); - $output->writeRaw($str_value, strlen($str_value)); - break; - case GPBType::FIXED64: - case GPBType::UINT64: - if ($value < 0) { - $value = bcadd($value, "18446744073709551616"); - } - // Intentional fall through. - case GPBType::SFIXED64: - case GPBType::INT64: - case GPBType::SINT64: - $output->writeRaw("\"", 1); - $str_value = strval($value); - $output->writeRaw($str_value, strlen($str_value)); - $output->writeRaw("\"", 1); - break; - case GPBType::FLOAT: - if (is_nan($value)) { - $str_value = "\"NaN\""; - } elseif ($value === INF) { - $str_value = "\"Infinity\""; - } elseif ($value === -INF) { - $str_value = "\"-Infinity\""; - } else { - $str_value = sprintf("%.8g", $value); - } - $output->writeRaw($str_value, strlen($str_value)); - break; - case GPBType::DOUBLE: - if (is_nan($value)) { - $str_value = "\"NaN\""; - } elseif ($value === INF) { - $str_value = "\"Infinity\""; - } elseif ($value === -INF) { - $str_value = "\"-Infinity\""; - } else { - $str_value = sprintf("%.17g", $value); - } - $output->writeRaw($str_value, strlen($str_value)); - break; - case GPBType::ENUM: - $enum_desc = $field->getEnumType(); - if ($enum_desc->getClass() === "Google\Protobuf\NullValue") { - $output->writeRaw("null", 4); - break; - } - $enum_value_desc = $enum_desc->getValueByNumber($value); - if (!is_null($enum_value_desc)) { - $str_value = $enum_value_desc->getName(); - $output->writeRaw("\"", 1); - $output->writeRaw($str_value, strlen($str_value)); - $output->writeRaw("\"", 1); - } else { - $str_value = strval($value); - $output->writeRaw($str_value, strlen($str_value)); - } - break; - case GPBType::BOOL: - if ($value) { - $output->writeRaw("true", 4); - } else { - $output->writeRaw("false", 5); - } - break; - case GPBType::BYTES: - $bytes_value = base64_encode($value); - $output->writeRaw("\"", 1); - $output->writeRaw($bytes_value, strlen($bytes_value)); - $output->writeRaw("\"", 1); - break; - case GPBType::STRING: - $value = json_encode($value, JSON_UNESCAPED_UNICODE); - $output->writeRaw($value, strlen($value)); - break; - // case GPBType::GROUP: - // echo "GROUP\xA"; - // trigger_error("Not implemented.", E_ERROR); - // break; - case GPBType::MESSAGE: - $value->serializeToJsonStream($output); - break; - default: - user_error("Unsupported type."); - return false; - } - return true; - } - - private static function formatFieldName($field) - { - return $field->getJsonName(); - } - - // Used for escaping control chars in strings. - private static $k_control_char_limit = 0x20; - - private static function jsonNiceEscape($c) - { - switch ($c) { - case '"': return "\\\""; - case '\\': return "\\\\"; - case '/': return "\\/"; - case '\b': return "\\b"; - case '\f': return "\\f"; - case '\n': return "\\n"; - case '\r': return "\\r"; - case '\t': return "\\t"; - default: return NULL; - } - } - - private static function isJsonEscaped($c) - { - // See RFC 4627. - return $c < chr($k_control_char_limit) || $c === "\"" || $c === "\\"; - } - - public static function escapedJson($value) - { - $escaped_value = ""; - $unescaped_run = ""; - for ($i = 0; $i < strlen($value); $i++) { - $c = $value[$i]; - // Handle escaping. - if (static::isJsonEscaped($c)) { - // Use a "nice" escape, like \n, if one exists for this - // character. - $escape = static::jsonNiceEscape($c); - if (is_null($escape)) { - $escape = "\\u00" . bin2hex($c); - } - if ($unescaped_run !== "") { - $escaped_value .= $unescaped_run; - $unescaped_run = ""; - } - $escaped_value .= $escape; - } else { - if ($unescaped_run === "") { - $unescaped_run .= $c; - } - } - } - $escaped_value .= $unescaped_run; - return $escaped_value; - } - -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php deleted file mode 100644 index 0fb2384..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php +++ /dev/null @@ -1,40 +0,0 @@ - 0) { - $high = (int) bcsub($high, 4294967296); - } else { - $high = (int) $high; - } - if (bccomp($low, 2147483647) > 0) { - $low = (int) bcsub($low, 4294967296); - } else { - $low = (int) $low; - } - - if ($isNeg) { - $high = ~$high; - $low = ~$low; - $low++; - if (!$low) { - $high = (int)($high + 1); - } - } - - if ($trim) { - $high = 0; - } - } - - public static function checkString(&$var, $check_utf8) - { - if (is_array($var) || is_object($var)) { - throw new \InvalidArgumentException("Expect string."); - } - if (!is_string($var)) { - $var = strval($var); - } - if ($check_utf8 && !preg_match('//u', $var)) { - throw new \Exception("Expect utf-8 encoding."); - } - } - - public static function checkEnum(&$var) - { - static::checkInt32($var); - } - - public static function checkInt32(&$var) - { - if (is_numeric($var)) { - $var = intval($var); - } else { - throw new \Exception("Expect integer."); - } - } - - public static function checkUint32(&$var) - { - if (is_numeric($var)) { - if (PHP_INT_SIZE === 8) { - $var = intval($var); - $var |= ((-(($var >> 31) & 0x1)) & ~0xFFFFFFFF); - } else { - if (bccomp($var, 0x7FFFFFFF) > 0) { - $var = bcsub($var, "4294967296"); - } - $var = (int) $var; - } - } else { - throw new \Exception("Expect integer."); - } - } - - public static function checkInt64(&$var) - { - if (is_numeric($var)) { - if (PHP_INT_SIZE == 8) { - $var = intval($var); - } else { - if (is_float($var) || - is_integer($var) || - (is_string($var) && - bccomp($var, "9223372036854774784") < 0)) { - $var = number_format($var, 0, ".", ""); - } - } - } else { - throw new \Exception("Expect integer."); - } - } - - public static function checkUint64(&$var) - { - if (is_numeric($var)) { - if (PHP_INT_SIZE == 8) { - $var = intval($var); - } else { - $var = number_format($var, 0, ".", ""); - } - } else { - throw new \Exception("Expect integer."); - } - } - - public static function checkFloat(&$var) - { - if (is_float($var) || is_numeric($var)) { - $var = unpack("f", pack("f", $var))[1]; - } else { - throw new \Exception("Expect float."); - } - } - - public static function checkDouble(&$var) - { - if (is_float($var) || is_numeric($var)) { - $var = floatval($var); - } else { - throw new \Exception("Expect float."); - } - } - - public static function checkBool(&$var) - { - if (is_array($var) || is_object($var)) { - throw new \Exception("Expect boolean."); - } - $var = boolval($var); - } - - public static function checkMessage(&$var, $klass, $newClass = null) - { - if (!$var instanceof $klass && !is_null($var)) { - throw new \Exception("Expect $klass."); - } - } - - public static function checkRepeatedField(&$var, $type, $klass = null) - { - if (!$var instanceof RepeatedField && !is_array($var)) { - throw new \Exception("Expect array."); - } - if (is_array($var)) { - $tmp = new RepeatedField($type, $klass); - foreach ($var as $value) { - $tmp[] = $value; - } - return $tmp; - } else { - if ($var->getType() != $type) { - throw new \Exception( - "Expect repeated field of different type."); - } - if ($var->getType() === GPBType::MESSAGE && - $var->getClass() !== $klass && - $var->getLegacyClass() !== $klass) { - throw new \Exception( - "Expect repeated field of " . $klass . "."); - } - return $var; - } - } - - public static function checkMapField(&$var, $key_type, $value_type, $klass = null) - { - if (!$var instanceof MapField && !is_array($var)) { - throw new \Exception("Expect dict."); - } - if (is_array($var)) { - $tmp = new MapField($key_type, $value_type, $klass); - foreach ($var as $key => $value) { - $tmp[$key] = $value; - } - return $tmp; - } else { - if ($var->getKeyType() != $key_type) { - throw new \Exception("Expect map field of key type."); - } - if ($var->getValueType() != $value_type) { - throw new \Exception("Expect map field of value type."); - } - if ($var->getValueType() === GPBType::MESSAGE && - $var->getValueClass() !== $klass && - $var->getLegacyValueClass() !== $klass) { - throw new \Exception( - "Expect map field of " . $klass . "."); - } - return $var; - } - } - - public static function Int64($value) - { - return new Int64($value); - } - - public static function Uint64($value) - { - return new Uint64($value); - } - - public static function getClassNamePrefix( - $classname, - $file_proto) - { - $option = $file_proto->getOptions(); - $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); - if ($prefix !== "") { - return $prefix; - } - - $reserved_words = array( - "abstract"=>0, "and"=>0, "array"=>0, "as"=>0, "break"=>0, - "callable"=>0, "case"=>0, "catch"=>0, "class"=>0, "clone"=>0, - "const"=>0, "continue"=>0, "declare"=>0, "default"=>0, "die"=>0, - "do"=>0, "echo"=>0, "else"=>0, "elseif"=>0, "empty"=>0, - "enddeclare"=>0, "endfor"=>0, "endforeach"=>0, "endif"=>0, - "endswitch"=>0, "endwhile"=>0, "eval"=>0, "exit"=>0, "extends"=>0, - "final"=>0, "finally"=>0, "fn"=>0, "for"=>0, "foreach"=>0, - "function"=>0, "global"=>0, "goto"=>0, "if"=>0, "implements"=>0, - "include"=>0, "include_once"=>0, "instanceof"=>0, "insteadof"=>0, - "interface"=>0, "isset"=>0, "list"=>0, "match"=>0, "namespace"=>0, - "new"=>0, "or"=>0, "parent"=>0, "print"=>0, "private"=>0, - "protected"=>0,"public"=>0, "readonly" => 0,"require"=>0, - "require_once"=>0,"return"=>0, "self"=>0, "static"=>0, "switch"=>0, - "throw"=>0,"trait"=>0, "try"=>0,"unset"=>0, "use"=>0, "var"=>0, - "while"=>0,"xor"=>0, "yield"=>0, "int"=>0, "float"=>0, "bool"=>0, - "string"=>0,"true"=>0, "false"=>0, "null"=>0, "void"=>0, - "iterable"=>0 - ); - - if (array_key_exists(strtolower($classname), $reserved_words)) { - if ($file_proto->getPackage() === "google.protobuf") { - return "GPB"; - } else { - return "PB"; - } - } - - return ""; - } - - private static function getPreviouslyUnreservedClassNamePrefix( - $classname, - $file_proto) - { - $previously_unreserved_words = array( - "readonly"=>0 - ); - - if (array_key_exists(strtolower($classname), $previously_unreserved_words)) { - $option = $file_proto->getOptions(); - $prefix = is_null($option) ? "" : $option->getPhpClassPrefix(); - if ($prefix !== "") { - return $prefix; - } - - return ""; - } - - return self::getClassNamePrefix($classname, $file_proto); - } - - public static function getLegacyClassNameWithoutPackage( - $name, - $file_proto) - { - $classname = implode('_', explode('.', $name)); - return static::getClassNamePrefix($classname, $file_proto) . $classname; - } - - public static function getClassNameWithoutPackage( - $name, - $file_proto) - { - $parts = explode('.', $name); - foreach ($parts as $i => $part) { - $parts[$i] = static::getClassNamePrefix($parts[$i], $file_proto) . $parts[$i]; - } - return implode('\\', $parts); - } - - private static function getPreviouslyUnreservedClassNameWithoutPackage( - $name, - $file_proto) - { - $parts = explode('.', $name); - foreach ($parts as $i => $part) { - $parts[$i] = static::getPreviouslyUnreservedClassNamePrefix($parts[$i], $file_proto) . $parts[$i]; - } - return implode('\\', $parts); - } - - public static function getFullClassName( - $proto, - $containing, - $file_proto, - &$message_name_without_package, - &$classname, - &$legacy_classname, - &$fullname, - &$previous_classname) - { - // Full name needs to start with '.'. - $message_name_without_package = $proto->getName(); - if ($containing !== "") { - $message_name_without_package = - $containing . "." . $message_name_without_package; - } - - $package = $file_proto->getPackage(); - if ($package === "") { - $fullname = $message_name_without_package; - } else { - $fullname = $package . "." . $message_name_without_package; - } - - $class_name_without_package = - static::getClassNameWithoutPackage($message_name_without_package, $file_proto); - $legacy_class_name_without_package = - static::getLegacyClassNameWithoutPackage( - $message_name_without_package, $file_proto); - $previous_class_name_without_package = - static::getPreviouslyUnreservedClassNameWithoutPackage( - $message_name_without_package, $file_proto); - - $option = $file_proto->getOptions(); - if (!is_null($option) && $option->hasPhpNamespace()) { - $namespace = $option->getPhpNamespace(); - if ($namespace !== "") { - $classname = $namespace . "\\" . $class_name_without_package; - $legacy_classname = - $namespace . "\\" . $legacy_class_name_without_package; - $previous_classname = - $namespace . "\\" . $previous_class_name_without_package; - return; - } else { - $classname = $class_name_without_package; - $legacy_classname = $legacy_class_name_without_package; - $previous_classname = $previous_class_name_without_package; - return; - } - } - - if ($package === "") { - $classname = $class_name_without_package; - $legacy_classname = $legacy_class_name_without_package; - $previous_classname = $previous_class_name_without_package; - } else { - $parts = array_map('ucwords', explode('.', $package)); - foreach ($parts as $i => $part) { - $parts[$i] = self::getClassNamePrefix($part, $file_proto).$part; - } - $classname = - implode('\\', $parts) . - "\\".self::getClassNamePrefix($class_name_without_package,$file_proto). - $class_name_without_package; - $legacy_classname = - implode('\\', array_map('ucwords', explode('.', $package))). - "\\".$legacy_class_name_without_package; - $previous_classname = - implode('\\', array_map('ucwords', explode('.', $package))). - "\\".self::getPreviouslyUnreservedClassNamePrefix( - $previous_class_name_without_package, $file_proto). - $previous_class_name_without_package; - } - } - - public static function combineInt32ToInt64($high, $low) - { - $isNeg = $high < 0; - if ($isNeg) { - $high = ~$high; - $low = ~$low; - $low++; - if (!$low) { - $high = (int) ($high + 1); - } - } - $result = bcadd(bcmul($high, 4294967296), $low); - if ($low < 0) { - $result = bcadd($result, 4294967296); - } - if ($isNeg) { - $result = bcsub(0, $result); - } - return $result; - } - - public static function parseTimestamp($timestamp) - { - // prevent parsing timestamps containing with the non-existent year "0000" - // DateTime::createFromFormat parses without failing but as a nonsensical date - if (substr($timestamp, 0, 4) === "0000") { - throw new \Exception("Year cannot be zero."); - } - // prevent parsing timestamps ending with a lowercase z - if (substr($timestamp, -1, 1) === "z") { - throw new \Exception("Timezone cannot be a lowercase z."); - } - - $nanoseconds = 0; - $periodIndex = strpos($timestamp, "."); - if ($periodIndex !== false) { - $nanosecondsLength = 0; - // find the next non-numeric character in the timestamp to calculate - // the length of the nanoseconds text - for ($i = $periodIndex + 1, $length = strlen($timestamp); $i < $length; $i++) { - if (!is_numeric($timestamp[$i])) { - $nanosecondsLength = $i - ($periodIndex + 1); - break; - } - } - if ($nanosecondsLength % 3 !== 0) { - throw new \Exception("Nanoseconds must be disible by 3."); - } - if ($nanosecondsLength > 9) { - throw new \Exception("Nanoseconds must be in the range of 0 to 999,999,999 nanoseconds."); - } - if ($nanosecondsLength > 0) { - $nanoseconds = substr($timestamp, $periodIndex + 1, $nanosecondsLength); - $nanoseconds = intval($nanoseconds); - - // remove the nanoseconds and preceding period from the timestamp - $date = substr($timestamp, 0, $periodIndex); - $timezone = substr($timestamp, $periodIndex + $nanosecondsLength + 1); - $timestamp = $date.$timezone; - } - } - - $date = \DateTime::createFromFormat(\DateTime::RFC3339, $timestamp, new \DateTimeZone("UTC")); - if ($date === false) { - throw new \Exception("Invalid RFC 3339 timestamp."); - } - - $value = new \Google\Protobuf\Timestamp(); - $seconds = $date->format("U"); - $value->setSeconds($seconds); - $value->setNanos($nanoseconds); - return $value; - } - - public static function formatTimestamp($value) - { - if (bccomp($value->getSeconds(), "253402300800") != -1) { - throw new GPBDecodeException("Duration number too large."); - } - if (bccomp($value->getSeconds(), "-62135596801") != 1) { - throw new GPBDecodeException("Duration number too small."); - } - $nanoseconds = static::getNanosecondsForTimestamp($value->getNanos()); - if (!empty($nanoseconds)) { - $nanoseconds = ".".$nanoseconds; - } - $date = new \DateTime('@'.$value->getSeconds(), new \DateTimeZone("UTC")); - return $date->format("Y-m-d\TH:i:s".$nanoseconds."\Z"); - } - - public static function parseDuration($value) - { - if (strlen($value) < 2 || substr($value, -1) !== "s") { - throw new GPBDecodeException("Missing s after duration string"); - } - $number = substr($value, 0, -1); - if (bccomp($number, "315576000001") != -1) { - throw new GPBDecodeException("Duration number too large."); - } - if (bccomp($number, "-315576000001") != 1) { - throw new GPBDecodeException("Duration number too small."); - } - $pos = strrpos($number, "."); - if ($pos !== false) { - $seconds = substr($number, 0, $pos); - if (bccomp($seconds, 0) < 0) { - $nanos = bcmul("0" . substr($number, $pos), -1000000000); - } else { - $nanos = bcmul("0" . substr($number, $pos), 1000000000); - } - } else { - $seconds = $number; - $nanos = 0; - } - $duration = new Duration(); - $duration->setSeconds($seconds); - $duration->setNanos($nanos); - return $duration; - } - - public static function formatDuration($value) - { - if (bccomp($value->getSeconds(), '315576000001') != -1) { - throw new GPBDecodeException('Duration number too large.'); - } - if (bccomp($value->getSeconds(), '-315576000001') != 1) { - throw new GPBDecodeException('Duration number too small.'); - } - - $nanos = $value->getNanos(); - if ($nanos === 0) { - return (string) $value->getSeconds(); - } - - if ($nanos % 1000000 === 0) { - $digits = 3; - } elseif ($nanos % 1000 === 0) { - $digits = 6; - } else { - $digits = 9; - } - - $nanos = bcdiv($nanos, '1000000000', $digits); - return bcadd($value->getSeconds(), $nanos, $digits); - } - - public static function parseFieldMask($paths_string) - { - $field_mask = new FieldMask(); - if (strlen($paths_string) === 0) { - return $field_mask; - } - $path_strings = explode(",", $paths_string); - $paths = $field_mask->getPaths(); - foreach($path_strings as &$path_string) { - $field_strings = explode(".", $path_string); - foreach($field_strings as &$field_string) { - $field_string = camel2underscore($field_string); - } - $path_string = implode(".", $field_strings); - $paths[] = $path_string; - } - return $field_mask; - } - - public static function formatFieldMask($field_mask) - { - $converted_paths = []; - foreach($field_mask->getPaths() as $path) { - $fields = explode('.', $path); - $converted_path = []; - foreach ($fields as $field) { - $segments = explode('_', $field); - $start = true; - $converted_segments = ""; - foreach($segments as $segment) { - if (!$start) { - $converted = ucfirst($segment); - } else { - $converted = $segment; - $start = false; - } - $converted_segments .= $converted; - } - $converted_path []= $converted_segments; - } - $converted_path = implode(".", $converted_path); - $converted_paths []= $converted_path; - } - return implode(",", $converted_paths); - } - - public static function getNanosecondsForTimestamp($nanoseconds) - { - if ($nanoseconds == 0) { - return ''; - } - if ($nanoseconds % static::NANOS_PER_MILLISECOND == 0) { - return sprintf('%03d', $nanoseconds / static::NANOS_PER_MILLISECOND); - } - if ($nanoseconds % static::NANOS_PER_MICROSECOND == 0) { - return sprintf('%06d', $nanoseconds / static::NANOS_PER_MICROSECOND); - } - return sprintf('%09d', $nanoseconds); - } - - public static function hasSpecialJsonMapping($msg) - { - return is_a($msg, 'Google\Protobuf\Any') || - is_a($msg, "Google\Protobuf\ListValue") || - is_a($msg, "Google\Protobuf\Struct") || - is_a($msg, "Google\Protobuf\Value") || - is_a($msg, "Google\Protobuf\Duration") || - is_a($msg, "Google\Protobuf\Timestamp") || - is_a($msg, "Google\Protobuf\FieldMask") || - static::hasJsonValue($msg); - } - - public static function hasJsonValue($msg) - { - return is_a($msg, "Google\Protobuf\DoubleValue") || - is_a($msg, "Google\Protobuf\FloatValue") || - is_a($msg, "Google\Protobuf\Int64Value") || - is_a($msg, "Google\Protobuf\UInt64Value") || - is_a($msg, "Google\Protobuf\Int32Value") || - is_a($msg, "Google\Protobuf\UInt32Value") || - is_a($msg, "Google\Protobuf\BoolValue") || - is_a($msg, "Google\Protobuf\StringValue") || - is_a($msg, "Google\Protobuf\BytesValue"); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php deleted file mode 100644 index 034f5df..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php +++ /dev/null @@ -1,622 +0,0 @@ -> self::TAG_TYPE_BITS) & 0x1fffffff; - } - - public static function getTagWireType($tag) - { - return $tag & 0x7; - } - - public static function getWireType($type) - { - switch ($type) { - case GPBType::FLOAT: - case GPBType::FIXED32: - case GPBType::SFIXED32: - return self::WIRETYPE_FIXED32; - case GPBType::DOUBLE: - case GPBType::FIXED64: - case GPBType::SFIXED64: - return self::WIRETYPE_FIXED64; - case GPBType::UINT32: - case GPBType::UINT64: - case GPBType::INT32: - case GPBType::INT64: - case GPBType::SINT32: - case GPBType::SINT64: - case GPBType::ENUM: - case GPBType::BOOL: - return self::WIRETYPE_VARINT; - case GPBType::STRING: - case GPBType::BYTES: - case GPBType::MESSAGE: - return self::WIRETYPE_LENGTH_DELIMITED; - case GPBType::GROUP: - user_error("Unsupported type."); - return 0; - default: - user_error("Unsupported type."); - return 0; - } - } - - // ZigZag Transform: Encodes signed integers so that they can be effectively - // used with varint encoding. - // - // varint operates on unsigned integers, encoding smaller numbers into fewer - // bytes. If you try to use it on a signed integer, it will treat this - // number as a very large unsigned integer, which means that even small - // signed numbers like -1 will take the maximum number of bytes (10) to - // encode. zigZagEncode() maps signed integers to unsigned in such a way - // that those with a small absolute value will have smaller encoded values, - // making them appropriate for encoding using varint. - // - // int32 -> uint32 - // ------------------------- - // 0 -> 0 - // -1 -> 1 - // 1 -> 2 - // -2 -> 3 - // ... -> ... - // 2147483647 -> 4294967294 - // -2147483648 -> 4294967295 - // - // >> encode >> - // << decode << - public static function zigZagEncode32($int32) - { - if (PHP_INT_SIZE == 8) { - $trim_int32 = $int32 & 0xFFFFFFFF; - return (($trim_int32 << 1) ^ ($int32 << 32 >> 63)) & 0xFFFFFFFF; - } else { - return ($int32 << 1) ^ ($int32 >> 31); - } - } - - public static function zigZagDecode32($uint32) - { - // Fill high 32 bits. - if (PHP_INT_SIZE === 8) { - $uint32 |= ($uint32 & 0xFFFFFFFF); - } - - $int32 = (($uint32 >> 1) & 0x7FFFFFFF) ^ (-($uint32 & 1)); - - return $int32; - } - - public static function zigZagEncode64($int64) - { - if (PHP_INT_SIZE == 4) { - if (bccomp($int64, 0) >= 0) { - return bcmul($int64, 2); - } else { - return bcsub(bcmul(bcsub(0, $int64), 2), 1); - } - } else { - return ((int)$int64 << 1) ^ ((int)$int64 >> 63); - } - } - - public static function zigZagDecode64($uint64) - { - if (PHP_INT_SIZE == 4) { - if (bcmod($uint64, 2) == 0) { - return bcdiv($uint64, 2, 0); - } else { - return bcsub(0, bcdiv(bcadd($uint64, 1), 2, 0)); - } - } else { - return (($uint64 >> 1) & 0x7FFFFFFFFFFFFFFF) ^ (-($uint64 & 1)); - } - } - - public static function readInt32(&$input, &$value) - { - return $input->readVarint32($value); - } - - public static function readInt64(&$input, &$value) - { - $success = $input->readVarint64($value); - if (PHP_INT_SIZE == 4 && bccomp($value, "9223372036854775807") > 0) { - $value = bcsub($value, "18446744073709551616"); - } - return $success; - } - - public static function readUint32(&$input, &$value) - { - return self::readInt32($input, $value); - } - - public static function readUint64(&$input, &$value) - { - return self::readInt64($input, $value); - } - - public static function readSint32(&$input, &$value) - { - if (!$input->readVarint32($value)) { - return false; - } - $value = GPBWire::zigZagDecode32($value); - return true; - } - - public static function readSint64(&$input, &$value) - { - if (!$input->readVarint64($value)) { - return false; - } - $value = GPBWire::zigZagDecode64($value); - return true; - } - - public static function readFixed32(&$input, &$value) - { - return $input->readLittleEndian32($value); - } - - public static function readFixed64(&$input, &$value) - { - return $input->readLittleEndian64($value); - } - - public static function readSfixed32(&$input, &$value) - { - if (!self::readFixed32($input, $value)) { - return false; - } - if (PHP_INT_SIZE === 8) { - $value |= (-($value >> 31) << 32); - } - return true; - } - - public static function readSfixed64(&$input, &$value) - { - $success = $input->readLittleEndian64($value); - if (PHP_INT_SIZE == 4 && bccomp($value, "9223372036854775807") > 0) { - $value = bcsub($value, "18446744073709551616"); - } - return $success; - } - - public static function readFloat(&$input, &$value) - { - $data = null; - if (!$input->readRaw(4, $data)) { - return false; - } - $value = unpack('f', $data)[1]; - return true; - } - - public static function readDouble(&$input, &$value) - { - $data = null; - if (!$input->readRaw(8, $data)) { - return false; - } - $value = unpack('d', $data)[1]; - return true; - } - - public static function readBool(&$input, &$value) - { - if (!$input->readVarint64($value)) { - return false; - } - if ($value == 0) { - $value = false; - } else { - $value = true; - } - return true; - } - - public static function readString(&$input, &$value) - { - $length = 0; - return $input->readVarintSizeAsInt($length) && $input->readRaw($length, $value); - } - - public static function readMessage(&$input, &$message) - { - $length = 0; - if (!$input->readVarintSizeAsInt($length)) { - return false; - } - $old_limit = 0; - $recursion_limit = 0; - $input->incrementRecursionDepthAndPushLimit( - $length, - $old_limit, - $recursion_limit); - if ($recursion_limit < 0 || !$message->parseFromStream($input)) { - return false; - } - return $input->decrementRecursionDepthAndPopLimit($old_limit); - } - - public static function writeTag(&$output, $tag) - { - return $output->writeTag($tag); - } - - public static function writeInt32(&$output, $value) - { - return $output->writeVarint32($value, false); - } - - public static function writeInt64(&$output, $value) - { - return $output->writeVarint64($value); - } - - public static function writeUint32(&$output, $value) - { - return $output->writeVarint32($value, true); - } - - public static function writeUint64(&$output, $value) - { - return $output->writeVarint64($value); - } - - public static function writeSint32(&$output, $value) - { - $value = GPBWire::zigZagEncode32($value); - return $output->writeVarint32($value, true); - } - - public static function writeSint64(&$output, $value) - { - $value = GPBWire::zigZagEncode64($value); - return $output->writeVarint64($value); - } - - public static function writeFixed32(&$output, $value) - { - return $output->writeLittleEndian32($value); - } - - public static function writeFixed64(&$output, $value) - { - return $output->writeLittleEndian64($value); - } - - public static function writeSfixed32(&$output, $value) - { - return $output->writeLittleEndian32($value); - } - - public static function writeSfixed64(&$output, $value) - { - return $output->writeLittleEndian64($value); - } - - public static function writeBool(&$output, $value) - { - if ($value) { - return $output->writeVarint32(1, true); - } else { - return $output->writeVarint32(0, true); - } - } - - public static function writeFloat(&$output, $value) - { - $data = pack("f", $value); - return $output->writeRaw($data, 4); - } - - public static function writeDouble(&$output, $value) - { - $data = pack("d", $value); - return $output->writeRaw($data, 8); - } - - public static function writeString(&$output, $value) - { - return self::writeBytes($output, $value); - } - - public static function writeBytes(&$output, $value) - { - $size = strlen($value); - if (!$output->writeVarint32($size, true)) { - return false; - } - return $output->writeRaw($value, $size); - } - - public static function writeMessage(&$output, $value) - { - $size = $value->byteSize(); - if (!$output->writeVarint32($size, true)) { - return false; - } - return $value->serializeToStream($output); - } - - public static function makeTag($number, $type) - { - return ($number << 3) | self::getWireType($type); - } - - public static function tagSize($field) - { - $tag = self::makeTag($field->getNumber(), $field->getType()); - return self::varint32Size($tag); - } - - public static function varint32Size($value, $sign_extended = false) - { - if ($value < 0) { - if ($sign_extended) { - return 10; - } else { - return 5; - } - } - if ($value < (1 << 7)) { - return 1; - } - if ($value < (1 << 14)) { - return 2; - } - if ($value < (1 << 21)) { - return 3; - } - if ($value < (1 << 28)) { - return 4; - } - return 5; - } - - public static function sint32Size($value) - { - $value = self::zigZagEncode32($value); - return self::varint32Size($value); - } - - public static function sint64Size($value) - { - $value = self::zigZagEncode64($value); - return self::varint64Size($value); - } - - public static function varint64Size($value) - { - if (PHP_INT_SIZE == 4) { - if (bccomp($value, 0) < 0 || - bccomp($value, "9223372036854775807") > 0) { - return 10; - } - if (bccomp($value, 1 << 7) < 0) { - return 1; - } - if (bccomp($value, 1 << 14) < 0) { - return 2; - } - if (bccomp($value, 1 << 21) < 0) { - return 3; - } - if (bccomp($value, 1 << 28) < 0) { - return 4; - } - if (bccomp($value, '34359738368') < 0) { - return 5; - } - if (bccomp($value, '4398046511104') < 0) { - return 6; - } - if (bccomp($value, '562949953421312') < 0) { - return 7; - } - if (bccomp($value, '72057594037927936') < 0) { - return 8; - } - return 9; - } else { - if ($value < 0) { - return 10; - } - if ($value < (1 << 7)) { - return 1; - } - if ($value < (1 << 14)) { - return 2; - } - if ($value < (1 << 21)) { - return 3; - } - if ($value < (1 << 28)) { - return 4; - } - if ($value < (1 << 35)) { - return 5; - } - if ($value < (1 << 42)) { - return 6; - } - if ($value < (1 << 49)) { - return 7; - } - if ($value < (1 << 56)) { - return 8; - } - return 9; - } - } - - public static function serializeFieldToStream( - $value, - $field, - $need_tag, - &$output) - { - if ($need_tag) { - if (!GPBWire::writeTag( - $output, - self::makeTag( - $field->getNumber(), - $field->getType()))) { - return false; - } - } - switch ($field->getType()) { - case GPBType::DOUBLE: - if (!GPBWire::writeDouble($output, $value)) { - return false; - } - break; - case GPBType::FLOAT: - if (!GPBWire::writeFloat($output, $value)) { - return false; - } - break; - case GPBType::INT64: - if (!GPBWire::writeInt64($output, $value)) { - return false; - } - break; - case GPBType::UINT64: - if (!GPBWire::writeUint64($output, $value)) { - return false; - } - break; - case GPBType::INT32: - if (!GPBWire::writeInt32($output, $value)) { - return false; - } - break; - case GPBType::FIXED32: - if (!GPBWire::writeFixed32($output, $value)) { - return false; - } - break; - case GPBType::FIXED64: - if (!GPBWire::writeFixed64($output, $value)) { - return false; - } - break; - case GPBType::BOOL: - if (!GPBWire::writeBool($output, $value)) { - return false; - } - break; - case GPBType::STRING: - if (!GPBWire::writeString($output, $value)) { - return false; - } - break; - // case GPBType::GROUP: - // echo "GROUP\xA"; - // trigger_error("Not implemented.", E_ERROR); - // break; - case GPBType::MESSAGE: - if (!GPBWire::writeMessage($output, $value)) { - return false; - } - break; - case GPBType::BYTES: - if (!GPBWire::writeBytes($output, $value)) { - return false; - } - break; - case GPBType::UINT32: - if (PHP_INT_SIZE === 8 && $value < 0) { - $value += 4294967296; - } - if (!GPBWire::writeUint32($output, $value)) { - return false; - } - break; - case GPBType::ENUM: - if (!GPBWire::writeInt32($output, $value)) { - return false; - } - break; - case GPBType::SFIXED32: - if (!GPBWire::writeSfixed32($output, $value)) { - return false; - } - break; - case GPBType::SFIXED64: - if (!GPBWire::writeSfixed64($output, $value)) { - return false; - } - break; - case GPBType::SINT32: - if (!GPBWire::writeSint32($output, $value)) { - return false; - } - break; - case GPBType::SINT64: - if (!GPBWire::writeSint64($output, $value)) { - return false; - } - break; - default: - user_error("Unsupported type."); - return false; - } - - return true; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php deleted file mode 100644 index c1ad370..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php +++ /dev/null @@ -1,43 +0,0 @@ -google.protobuf.GeneratedCodeInfo - */ -class GeneratedCodeInfo extends \Google\Protobuf\Internal\Message -{ - /** - * An Annotation connects some span of text in generated code to an element - * of its generating .proto file. - * - * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; - */ - private $annotation; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\GeneratedCodeInfo\Annotation>|\Google\Protobuf\Internal\RepeatedField $annotation - * An Annotation connects some span of text in generated code to an element - * of its generating .proto file. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * An Annotation connects some span of text in generated code to an element - * of its generating .proto file. - * - * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getAnnotation() - { - return $this->annotation; - } - - /** - * An Annotation connects some span of text in generated code to an element - * of its generating .proto file. - * - * Generated from protobuf field repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; - * @param array<\Google\Protobuf\Internal\GeneratedCodeInfo\Annotation>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setAnnotation($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\GeneratedCodeInfo\Annotation::class); - $this->annotation = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php deleted file mode 100644 index 617fdac..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php +++ /dev/null @@ -1,218 +0,0 @@ -google.protobuf.GeneratedCodeInfo.Annotation - */ -class Annotation extends \Google\Protobuf\Internal\Message -{ - /** - * Identifies the element in the original source .proto file. This field - * is formatted the same as SourceCodeInfo.Location.path. - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - */ - private $path; - /** - * Identifies the filesystem path to the original source .proto. - * - * Generated from protobuf field optional string source_file = 2; - */ - protected $source_file = null; - /** - * Identifies the starting offset in bytes in the generated code - * that relates to the identified object. - * - * Generated from protobuf field optional int32 begin = 3; - */ - protected $begin = null; - /** - * Identifies the ending offset in bytes in the generated code that - * relates to the identified offset. The end offset should be one past - * the last relevant byte (so the length of the text = end - begin). - * - * Generated from protobuf field optional int32 end = 4; - */ - protected $end = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array|\Google\Protobuf\Internal\RepeatedField $path - * Identifies the element in the original source .proto file. This field - * is formatted the same as SourceCodeInfo.Location.path. - * @type string $source_file - * Identifies the filesystem path to the original source .proto. - * @type int $begin - * Identifies the starting offset in bytes in the generated code - * that relates to the identified object. - * @type int $end - * Identifies the ending offset in bytes in the generated code that - * relates to the identified offset. The end offset should be one past - * the last relevant byte (so the length of the text = end - begin). - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Identifies the element in the original source .proto file. This field - * is formatted the same as SourceCodeInfo.Location.path. - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getPath() - { - return $this->path; - } - - /** - * Identifies the element in the original source .proto file. This field - * is formatted the same as SourceCodeInfo.Location.path. - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setPath($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); - $this->path = $arr; - - return $this; - } - - /** - * Identifies the filesystem path to the original source .proto. - * - * Generated from protobuf field optional string source_file = 2; - * @return string - */ - public function getSourceFile() - { - return isset($this->source_file) ? $this->source_file : ''; - } - - public function hasSourceFile() - { - return isset($this->source_file); - } - - public function clearSourceFile() - { - unset($this->source_file); - } - - /** - * Identifies the filesystem path to the original source .proto. - * - * Generated from protobuf field optional string source_file = 2; - * @param string $var - * @return $this - */ - public function setSourceFile($var) - { - GPBUtil::checkString($var, True); - $this->source_file = $var; - - return $this; - } - - /** - * Identifies the starting offset in bytes in the generated code - * that relates to the identified object. - * - * Generated from protobuf field optional int32 begin = 3; - * @return int - */ - public function getBegin() - { - return isset($this->begin) ? $this->begin : 0; - } - - public function hasBegin() - { - return isset($this->begin); - } - - public function clearBegin() - { - unset($this->begin); - } - - /** - * Identifies the starting offset in bytes in the generated code - * that relates to the identified object. - * - * Generated from protobuf field optional int32 begin = 3; - * @param int $var - * @return $this - */ - public function setBegin($var) - { - GPBUtil::checkInt32($var); - $this->begin = $var; - - return $this; - } - - /** - * Identifies the ending offset in bytes in the generated code that - * relates to the identified offset. The end offset should be one past - * the last relevant byte (so the length of the text = end - begin). - * - * Generated from protobuf field optional int32 end = 4; - * @return int - */ - public function getEnd() - { - return isset($this->end) ? $this->end : 0; - } - - public function hasEnd() - { - return isset($this->end); - } - - public function clearEnd() - { - unset($this->end); - } - - /** - * Identifies the ending offset in bytes in the generated code that - * relates to the identified offset. The end offset should be one past - * the last relevant byte (so the length of the text = end - begin). - * - * Generated from protobuf field optional int32 end = 4; - * @param int $var - * @return $this - */ - public function setEnd($var) - { - GPBUtil::checkInt32($var); - $this->end = $var; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Annotation::class, \Google\Protobuf\Internal\GeneratedCodeInfo_Annotation::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php deleted file mode 100644 index e36f1e5..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo_Annotation.php +++ /dev/null @@ -1,16 +0,0 @@ -getPublicDescriptor(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php deleted file mode 100644 index ed5d166..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php +++ /dev/null @@ -1,43 +0,0 @@ -public_desc; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php deleted file mode 100644 index e89481f..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php +++ /dev/null @@ -1,71 +0,0 @@ -getFieldByNumber(2); - if ($value_field->getType() == GPBType::MESSAGE) { - $klass = $value_field->getMessageType()->getClass(); - $value = new $klass; - $this->setValue($value); - } - } - - public function setKey($key) { - $this->key = $key; - } - - public function getKey() { - return $this->key; - } - - public function setValue($value) { - $this->value = $value; - } - - public function getValue() { - return $this->value; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php deleted file mode 100644 index d413c6d..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php +++ /dev/null @@ -1,298 +0,0 @@ -container = []; - $this->key_type = $key_type; - $this->value_type = $value_type; - $this->klass = $klass; - - if ($this->value_type == GPBType::MESSAGE) { - $pool = DescriptorPool::getGeneratedPool(); - $desc = $pool->getDescriptorByClassName($klass); - if ($desc == NULL) { - new $klass; // No msg class instance has been created before. - $desc = $pool->getDescriptorByClassName($klass); - } - $this->klass = $desc->getClass(); - $this->legacy_klass = $desc->getLegacyClass(); - } - } - - /** - * @ignore - */ - public function getKeyType() - { - return $this->key_type; - } - - /** - * @ignore - */ - public function getValueType() - { - return $this->value_type; - } - - /** - * @ignore - */ - public function getValueClass() - { - return $this->klass; - } - - /** - * @ignore - */ - public function getLegacyValueClass() - { - return $this->legacy_klass; - } - - /** - * Return the element at the given key. - * - * This will also be called for: $ele = $arr[$key] - * - * @param int|string $key The key of the element to be fetched. - * @return object The stored element at given key. - * @throws \ErrorException Invalid type for index. - * @throws \ErrorException Non-existing index. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function offsetGet($key) - { - return $this->container[$key]; - } - - /** - * Assign the element at the given key. - * - * This will also be called for: $arr[$key] = $value - * - * @param int|string $key The key of the element to be fetched. - * @param object $value The element to be assigned. - * @return void - * @throws \ErrorException Invalid type for key. - * @throws \ErrorException Invalid type for value. - * @throws \ErrorException Non-existing key. - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function offsetSet($key, $value) - { - $this->checkKey($this->key_type, $key); - - switch ($this->value_type) { - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::INT32: - case GPBType::ENUM: - GPBUtil::checkInt32($value); - break; - case GPBType::FIXED32: - case GPBType::UINT32: - GPBUtil::checkUint32($value); - break; - case GPBType::SFIXED64: - case GPBType::SINT64: - case GPBType::INT64: - GPBUtil::checkInt64($value); - break; - case GPBType::FIXED64: - case GPBType::UINT64: - GPBUtil::checkUint64($value); - break; - case GPBType::FLOAT: - GPBUtil::checkFloat($value); - break; - case GPBType::DOUBLE: - GPBUtil::checkDouble($value); - break; - case GPBType::BOOL: - GPBUtil::checkBool($value); - break; - case GPBType::STRING: - GPBUtil::checkString($value, true); - break; - case GPBType::MESSAGE: - if (is_null($value)) { - trigger_error("Map element cannot be null.", E_USER_ERROR); - } - GPBUtil::checkMessage($value, $this->klass); - break; - default: - break; - } - - $this->container[$key] = $value; - } - - /** - * Remove the element at the given key. - * - * This will also be called for: unset($arr) - * - * @param int|string $key The key of the element to be removed. - * @return void - * @throws \ErrorException Invalid type for key. - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function offsetUnset($key) - { - $this->checkKey($this->key_type, $key); - unset($this->container[$key]); - } - - /** - * Check the existence of the element at the given key. - * - * This will also be called for: isset($arr) - * - * @param int|string $key The key of the element to be removed. - * @return bool True if the element at the given key exists. - * @throws \ErrorException Invalid type for key. - */ - public function offsetExists($key): bool - { - $this->checkKey($this->key_type, $key); - return isset($this->container[$key]); - } - - /** - * @ignore - */ - public function getIterator(): Traversable - { - return new MapFieldIter($this->container, $this->key_type); - } - - /** - * Return the number of stored elements. - * - * This will also be called for: count($arr) - * - * @return integer The number of stored elements. - */ - public function count(): int - { - return count($this->container); - } - - /** - * @ignore - */ - private function checkKey($key_type, &$key) - { - switch ($key_type) { - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::INT32: - GPBUtil::checkInt32($key); - break; - case GPBType::FIXED32: - case GPBType::UINT32: - GPBUtil::checkUint32($key); - break; - case GPBType::SFIXED64: - case GPBType::SINT64: - case GPBType::INT64: - GPBUtil::checkInt64($key); - break; - case GPBType::FIXED64: - case GPBType::UINT64: - GPBUtil::checkUint64($key); - break; - case GPBType::BOOL: - GPBUtil::checkBool($key); - break; - case GPBType::STRING: - GPBUtil::checkString($key, true); - break; - default: - trigger_error( - "Given type cannot be map key.", - E_USER_ERROR); - break; - } - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php deleted file mode 100644 index 2ff6b44..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php +++ /dev/null @@ -1,142 +0,0 @@ -container = $container; - $this->key_type = $key_type; - } - - /** - * Reset the status of the iterator - * - * @return void - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function rewind() - { - reset($this->container); - } - - /** - * Return the element at the current position. - * - * @return object The element at the current position. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function current() - { - return current($this->container); - } - - /** - * Return the current key. - * - * @return object The current key. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function key() - { - $key = key($this->container); - switch ($this->key_type) { - case GPBType::INT64: - case GPBType::UINT64: - case GPBType::FIXED64: - case GPBType::SFIXED64: - case GPBType::SINT64: - if (PHP_INT_SIZE === 8) { - return $key; - } - // Intentionally fall through - case GPBType::STRING: - // PHP associative array stores int string as int for key. - return strval($key); - case GPBType::BOOL: - // PHP associative array stores bool as integer for key. - return boolval($key); - default: - return $key; - } - } - - /** - * Move to the next position. - * - * @return void - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function next() - { - next($this->container); - } - - /** - * Check whether there are more elements to iterate. - * - * @return bool True if there are more elements to iterate. - */ - public function valid(): bool - { - return key($this->container) !== null; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php deleted file mode 100644 index 1d1fbf2..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php +++ /dev/null @@ -1,2034 +0,0 @@ -initWithDescriptor($data); - } else { - $this->initWithGeneratedPool(); - if (is_array($data)) { - $this->mergeFromArray($data); - } else if (!empty($data)) { - throw new \InvalidArgumentException( - 'Message constructor must be an array or null.' - ); - } - } - } - - /** - * @ignore - */ - private function initWithGeneratedPool() - { - $pool = DescriptorPool::getGeneratedPool(); - $this->desc = $pool->getDescriptorByClassName(get_class($this)); - if (is_null($this->desc)) { - throw new \InvalidArgumentException( - get_class($this) ." is not found in descriptor pool. " . - 'Only generated classes may derive from Message.'); - } - foreach ($this->desc->getField() as $field) { - $setter = $field->getSetter(); - if ($field->isMap()) { - $message_type = $field->getMessageType(); - $key_field = $message_type->getFieldByNumber(1); - $value_field = $message_type->getFieldByNumber(2); - switch ($value_field->getType()) { - case GPBType::MESSAGE: - case GPBType::GROUP: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType(), - $value_field->getMessageType()->getClass()); - $this->$setter($map_field); - break; - case GPBType::ENUM: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType(), - $value_field->getEnumType()->getClass()); - $this->$setter($map_field); - break; - default: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType()); - $this->$setter($map_field); - break; - } - } else if ($field->getLabel() === GPBLabel::REPEATED) { - switch ($field->getType()) { - case GPBType::MESSAGE: - case GPBType::GROUP: - $repeated_field = new RepeatedField( - $field->getType(), - $field->getMessageType()->getClass()); - $this->$setter($repeated_field); - break; - case GPBType::ENUM: - $repeated_field = new RepeatedField( - $field->getType(), - $field->getEnumType()->getClass()); - $this->$setter($repeated_field); - break; - default: - $repeated_field = new RepeatedField($field->getType()); - $this->$setter($repeated_field); - break; - } - } else if ($field->getOneofIndex() !== -1) { - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - $this->$oneof_name = new OneofField($oneof); - } else if ($field->getLabel() === GPBLabel::OPTIONAL && - PHP_INT_SIZE == 4) { - switch ($field->getType()) { - case GPBType::INT64: - case GPBType::UINT64: - case GPBType::FIXED64: - case GPBType::SFIXED64: - case GPBType::SINT64: - $this->$setter("0"); - } - } - } - } - - /** - * @ignore - */ - private function initWithDescriptor(Descriptor $desc) - { - $this->desc = $desc; - foreach ($desc->getField() as $field) { - $setter = $field->getSetter(); - $defaultValue = $this->defaultValue($field); - $this->$setter($defaultValue); - } - } - - protected function readWrapperValue($member) - { - $field = $this->desc->getFieldByName($member); - $oneof_index = $field->getOneofIndex(); - if ($oneof_index === -1) { - $wrapper = $this->$member; - } else { - $wrapper = $this->readOneof($field->getNumber()); - } - - if (is_null($wrapper)) { - return NULL; - } else { - return $wrapper->getValue(); - } - } - - protected function writeWrapperValue($member, $value) - { - $field = $this->desc->getFieldByName($member); - $wrapped_value = $value; - if (!is_null($value)) { - $desc = $field->getMessageType(); - $klass = $desc->getClass(); - $wrapped_value = new $klass; - $wrapped_value->setValue($value); - } - - $oneof_index = $field->getOneofIndex(); - if ($oneof_index === -1) { - $this->$member = $wrapped_value; - } else { - $this->writeOneof($field->getNumber(), $wrapped_value); - } - } - - protected function readOneof($number) - { - $field = $this->desc->getFieldByNumber($number); - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - $oneof_field = $this->$oneof_name; - if ($number === $oneof_field->getNumber()) { - return $oneof_field->getValue(); - } else { - return $this->defaultValue($field); - } - } - - protected function hasOneof($number) - { - $field = $this->desc->getFieldByNumber($number); - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - $oneof_field = $this->$oneof_name; - return $number === $oneof_field->getNumber(); - } - - protected function writeOneof($number, $value) - { - $field = $this->desc->getFieldByNumber($number); - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - if ($value === null) { - $this->$oneof_name = new OneofField($oneof); - } else { - $oneof_field = $this->$oneof_name; - $oneof_field->setValue($value); - $oneof_field->setFieldName($field->getName()); - $oneof_field->setNumber($number); - } - } - - protected function whichOneof($oneof_name) - { - $oneof_field = $this->$oneof_name; - $number = $oneof_field->getNumber(); - if ($number == 0) { - return ""; - } - $field = $this->desc->getFieldByNumber($number); - return $field->getName(); - } - - /** - * @ignore - */ - private function defaultValue($field) - { - $value = null; - - switch ($field->getType()) { - case GPBType::DOUBLE: - case GPBType::FLOAT: - return 0.0; - case GPBType::UINT32: - case GPBType::INT32: - case GPBType::FIXED32: - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::ENUM: - return 0; - case GPBType::INT64: - case GPBType::UINT64: - case GPBType::FIXED64: - case GPBType::SFIXED64: - case GPBType::SINT64: - if (PHP_INT_SIZE === 4) { - return '0'; - } else { - return 0; - } - case GPBType::BOOL: - return false; - case GPBType::STRING: - case GPBType::BYTES: - return ""; - case GPBType::GROUP: - case GPBType::MESSAGE: - return null; - default: - user_error("Unsupported type."); - return false; - } - } - - /** - * @ignore - */ - private function skipField($input, $tag) - { - $number = GPBWire::getTagFieldNumber($tag); - if ($number === 0) { - throw new GPBDecodeException("Illegal field number zero."); - } - - $start = $input->current(); - switch (GPBWire::getTagWireType($tag)) { - case GPBWireType::VARINT: - $uint64 = 0; - if (!$input->readVarint64($uint64)) { - throw new GPBDecodeException( - "Unexpected EOF inside varint."); - } - break; - case GPBWireType::FIXED64: - $uint64 = 0; - if (!$input->readLittleEndian64($uint64)) { - throw new GPBDecodeException( - "Unexpected EOF inside fixed64."); - } - break; - case GPBWireType::FIXED32: - $uint32 = 0; - if (!$input->readLittleEndian32($uint32)) { - throw new GPBDecodeException( - "Unexpected EOF inside fixed32."); - } - break; - case GPBWireType::LENGTH_DELIMITED: - $length = 0; - if (!$input->readVarint32($length)) { - throw new GPBDecodeException( - "Unexpected EOF inside length."); - } - $data = NULL; - if (!$input->readRaw($length, $data)) { - throw new GPBDecodeException( - "Unexpected EOF inside length delimited data."); - } - break; - case GPBWireType::START_GROUP: - case GPBWireType::END_GROUP: - throw new GPBDecodeException("Unexpected wire type."); - default: - throw new GPBDecodeException("Unexpected wire type."); - } - $end = $input->current(); - - $bytes = str_repeat(chr(0), CodedOutputStream::MAX_VARINT64_BYTES); - $size = CodedOutputStream::writeVarintToArray($tag, $bytes, true); - $this->unknown .= substr($bytes, 0, $size) . $input->substr($start, $end); - } - - /** - * @ignore - */ - private static function parseFieldFromStreamNoTag($input, $field, &$value) - { - switch ($field->getType()) { - case GPBType::DOUBLE: - if (!GPBWire::readDouble($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside double field."); - } - break; - case GPBType::FLOAT: - if (!GPBWire::readFloat($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside float field."); - } - break; - case GPBType::INT64: - if (!GPBWire::readInt64($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside int64 field."); - } - break; - case GPBType::UINT64: - if (!GPBWire::readUint64($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside uint64 field."); - } - break; - case GPBType::INT32: - if (!GPBWire::readInt32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside int32 field."); - } - break; - case GPBType::FIXED64: - if (!GPBWire::readFixed64($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside fixed64 field."); - } - break; - case GPBType::FIXED32: - if (!GPBWire::readFixed32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside fixed32 field."); - } - break; - case GPBType::BOOL: - if (!GPBWire::readBool($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside bool field."); - } - break; - case GPBType::STRING: - // TODO(teboring): Add utf-8 check. - if (!GPBWire::readString($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside string field."); - } - break; - case GPBType::GROUP: - trigger_error("Not implemented.", E_USER_ERROR); - break; - case GPBType::MESSAGE: - if ($field->isMap()) { - $value = new MapEntry($field->getMessageType()); - } else { - $klass = $field->getMessageType()->getClass(); - $value = new $klass; - } - if (!GPBWire::readMessage($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside message."); - } - break; - case GPBType::BYTES: - if (!GPBWire::readString($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside bytes field."); - } - break; - case GPBType::UINT32: - if (!GPBWire::readUint32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside uint32 field."); - } - break; - case GPBType::ENUM: - // TODO(teboring): Check unknown enum value. - if (!GPBWire::readInt32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside enum field."); - } - break; - case GPBType::SFIXED32: - if (!GPBWire::readSfixed32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside sfixed32 field."); - } - break; - case GPBType::SFIXED64: - if (!GPBWire::readSfixed64($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside sfixed64 field."); - } - break; - case GPBType::SINT32: - if (!GPBWire::readSint32($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside sint32 field."); - } - break; - case GPBType::SINT64: - if (!GPBWire::readSint64($input, $value)) { - throw new GPBDecodeException( - "Unexpected EOF inside sint64 field."); - } - break; - default: - user_error("Unsupported type."); - return false; - } - return true; - } - - /** - * @ignore - */ - private function parseFieldFromStream($tag, $input, $field) - { - $value = null; - - if (is_null($field)) { - $value_format = GPBWire::UNKNOWN; - } elseif (GPBWire::getTagWireType($tag) === - GPBWire::getWireType($field->getType())) { - $value_format = GPBWire::NORMAL_FORMAT; - } elseif ($field->isPackable() && - GPBWire::getTagWireType($tag) === - GPBWire::WIRETYPE_LENGTH_DELIMITED) { - $value_format = GPBWire::PACKED_FORMAT; - } else { - // the wire type doesn't match. Put it in our unknown field set. - $value_format = GPBWire::UNKNOWN; - } - - if ($value_format === GPBWire::UNKNOWN) { - $this->skipField($input, $tag); - return; - } elseif ($value_format === GPBWire::NORMAL_FORMAT) { - self::parseFieldFromStreamNoTag($input, $field, $value); - } elseif ($value_format === GPBWire::PACKED_FORMAT) { - $length = 0; - if (!GPBWire::readInt32($input, $length)) { - throw new GPBDecodeException( - "Unexpected EOF inside packed length."); - } - $limit = $input->pushLimit($length); - $getter = $field->getGetter(); - while ($input->bytesUntilLimit() > 0) { - self::parseFieldFromStreamNoTag($input, $field, $value); - $this->appendHelper($field, $value); - } - $input->popLimit($limit); - return; - } else { - return; - } - - if ($field->isMap()) { - $this->kvUpdateHelper($field, $value->getKey(), $value->getValue()); - } else if ($field->isRepeated()) { - $this->appendHelper($field, $value); - } else { - $setter = $field->getSetter(); - $this->$setter($value); - } - } - - /** - * Clear all containing fields. - * @return null. - */ - public function clear() - { - $this->unknown = ""; - foreach ($this->desc->getField() as $field) { - $setter = $field->getSetter(); - if ($field->isMap()) { - $message_type = $field->getMessageType(); - $key_field = $message_type->getFieldByNumber(1); - $value_field = $message_type->getFieldByNumber(2); - switch ($value_field->getType()) { - case GPBType::MESSAGE: - case GPBType::GROUP: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType(), - $value_field->getMessageType()->getClass()); - $this->$setter($map_field); - break; - case GPBType::ENUM: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType(), - $value_field->getEnumType()->getClass()); - $this->$setter($map_field); - break; - default: - $map_field = new MapField( - $key_field->getType(), - $value_field->getType()); - $this->$setter($map_field); - break; - } - } else if ($field->getLabel() === GPBLabel::REPEATED) { - switch ($field->getType()) { - case GPBType::MESSAGE: - case GPBType::GROUP: - $repeated_field = new RepeatedField( - $field->getType(), - $field->getMessageType()->getClass()); - $this->$setter($repeated_field); - break; - case GPBType::ENUM: - $repeated_field = new RepeatedField( - $field->getType(), - $field->getEnumType()->getClass()); - $this->$setter($repeated_field); - break; - default: - $repeated_field = new RepeatedField($field->getType()); - $this->$setter($repeated_field); - break; - } - } else if ($field->getOneofIndex() !== -1) { - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - $this->$oneof_name = new OneofField($oneof); - } else if ($field->getLabel() === GPBLabel::OPTIONAL) { - switch ($field->getType()) { - case GPBType::DOUBLE : - case GPBType::FLOAT : - $this->$setter(0.0); - break; - case GPBType::INT32 : - case GPBType::FIXED32 : - case GPBType::UINT32 : - case GPBType::SFIXED32 : - case GPBType::SINT32 : - case GPBType::ENUM : - $this->$setter(0); - break; - case GPBType::BOOL : - $this->$setter(false); - break; - case GPBType::STRING : - case GPBType::BYTES : - $this->$setter(""); - break; - case GPBType::GROUP : - case GPBType::MESSAGE : - $null = null; - $this->$setter($null); - break; - } - if (PHP_INT_SIZE == 4) { - switch ($field->getType()) { - case GPBType::INT64: - case GPBType::UINT64: - case GPBType::FIXED64: - case GPBType::SFIXED64: - case GPBType::SINT64: - $this->$setter("0"); - } - } else { - switch ($field->getType()) { - case GPBType::INT64: - case GPBType::UINT64: - case GPBType::FIXED64: - case GPBType::SFIXED64: - case GPBType::SINT64: - $this->$setter(0); - } - } - } - } - } - - /** - * Clear all unknown fields previously parsed. - * @return null. - */ - public function discardUnknownFields() - { - $this->unknown = ""; - foreach ($this->desc->getField() as $field) { - if ($field->getType() != GPBType::MESSAGE) { - continue; - } - if ($field->isMap()) { - $value_field = $field->getMessageType()->getFieldByNumber(2); - if ($value_field->getType() != GPBType::MESSAGE) { - continue; - } - $getter = $field->getGetter(); - $map = $this->$getter(); - foreach ($map as $key => $value) { - $value->discardUnknownFields(); - } - } else if ($field->getLabel() === GPBLabel::REPEATED) { - $getter = $field->getGetter(); - $arr = $this->$getter(); - foreach ($arr as $sub) { - $sub->discardUnknownFields(); - } - } else if ($field->getLabel() === GPBLabel::OPTIONAL) { - $getter = $field->getGetter(); - $sub = $this->$getter(); - if (!is_null($sub)) { - $sub->discardUnknownFields(); - } - } - } - } - - /** - * Merges the contents of the specified message into current message. - * - * This method merges the contents of the specified message into the - * current message. Singular fields that are set in the specified message - * overwrite the corresponding fields in the current message. Repeated - * fields are appended. Map fields key-value pairs are overwritten. - * Singular/Oneof sub-messages are recursively merged. All overwritten - * sub-messages are deep-copied. - * - * @param object $msg Protobuf message to be merged from. - * @return null. - */ - public function mergeFrom($msg) - { - if (get_class($this) !== get_class($msg)) { - user_error("Cannot merge messages with different class."); - return; - } - - foreach ($this->desc->getField() as $field) { - $setter = $field->getSetter(); - $getter = $field->getGetter(); - if ($field->isMap()) { - if (count($msg->$getter()) != 0) { - $value_field = $field->getMessageType()->getFieldByNumber(2); - foreach ($msg->$getter() as $key => $value) { - if ($value_field->getType() == GPBType::MESSAGE) { - $klass = $value_field->getMessageType()->getClass(); - $copy = new $klass; - $copy->mergeFrom($value); - - $this->kvUpdateHelper($field, $key, $copy); - } else { - $this->kvUpdateHelper($field, $key, $value); - } - } - } - } else if ($field->getLabel() === GPBLabel::REPEATED) { - if (count($msg->$getter()) != 0) { - foreach ($msg->$getter() as $tmp) { - if ($field->getType() == GPBType::MESSAGE) { - $klass = $field->getMessageType()->getClass(); - $copy = new $klass; - $copy->mergeFrom($tmp); - $this->appendHelper($field, $copy); - } else { - $this->appendHelper($field, $tmp); - } - } - } - } else if ($field->getLabel() === GPBLabel::OPTIONAL) { - if($msg->$getter() !== $this->defaultValue($field)) { - $tmp = $msg->$getter(); - if ($field->getType() == GPBType::MESSAGE) { - if (is_null($this->$getter())) { - $klass = $field->getMessageType()->getClass(); - $new_msg = new $klass; - $this->$setter($new_msg); - } - $this->$getter()->mergeFrom($tmp); - } else { - $this->$setter($tmp); - } - } - } - } - } - - /** - * Parses a protocol buffer contained in a string. - * - * This function takes a string in the (non-human-readable) binary wire - * format, matching the encoding output by serializeToString(). - * See mergeFrom() for merging behavior, if the field is already set in the - * specified message. - * - * @param string $data Binary protobuf data. - * @return null. - * @throws \Exception Invalid data. - */ - public function mergeFromString($data) - { - $input = new CodedInputStream($data); - $this->parseFromStream($input); - } - - /** - * Parses a json string to protobuf message. - * - * This function takes a string in the json wire format, matching the - * encoding output by serializeToJsonString(). - * See mergeFrom() for merging behavior, if the field is already set in the - * specified message. - * - * @param string $data Json protobuf data. - * @return null. - * @throws \Exception Invalid data. - */ - public function mergeFromJsonString($data, $ignore_unknown = false) - { - $input = new RawInputStream($data); - $this->parseFromJsonStream($input, $ignore_unknown); - } - - /** - * @ignore - */ - public function parseFromStream($input) - { - while (true) { - $tag = $input->readTag(); - // End of input. This is a valid place to end, so return true. - if ($tag === 0) { - return true; - } - - $number = GPBWire::getTagFieldNumber($tag); - $field = $this->desc->getFieldByNumber($number); - - $this->parseFieldFromStream($tag, $input, $field); - } - } - - private function convertJsonValueToProtoValue( - $value, - $field, - $ignore_unknown, - $is_map_key = false) - { - switch ($field->getType()) { - case GPBType::MESSAGE: - $klass = $field->getMessageType()->getClass(); - $submsg = new $klass; - - if (is_a($submsg, "Google\Protobuf\Duration")) { - if (is_null($value)) { - return $this->defaultValue($field); - } else if (!is_string($value)) { - throw new GPBDecodeException("Expect string."); - } - return GPBUtil::parseDuration($value); - } else if ($field->isTimestamp()) { - if (is_null($value)) { - return $this->defaultValue($field); - } else if (!is_string($value)) { - throw new GPBDecodeException("Expect string."); - } - try { - $timestamp = GPBUtil::parseTimestamp($value); - } catch (\Exception $e) { - throw new GPBDecodeException( - "Invalid RFC 3339 timestamp: ".$e->getMessage()); - } - - $submsg->setSeconds($timestamp->getSeconds()); - $submsg->setNanos($timestamp->getNanos()); - } else if (is_a($submsg, "Google\Protobuf\FieldMask")) { - if (is_null($value)) { - return $this->defaultValue($field); - } - try { - return GPBUtil::parseFieldMask($value); - } catch (\Exception $e) { - throw new GPBDecodeException( - "Invalid FieldMask: ".$e->getMessage()); - } - } else { - if (is_null($value) && - !is_a($submsg, "Google\Protobuf\Value")) { - return $this->defaultValue($field); - } - if (GPBUtil::hasSpecialJsonMapping($submsg)) { - } elseif (!is_object($value) && !is_array($value)) { - throw new GPBDecodeException("Expect message."); - } - $submsg->mergeFromJsonArray($value, $ignore_unknown); - } - return $submsg; - case GPBType::ENUM: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (is_integer($value)) { - return $value; - } - $enum_value = $field->getEnumType()->getValueByName($value); - if (!is_null($enum_value)) { - return $enum_value->getNumber(); - } else if ($ignore_unknown) { - return $this->defaultValue($field); - } else { - throw new GPBDecodeException( - "Enum field only accepts integer or enum value name"); - } - case GPBType::STRING: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (is_numeric($value)) { - return strval($value); - } - if (!is_string($value)) { - throw new GPBDecodeException( - "String field only accepts string value"); - } - return $value; - case GPBType::BYTES: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (!is_string($value)) { - throw new GPBDecodeException( - "Byte field only accepts string value"); - } - $proto_value = base64_decode($value, true); - if ($proto_value === false) { - throw new GPBDecodeException("Invalid base64 characters"); - } - return $proto_value; - case GPBType::BOOL: - if (is_null($value)) { - return $this->defaultValue($field); - } - if ($is_map_key) { - if ($value === "true") { - return true; - } - if ($value === "false") { - return false; - } - throw new GPBDecodeException( - "Bool field only accepts bool value"); - } - if (!is_bool($value)) { - throw new GPBDecodeException( - "Bool field only accepts bool value"); - } - return $value; - case GPBType::FLOAT: - case GPBType::DOUBLE: - if (is_null($value)) { - return $this->defaultValue($field); - } - if ($value === "Infinity") { - return INF; - } - if ($value === "-Infinity") { - return -INF; - } - if ($value === "NaN") { - return NAN; - } - return $value; - case GPBType::INT32: - case GPBType::SINT32: - case GPBType::SFIXED32: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (!is_numeric($value)) { - throw new GPBDecodeException( - "Invalid data type for int32 field"); - } - if (is_string($value) && trim($value) !== $value) { - throw new GPBDecodeException( - "Invalid data type for int32 field"); - } - if (bccomp($value, "2147483647") > 0) { - throw new GPBDecodeException( - "Int32 too large"); - } - if (bccomp($value, "-2147483648") < 0) { - throw new GPBDecodeException( - "Int32 too small"); - } - return $value; - case GPBType::UINT32: - case GPBType::FIXED32: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (!is_numeric($value)) { - throw new GPBDecodeException( - "Invalid data type for uint32 field"); - } - if (is_string($value) && trim($value) !== $value) { - throw new GPBDecodeException( - "Invalid data type for int32 field"); - } - if (bccomp($value, 4294967295) > 0) { - throw new GPBDecodeException( - "Uint32 too large"); - } - return $value; - case GPBType::INT64: - case GPBType::SINT64: - case GPBType::SFIXED64: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (!is_numeric($value)) { - throw new GPBDecodeException( - "Invalid data type for int64 field"); - } - if (is_string($value) && trim($value) !== $value) { - throw new GPBDecodeException( - "Invalid data type for int64 field"); - } - if (bccomp($value, "9223372036854775807") > 0) { - throw new GPBDecodeException( - "Int64 too large"); - } - if (bccomp($value, "-9223372036854775808") < 0) { - throw new GPBDecodeException( - "Int64 too small"); - } - return $value; - case GPBType::UINT64: - case GPBType::FIXED64: - if (is_null($value)) { - return $this->defaultValue($field); - } - if (!is_numeric($value)) { - throw new GPBDecodeException( - "Invalid data type for int64 field"); - } - if (is_string($value) && trim($value) !== $value) { - throw new GPBDecodeException( - "Invalid data type for int64 field"); - } - if (bccomp($value, "18446744073709551615") > 0) { - throw new GPBDecodeException( - "Uint64 too large"); - } - if (bccomp($value, "9223372036854775807") > 0) { - $value = bcsub($value, "18446744073709551616"); - } - return $value; - default: - return $value; - } - } - - /** - * Populates the message from a user-supplied PHP array. Array keys - * correspond to Message properties and nested message properties. - * - * Example: - * ``` - * $message->mergeFromArray([ - * 'name' => 'This is a message name', - * 'interval' => [ - * 'startTime' => time() - 60, - * 'endTime' => time(), - * ] - * ]); - * ``` - * - * This method will trigger an error if it is passed data that cannot - * be converted to the correct type. For example, a StringValue field - * must receive data that is either a string or a StringValue object. - * - * @param array $array An array containing message properties and values. - * @return null. - */ - protected function mergeFromArray(array $array) - { - // Just call the setters for the field names - foreach ($array as $key => $value) { - $field = $this->desc->getFieldByName($key); - if (is_null($field)) { - throw new \UnexpectedValueException( - 'Invalid message property: ' . $key); - } - $setter = $field->getSetter(); - if ($field->isMap()) { - $valueField = $field->getMessageType()->getFieldByName('value'); - if (!is_null($valueField) && $valueField->isWrapperType()) { - self::normalizeArrayElementsToMessageType($value, $valueField->getMessageType()->getClass()); - } - } elseif ($field->isWrapperType()) { - $class = $field->getMessageType()->getClass(); - if ($field->isRepeated()) { - self::normalizeArrayElementsToMessageType($value, $class); - } else { - self::normalizeToMessageType($value, $class); - } - } - $this->$setter($value); - } - } - - /** - * Tries to normalize the elements in $value into a provided protobuf - * wrapper type $class. If $value is any type other than array, we do - * not do any conversion, and instead rely on the existing protobuf - * type checking. If $value is an array, we process each element and - * try to convert it to an instance of $class. - * - * @param mixed $value The array of values to normalize. - * @param string $class The expected wrapper class name - */ - private static function normalizeArrayElementsToMessageType(&$value, $class) - { - if (!is_array($value)) { - // In the case that $value is not an array, we do not want to - // attempt any conversion. Note that this includes the cases - // when $value is a RepeatedField of MapField. In those cases, - // we do not need to convert the elements, as they should - // already be the correct types. - return; - } else { - // Normalize each element in the array. - foreach ($value as $key => &$elementValue) { - self::normalizeToMessageType($elementValue, $class); - } - } - } - - /** - * Tries to normalize $value into a provided protobuf wrapper type $class. - * If $value is any type other than an object, we attempt to construct an - * instance of $class and assign $value to it using the setValue method - * shared by all wrapper types. - * - * This method will raise an error if it receives a type that cannot be - * assigned to the wrapper type via setValue. - * - * @param mixed $value The value to normalize. - * @param string $class The expected wrapper class name - */ - private static function normalizeToMessageType(&$value, $class) - { - if (is_null($value) || is_object($value)) { - // This handles the case that $value is an instance of $class. We - // choose not to do any more strict checking here, relying on the - // existing type checking done by GPBUtil. - return; - } else { - // Try to instantiate $class and set the value - try { - $msg = new $class; - $msg->setValue($value); - $value = $msg; - return; - } catch (\Exception $exception) { - trigger_error( - "Error normalizing value to type '$class': " . $exception->getMessage(), - E_USER_ERROR - ); - } - } - } - - protected function mergeFromJsonArray($array, $ignore_unknown) - { - if (is_a($this, "Google\Protobuf\Any")) { - $this->clear(); - $this->setTypeUrl($array["@type"]); - $msg = $this->unpack(); - if (GPBUtil::hasSpecialJsonMapping($msg)) { - $msg->mergeFromJsonArray($array["value"], $ignore_unknown); - } else { - unset($array["@type"]); - $msg->mergeFromJsonArray($array, $ignore_unknown); - } - $this->setValue($msg->serializeToString()); - return; - } - if (is_a($this, "Google\Protobuf\DoubleValue") || - is_a($this, "Google\Protobuf\FloatValue") || - is_a($this, "Google\Protobuf\Int64Value") || - is_a($this, "Google\Protobuf\UInt64Value") || - is_a($this, "Google\Protobuf\Int32Value") || - is_a($this, "Google\Protobuf\UInt32Value") || - is_a($this, "Google\Protobuf\BoolValue") || - is_a($this, "Google\Protobuf\StringValue")) { - $this->setValue($array); - return; - } - if (is_a($this, "Google\Protobuf\BytesValue")) { - $this->setValue(base64_decode($array)); - return; - } - if (is_a($this, "Google\Protobuf\Duration")) { - $this->mergeFrom(GPBUtil::parseDuration($array)); - return; - } - if (is_a($this, "Google\Protobuf\FieldMask")) { - $this->mergeFrom(GPBUtil::parseFieldMask($array)); - return; - } - if (is_a($this, "Google\Protobuf\Timestamp")) { - $this->mergeFrom(GPBUtil::parseTimestamp($array)); - return; - } - if (is_a($this, "Google\Protobuf\Struct")) { - $fields = $this->getFields(); - foreach($array as $key => $value) { - $v = new Value(); - $v->mergeFromJsonArray($value, $ignore_unknown); - $fields[$key] = $v; - } - return; - } - if (is_a($this, "Google\Protobuf\Value")) { - if (is_bool($array)) { - $this->setBoolValue($array); - } elseif (is_string($array)) { - $this->setStringValue($array); - } elseif (is_null($array)) { - $this->setNullValue(0); - } elseif (is_double($array) || is_integer($array)) { - $this->setNumberValue($array); - } elseif (is_array($array)) { - if (array_values($array) !== $array) { - // Associative array - $struct_value = $this->getStructValue(); - if (is_null($struct_value)) { - $struct_value = new Struct(); - $this->setStructValue($struct_value); - } - foreach ($array as $key => $v) { - $value = new Value(); - $value->mergeFromJsonArray($v, $ignore_unknown); - $values = $struct_value->getFields(); - $values[$key]= $value; - } - } else { - // Array - $list_value = $this->getListValue(); - if (is_null($list_value)) { - $list_value = new ListValue(); - $this->setListValue($list_value); - } - foreach ($array as $v) { - $value = new Value(); - $value->mergeFromJsonArray($v, $ignore_unknown); - $values = $list_value->getValues(); - $values[]= $value; - } - } - } else { - throw new GPBDecodeException("Invalid type for Value."); - } - return; - } - $this->mergeFromArrayJsonImpl($array, $ignore_unknown); - } - - private function mergeFromArrayJsonImpl($array, $ignore_unknown) - { - foreach ($array as $key => $value) { - $field = $this->desc->getFieldByJsonName($key); - if (is_null($field)) { - $field = $this->desc->getFieldByName($key); - if (is_null($field)) { - if ($ignore_unknown) { - continue; - } else { - throw new GPBDecodeException( - $key . ' is unknown.' - ); - } - } - } - if ($field->isMap()) { - if (is_null($value)) { - continue; - } - $key_field = $field->getMessageType()->getFieldByNumber(1); - $value_field = $field->getMessageType()->getFieldByNumber(2); - foreach ($value as $tmp_key => $tmp_value) { - if (is_null($tmp_value)) { - throw new \Exception( - "Map value field element cannot be null."); - } - $proto_key = $this->convertJsonValueToProtoValue( - $tmp_key, - $key_field, - $ignore_unknown, - true); - $proto_value = $this->convertJsonValueToProtoValue( - $tmp_value, - $value_field, - $ignore_unknown); - self::kvUpdateHelper($field, $proto_key, $proto_value); - } - } else if ($field->isRepeated()) { - if (is_null($value)) { - continue; - } - foreach ($value as $tmp) { - if (is_null($tmp)) { - throw new \Exception( - "Repeated field elements cannot be null."); - } - $proto_value = $this->convertJsonValueToProtoValue( - $tmp, - $field, - $ignore_unknown); - self::appendHelper($field, $proto_value); - } - } else { - $setter = $field->getSetter(); - $proto_value = $this->convertJsonValueToProtoValue( - $value, - $field, - $ignore_unknown); - if ($field->getType() === GPBType::MESSAGE) { - if (is_null($proto_value)) { - continue; - } - $getter = $field->getGetter(); - $submsg = $this->$getter(); - if (!is_null($submsg)) { - $submsg->mergeFrom($proto_value); - continue; - } - } - $this->$setter($proto_value); - } - } - } - - /** - * @ignore - */ - public function parseFromJsonStream($input, $ignore_unknown) - { - $array = json_decode($input->getData(), true, 512, JSON_BIGINT_AS_STRING); - if ($this instanceof \Google\Protobuf\ListValue) { - $array = ["values"=>$array]; - } - if (is_null($array)) { - if ($this instanceof \Google\Protobuf\Value) { - $this->setNullValue(\Google\Protobuf\NullValue::NULL_VALUE); - return; - } else { - throw new GPBDecodeException( - "Cannot decode json string: " . $input->getData()); - } - } - try { - $this->mergeFromJsonArray($array, $ignore_unknown); - } catch (\Exception $e) { - throw new GPBDecodeException($e->getMessage()); - } - } - - /** - * @ignore - */ - private function serializeSingularFieldToStream($field, &$output) - { - if (!$this->existField($field)) { - return true; - } - $getter = $field->getGetter(); - $value = $this->$getter(); - if (!GPBWire::serializeFieldToStream($value, $field, true, $output)) { - return false; - } - return true; - } - - /** - * @ignore - */ - private function serializeRepeatedFieldToStream($field, &$output) - { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count === 0) { - return true; - } - - $packed = $field->getPacked(); - if ($packed) { - if (!GPBWire::writeTag( - $output, - GPBWire::makeTag($field->getNumber(), GPBType::STRING))) { - return false; - } - $size = 0; - foreach ($values as $value) { - $size += $this->fieldDataOnlyByteSize($field, $value); - } - if (!$output->writeVarint32($size, true)) { - return false; - } - } - - foreach ($values as $value) { - if (!GPBWire::serializeFieldToStream( - $value, - $field, - !$packed, - $output)) { - return false; - } - } - return true; - } - - /** - * @ignore - */ - private function serializeMapFieldToStream($field, $output) - { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count === 0) { - return true; - } - - foreach ($values as $key => $value) { - $map_entry = new MapEntry($field->getMessageType()); - $map_entry->setKey($key); - $map_entry->setValue($value); - if (!GPBWire::serializeFieldToStream( - $map_entry, - $field, - true, - $output)) { - return false; - } - } - return true; - } - - /** - * @ignore - */ - private function serializeFieldToStream(&$output, $field) - { - if ($field->isMap()) { - return $this->serializeMapFieldToStream($field, $output); - } elseif ($field->isRepeated()) { - return $this->serializeRepeatedFieldToStream($field, $output); - } else { - return $this->serializeSingularFieldToStream($field, $output); - } - } - - /** - * @ignore - */ - private function serializeFieldToJsonStream(&$output, $field) - { - $getter = $field->getGetter(); - $values = $this->$getter(); - return GPBJsonWire::serializeFieldToStream( - $values, $field, $output, !GPBUtil::hasSpecialJsonMapping($this)); - } - - /** - * @ignore - */ - public function serializeToStream(&$output) - { - $fields = $this->desc->getField(); - foreach ($fields as $field) { - if (!$this->serializeFieldToStream($output, $field)) { - return false; - } - } - $output->writeRaw($this->unknown, strlen($this->unknown)); - return true; - } - - /** - * @ignore - */ - public function serializeToJsonStream(&$output) - { - if (is_a($this, 'Google\Protobuf\Any')) { - $output->writeRaw("{", 1); - $type_field = $this->desc->getFieldByNumber(1); - $value_msg = $this->unpack(); - - // Serialize type url. - $output->writeRaw("\"@type\":", 8); - $output->writeRaw("\"", 1); - $output->writeRaw($this->getTypeUrl(), strlen($this->getTypeUrl())); - $output->writeRaw("\"", 1); - - // Serialize value - if (GPBUtil::hasSpecialJsonMapping($value_msg)) { - $output->writeRaw(",\"value\":", 9); - $value_msg->serializeToJsonStream($output); - } else { - $value_fields = $value_msg->desc->getField(); - foreach ($value_fields as $field) { - if ($value_msg->existField($field)) { - $output->writeRaw(",", 1); - if (!$value_msg->serializeFieldToJsonStream($output, $field)) { - return false; - } - } - } - } - - $output->writeRaw("}", 1); - } elseif (is_a($this, 'Google\Protobuf\FieldMask')) { - $field_mask = GPBUtil::formatFieldMask($this); - $output->writeRaw("\"", 1); - $output->writeRaw($field_mask, strlen($field_mask)); - $output->writeRaw("\"", 1); - } elseif (is_a($this, 'Google\Protobuf\Duration')) { - $duration = GPBUtil::formatDuration($this) . "s"; - $output->writeRaw("\"", 1); - $output->writeRaw($duration, strlen($duration)); - $output->writeRaw("\"", 1); - } elseif (get_class($this) === 'Google\Protobuf\Timestamp') { - $timestamp = GPBUtil::formatTimestamp($this); - $timestamp = json_encode($timestamp); - $output->writeRaw($timestamp, strlen($timestamp)); - } elseif (get_class($this) === 'Google\Protobuf\ListValue') { - $field = $this->desc->getField()[1]; - if (!$this->existField($field)) { - $output->writeRaw("[]", 2); - } else { - if (!$this->serializeFieldToJsonStream($output, $field)) { - return false; - } - } - } elseif (get_class($this) === 'Google\Protobuf\Struct') { - $field = $this->desc->getField()[1]; - if (!$this->existField($field)) { - $output->writeRaw("{}", 2); - } else { - if (!$this->serializeFieldToJsonStream($output, $field)) { - return false; - } - } - } else { - if (!GPBUtil::hasSpecialJsonMapping($this)) { - $output->writeRaw("{", 1); - } - $fields = $this->desc->getField(); - $first = true; - foreach ($fields as $field) { - if ($this->existField($field) || - GPBUtil::hasJsonValue($this)) { - if ($first) { - $first = false; - } else { - $output->writeRaw(",", 1); - } - if (!$this->serializeFieldToJsonStream($output, $field)) { - return false; - } - } - } - if (!GPBUtil::hasSpecialJsonMapping($this)) { - $output->writeRaw("}", 1); - } - } - return true; - } - - /** - * Serialize the message to string. - * @return string Serialized binary protobuf data. - */ - public function serializeToString() - { - $output = new CodedOutputStream($this->byteSize()); - $this->serializeToStream($output); - return $output->getData(); - } - - /** - * Serialize the message to json string. - * @return string Serialized json protobuf data. - */ - public function serializeToJsonString() - { - $output = new CodedOutputStream($this->jsonByteSize()); - $this->serializeToJsonStream($output); - return $output->getData(); - } - - /** - * @ignore - */ - private function existField($field) - { - $getter = $field->getGetter(); - $hazzer = "has" . substr($getter, 3); - - if (method_exists($this, $hazzer)) { - return $this->$hazzer(); - } else if ($field->getOneofIndex() !== -1) { - // For old generated code, which does not have hazzers for oneof - // fields. - $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()]; - $oneof_name = $oneof->getName(); - return $this->$oneof_name->getNumber() === $field->getNumber(); - } - - $values = $this->$getter(); - if ($field->isMap()) { - return count($values) !== 0; - } elseif ($field->isRepeated()) { - return count($values) !== 0; - } else { - return $values !== $this->defaultValue($field); - } - } - - /** - * @ignore - */ - private function repeatedFieldDataOnlyByteSize($field) - { - $size = 0; - - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count !== 0) { - $size += $count * GPBWire::tagSize($field); - foreach ($values as $value) { - $size += $this->singularFieldDataOnlyByteSize($field); - } - } - } - - /** - * @ignore - */ - private function fieldDataOnlyByteSize($field, $value) - { - $size = 0; - - switch ($field->getType()) { - case GPBType::BOOL: - $size += 1; - break; - case GPBType::FLOAT: - case GPBType::FIXED32: - case GPBType::SFIXED32: - $size += 4; - break; - case GPBType::DOUBLE: - case GPBType::FIXED64: - case GPBType::SFIXED64: - $size += 8; - break; - case GPBType::INT32: - case GPBType::ENUM: - $size += GPBWire::varint32Size($value, true); - break; - case GPBType::UINT32: - $size += GPBWire::varint32Size($value); - break; - case GPBType::UINT64: - case GPBType::INT64: - $size += GPBWire::varint64Size($value); - break; - case GPBType::SINT32: - $size += GPBWire::sint32Size($value); - break; - case GPBType::SINT64: - $size += GPBWire::sint64Size($value); - break; - case GPBType::STRING: - case GPBType::BYTES: - $size += strlen($value); - $size += GPBWire::varint32Size($size); - break; - case GPBType::MESSAGE: - $size += $value->byteSize(); - $size += GPBWire::varint32Size($size); - break; - case GPBType::GROUP: - // TODO(teboring): Add support. - user_error("Unsupported type."); - break; - default: - user_error("Unsupported type."); - return 0; - } - - return $size; - } - - /** - * @ignore - */ - private function fieldDataOnlyJsonByteSize($field, $value) - { - $size = 0; - - switch ($field->getType()) { - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::INT32: - $size += strlen(strval($value)); - break; - case GPBType::FIXED32: - case GPBType::UINT32: - if ($value < 0) { - $value = bcadd($value, "4294967296"); - } - $size += strlen(strval($value)); - break; - case GPBType::FIXED64: - case GPBType::UINT64: - if ($value < 0) { - $value = bcadd($value, "18446744073709551616"); - } - // Intentional fall through. - case GPBType::SFIXED64: - case GPBType::INT64: - case GPBType::SINT64: - $size += 2; // size for "" - $size += strlen(strval($value)); - break; - case GPBType::FLOAT: - if (is_nan($value)) { - $size += strlen("NaN") + 2; - } elseif ($value === INF) { - $size += strlen("Infinity") + 2; - } elseif ($value === -INF) { - $size += strlen("-Infinity") + 2; - } else { - $size += strlen(sprintf("%.8g", $value)); - } - break; - case GPBType::DOUBLE: - if (is_nan($value)) { - $size += strlen("NaN") + 2; - } elseif ($value === INF) { - $size += strlen("Infinity") + 2; - } elseif ($value === -INF) { - $size += strlen("-Infinity") + 2; - } else { - $size += strlen(sprintf("%.17g", $value)); - } - break; - case GPBType::ENUM: - $enum_desc = $field->getEnumType(); - if ($enum_desc->getClass() === "Google\Protobuf\NullValue") { - $size += 4; - break; - } - $enum_value_desc = $enum_desc->getValueByNumber($value); - if (!is_null($enum_value_desc)) { - $size += 2; // size for "" - $size += strlen($enum_value_desc->getName()); - } else { - $str_value = strval($value); - $size += strlen($str_value); - } - break; - case GPBType::BOOL: - if ($value) { - $size += 4; - } else { - $size += 5; - } - break; - case GPBType::STRING: - $value = json_encode($value, JSON_UNESCAPED_UNICODE); - $size += strlen($value); - break; - case GPBType::BYTES: - # if (is_a($this, "Google\Protobuf\BytesValue")) { - # $size += strlen(json_encode($value)); - # } else { - # $size += strlen(base64_encode($value)); - # $size += 2; // size for \"\" - # } - $size += strlen(base64_encode($value)); - $size += 2; // size for \"\" - break; - case GPBType::MESSAGE: - $size += $value->jsonByteSize(); - break; -# case GPBType::GROUP: -# // TODO(teboring): Add support. -# user_error("Unsupported type."); -# break; - default: - user_error("Unsupported type " . $field->getType()); - return 0; - } - - return $size; - } - - /** - * @ignore - */ - private function fieldByteSize($field) - { - $size = 0; - if ($field->isMap()) { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count !== 0) { - $size += $count * GPBWire::tagSize($field); - $message_type = $field->getMessageType(); - $key_field = $message_type->getFieldByNumber(1); - $value_field = $message_type->getFieldByNumber(2); - foreach ($values as $key => $value) { - $data_size = 0; - if ($key != $this->defaultValue($key_field)) { - $data_size += $this->fieldDataOnlyByteSize( - $key_field, - $key); - $data_size += GPBWire::tagSize($key_field); - } - if ($value != $this->defaultValue($value_field)) { - $data_size += $this->fieldDataOnlyByteSize( - $value_field, - $value); - $data_size += GPBWire::tagSize($value_field); - } - $size += GPBWire::varint32Size($data_size) + $data_size; - } - } - } elseif ($field->isRepeated()) { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count !== 0) { - if ($field->getPacked()) { - $data_size = 0; - foreach ($values as $value) { - $data_size += $this->fieldDataOnlyByteSize($field, $value); - } - $size += GPBWire::tagSize($field); - $size += GPBWire::varint32Size($data_size); - $size += $data_size; - } else { - $size += $count * GPBWire::tagSize($field); - foreach ($values as $value) { - $size += $this->fieldDataOnlyByteSize($field, $value); - } - } - } - } elseif ($this->existField($field)) { - $size += GPBWire::tagSize($field); - $getter = $field->getGetter(); - $value = $this->$getter(); - $size += $this->fieldDataOnlyByteSize($field, $value); - } - return $size; - } - - /** - * @ignore - */ - private function fieldJsonByteSize($field) - { - $size = 0; - - if ($field->isMap()) { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count !== 0) { - if (!GPBUtil::hasSpecialJsonMapping($this)) { - $size += 3; // size for "\"\":". - $size += strlen($field->getJsonName()); // size for field name - } - $size += 2; // size for "{}". - $size += $count - 1; // size for commas - $getter = $field->getGetter(); - $map_entry = $field->getMessageType(); - $key_field = $map_entry->getFieldByNumber(1); - $value_field = $map_entry->getFieldByNumber(2); - switch ($key_field->getType()) { - case GPBType::STRING: - case GPBType::SFIXED64: - case GPBType::INT64: - case GPBType::SINT64: - case GPBType::FIXED64: - case GPBType::UINT64: - $additional_quote = false; - break; - default: - $additional_quote = true; - } - foreach ($values as $key => $value) { - if ($additional_quote) { - $size += 2; // size for "" - } - $size += $this->fieldDataOnlyJsonByteSize($key_field, $key); - $size += $this->fieldDataOnlyJsonByteSize($value_field, $value); - $size += 1; // size for : - } - } - } elseif ($field->isRepeated()) { - $getter = $field->getGetter(); - $values = $this->$getter(); - $count = count($values); - if ($count !== 0) { - if (!GPBUtil::hasSpecialJsonMapping($this)) { - $size += 3; // size for "\"\":". - $size += strlen($field->getJsonName()); // size for field name - } - $size += 2; // size for "[]". - $size += $count - 1; // size for commas - $getter = $field->getGetter(); - foreach ($values as $value) { - $size += $this->fieldDataOnlyJsonByteSize($field, $value); - } - } - } elseif ($this->existField($field) || GPBUtil::hasJsonValue($this)) { - if (!GPBUtil::hasSpecialJsonMapping($this)) { - $size += 3; // size for "\"\":". - $size += strlen($field->getJsonName()); // size for field name - } - $getter = $field->getGetter(); - $value = $this->$getter(); - $size += $this->fieldDataOnlyJsonByteSize($field, $value); - } - return $size; - } - - /** - * @ignore - */ - public function byteSize() - { - $size = 0; - - $fields = $this->desc->getField(); - foreach ($fields as $field) { - $size += $this->fieldByteSize($field); - } - $size += strlen($this->unknown); - return $size; - } - - private function appendHelper($field, $append_value) - { - $getter = $field->getGetter(); - $setter = $field->getSetter(); - - $field_arr_value = $this->$getter(); - $field_arr_value[] = $append_value; - - if (!is_object($field_arr_value)) { - $this->$setter($field_arr_value); - } - } - - private function kvUpdateHelper($field, $update_key, $update_value) - { - $getter = $field->getGetter(); - $setter = $field->getSetter(); - - $field_arr_value = $this->$getter(); - $field_arr_value[$update_key] = $update_value; - - if (!is_object($field_arr_value)) { - $this->$setter($field_arr_value); - } - } - - /** - * @ignore - */ - public function jsonByteSize() - { - $size = 0; - if (is_a($this, 'Google\Protobuf\Any')) { - // Size for "{}". - $size += 2; - - // Size for "\"@type\":". - $size += 8; - - // Size for url. +2 for "" /. - $size += strlen($this->getTypeUrl()) + 2; - - $value_msg = $this->unpack(); - if (GPBUtil::hasSpecialJsonMapping($value_msg)) { - // Size for "\",value\":". - $size += 9; - $size += $value_msg->jsonByteSize(); - } else { - // Size for value. +1 for comma, -2 for "{}". - $size += $value_msg->jsonByteSize() -1; - } - } elseif (get_class($this) === 'Google\Protobuf\FieldMask') { - $field_mask = GPBUtil::formatFieldMask($this); - $size += strlen($field_mask) + 2; // 2 for "" - } elseif (get_class($this) === 'Google\Protobuf\Duration') { - $duration = GPBUtil::formatDuration($this) . "s"; - $size += strlen($duration) + 2; // 2 for "" - } elseif (get_class($this) === 'Google\Protobuf\Timestamp') { - $timestamp = GPBUtil::formatTimestamp($this); - $timestamp = json_encode($timestamp); - $size += strlen($timestamp); - } elseif (get_class($this) === 'Google\Protobuf\ListValue') { - $field = $this->desc->getField()[1]; - if ($this->existField($field)) { - $field_size = $this->fieldJsonByteSize($field); - $size += $field_size; - } else { - // Size for "[]". - $size += 2; - } - } elseif (get_class($this) === 'Google\Protobuf\Struct') { - $field = $this->desc->getField()[1]; - if ($this->existField($field)) { - $field_size = $this->fieldJsonByteSize($field); - $size += $field_size; - } else { - // Size for "{}". - $size += 2; - } - } else { - if (!GPBUtil::hasSpecialJsonMapping($this)) { - // Size for "{}". - $size += 2; - } - - $fields = $this->desc->getField(); - $count = 0; - foreach ($fields as $field) { - $field_size = $this->fieldJsonByteSize($field); - $size += $field_size; - if ($field_size != 0) { - $count++; - } - } - // size for comma - $size += $count > 0 ? ($count - 1) : 0; - } - return $size; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php deleted file mode 100644 index 2724d26..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php +++ /dev/null @@ -1,120 +0,0 @@ -descriptor = new Descriptor(); - $this->descriptor->setFullName($full_name); - $this->descriptor->setClass($klass); - $this->pool = $pool; - } - - private function getFieldDescriptor($name, $label, $type, - $number, $type_name = null) - { - $field = new FieldDescriptor(); - $field->setName($name); - $camel_name = implode('', array_map('ucwords', explode('_', $name))); - $field->setGetter('get' . $camel_name); - $field->setSetter('set' . $camel_name); - $field->setType($type); - $field->setNumber($number); - $field->setLabel($label); - - // At this time, the message/enum type may have not been added to pool. - // So we use the type name as place holder and will replace it with the - // actual descriptor in cross building. - switch ($type) { - case GPBType::MESSAGE: - $field->setMessageType($type_name); - break; - case GPBType::ENUM: - $field->setEnumType($type_name); - break; - default: - break; - } - - return $field; - } - - public function optional($name, $type, $number, $type_name = null) - { - $this->descriptor->addField($this->getFieldDescriptor( - $name, - GPBLabel::OPTIONAL, - $type, - $number, - $type_name)); - return $this; - } - - public function repeated($name, $type, $number, $type_name = null) - { - $this->descriptor->addField($this->getFieldDescriptor( - $name, - GPBLabel::REPEATED, - $type, - $number, - $type_name)); - return $this; - } - - public function required($name, $type, $number, $type_name = null) - { - $this->descriptor->addField($this->getFieldDescriptor( - $name, - GPBLabel::REQUIRED, - $type, - $number, - $type_name)); - return $this; - } - - public function finalizeToPool() - { - $this->pool->addDescriptor($this->descriptor); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php deleted file mode 100644 index 5c61580..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php +++ /dev/null @@ -1,387 +0,0 @@ -google.protobuf.MessageOptions - */ -class MessageOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Set true to use the old proto1 MessageSet wire format for extensions. - * This is provided for backwards-compatibility with the MessageSet wire - * format. You should not use this for any other reason: It's less - * efficient, has fewer features, and is more complicated. - * The message must be defined exactly as follows: - * message Foo { - * option message_set_wire_format = true; - * extensions 4 to max; - * } - * Note that the message cannot have any defined fields; MessageSets only - * have extensions. - * All extensions of your type must be singular messages; e.g. they cannot - * be int32s, enums, or repeated messages. - * Because this is an option, the above two restrictions are not enforced by - * the protocol compiler. - * - * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; - */ - protected $message_set_wire_format = null; - /** - * Disables the generation of the standard "descriptor()" accessor, which can - * conflict with a field of the same name. This is meant to make migration - * from proto1 easier; new code should avoid fields named "descriptor". - * - * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; - */ - protected $no_standard_descriptor_accessor = null; - /** - * Is this message deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the message, or it will be completely ignored; in the very least, - * this is a formalization for deprecating messages. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - */ - protected $deprecated = null; - /** - * Whether the message is an automatically generated map entry type for the - * maps field. - * For maps fields: - * map map_field = 1; - * The parsed descriptor looks like: - * message MapFieldEntry { - * option map_entry = true; - * optional KeyType key = 1; - * optional ValueType value = 2; - * } - * repeated MapFieldEntry map_field = 1; - * Implementations may choose not to generate the map_entry=true message, but - * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementations still need to work as - * if the field is a repeated message field. - * NOTE: Do not set the option in .proto files. Always use the maps syntax - * instead. The option should only be implicitly set by the proto compiler - * parser. - * - * Generated from protobuf field optional bool map_entry = 7; - */ - protected $map_entry = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $message_set_wire_format - * Set true to use the old proto1 MessageSet wire format for extensions. - * This is provided for backwards-compatibility with the MessageSet wire - * format. You should not use this for any other reason: It's less - * efficient, has fewer features, and is more complicated. - * The message must be defined exactly as follows: - * message Foo { - * option message_set_wire_format = true; - * extensions 4 to max; - * } - * Note that the message cannot have any defined fields; MessageSets only - * have extensions. - * All extensions of your type must be singular messages; e.g. they cannot - * be int32s, enums, or repeated messages. - * Because this is an option, the above two restrictions are not enforced by - * the protocol compiler. - * @type bool $no_standard_descriptor_accessor - * Disables the generation of the standard "descriptor()" accessor, which can - * conflict with a field of the same name. This is meant to make migration - * from proto1 easier; new code should avoid fields named "descriptor". - * @type bool $deprecated - * Is this message deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the message, or it will be completely ignored; in the very least, - * this is a formalization for deprecating messages. - * @type bool $map_entry - * Whether the message is an automatically generated map entry type for the - * maps field. - * For maps fields: - * map map_field = 1; - * The parsed descriptor looks like: - * message MapFieldEntry { - * option map_entry = true; - * optional KeyType key = 1; - * optional ValueType value = 2; - * } - * repeated MapFieldEntry map_field = 1; - * Implementations may choose not to generate the map_entry=true message, but - * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementations still need to work as - * if the field is a repeated message field. - * NOTE: Do not set the option in .proto files. Always use the maps syntax - * instead. The option should only be implicitly set by the proto compiler - * parser. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Set true to use the old proto1 MessageSet wire format for extensions. - * This is provided for backwards-compatibility with the MessageSet wire - * format. You should not use this for any other reason: It's less - * efficient, has fewer features, and is more complicated. - * The message must be defined exactly as follows: - * message Foo { - * option message_set_wire_format = true; - * extensions 4 to max; - * } - * Note that the message cannot have any defined fields; MessageSets only - * have extensions. - * All extensions of your type must be singular messages; e.g. they cannot - * be int32s, enums, or repeated messages. - * Because this is an option, the above two restrictions are not enforced by - * the protocol compiler. - * - * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; - * @return bool - */ - public function getMessageSetWireFormat() - { - return isset($this->message_set_wire_format) ? $this->message_set_wire_format : false; - } - - public function hasMessageSetWireFormat() - { - return isset($this->message_set_wire_format); - } - - public function clearMessageSetWireFormat() - { - unset($this->message_set_wire_format); - } - - /** - * Set true to use the old proto1 MessageSet wire format for extensions. - * This is provided for backwards-compatibility with the MessageSet wire - * format. You should not use this for any other reason: It's less - * efficient, has fewer features, and is more complicated. - * The message must be defined exactly as follows: - * message Foo { - * option message_set_wire_format = true; - * extensions 4 to max; - * } - * Note that the message cannot have any defined fields; MessageSets only - * have extensions. - * All extensions of your type must be singular messages; e.g. they cannot - * be int32s, enums, or repeated messages. - * Because this is an option, the above two restrictions are not enforced by - * the protocol compiler. - * - * Generated from protobuf field optional bool message_set_wire_format = 1 [default = false]; - * @param bool $var - * @return $this - */ - public function setMessageSetWireFormat($var) - { - GPBUtil::checkBool($var); - $this->message_set_wire_format = $var; - - return $this; - } - - /** - * Disables the generation of the standard "descriptor()" accessor, which can - * conflict with a field of the same name. This is meant to make migration - * from proto1 easier; new code should avoid fields named "descriptor". - * - * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; - * @return bool - */ - public function getNoStandardDescriptorAccessor() - { - return isset($this->no_standard_descriptor_accessor) ? $this->no_standard_descriptor_accessor : false; - } - - public function hasNoStandardDescriptorAccessor() - { - return isset($this->no_standard_descriptor_accessor); - } - - public function clearNoStandardDescriptorAccessor() - { - unset($this->no_standard_descriptor_accessor); - } - - /** - * Disables the generation of the standard "descriptor()" accessor, which can - * conflict with a field of the same name. This is meant to make migration - * from proto1 easier; new code should avoid fields named "descriptor". - * - * Generated from protobuf field optional bool no_standard_descriptor_accessor = 2 [default = false]; - * @param bool $var - * @return $this - */ - public function setNoStandardDescriptorAccessor($var) - { - GPBUtil::checkBool($var); - $this->no_standard_descriptor_accessor = $var; - - return $this; - } - - /** - * Is this message deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the message, or it will be completely ignored; in the very least, - * this is a formalization for deprecating messages. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this message deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the message, or it will be completely ignored; in the very least, - * this is a formalization for deprecating messages. - * - * Generated from protobuf field optional bool deprecated = 3 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * Whether the message is an automatically generated map entry type for the - * maps field. - * For maps fields: - * map map_field = 1; - * The parsed descriptor looks like: - * message MapFieldEntry { - * option map_entry = true; - * optional KeyType key = 1; - * optional ValueType value = 2; - * } - * repeated MapFieldEntry map_field = 1; - * Implementations may choose not to generate the map_entry=true message, but - * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementations still need to work as - * if the field is a repeated message field. - * NOTE: Do not set the option in .proto files. Always use the maps syntax - * instead. The option should only be implicitly set by the proto compiler - * parser. - * - * Generated from protobuf field optional bool map_entry = 7; - * @return bool - */ - public function getMapEntry() - { - return isset($this->map_entry) ? $this->map_entry : false; - } - - public function hasMapEntry() - { - return isset($this->map_entry); - } - - public function clearMapEntry() - { - unset($this->map_entry); - } - - /** - * Whether the message is an automatically generated map entry type for the - * maps field. - * For maps fields: - * map map_field = 1; - * The parsed descriptor looks like: - * message MapFieldEntry { - * option map_entry = true; - * optional KeyType key = 1; - * optional ValueType value = 2; - * } - * repeated MapFieldEntry map_field = 1; - * Implementations may choose not to generate the map_entry=true message, but - * use a native map in the target language to hold the keys and values. - * The reflection APIs in such implementations still need to work as - * if the field is a repeated message field. - * NOTE: Do not set the option in .proto files. Always use the maps syntax - * instead. The option should only be implicitly set by the proto compiler - * parser. - * - * Generated from protobuf field optional bool map_entry = 7; - * @param bool $var - * @return $this - */ - public function setMapEntry($var) - { - GPBUtil::checkBool($var); - $this->map_entry = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php deleted file mode 100644 index 96efb02..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php +++ /dev/null @@ -1,282 +0,0 @@ -google.protobuf.MethodDescriptorProto - */ -class MethodDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Input and output type names. These are resolved in the same way as - * FieldDescriptorProto.type_name, but must refer to a message type. - * - * Generated from protobuf field optional string input_type = 2; - */ - protected $input_type = null; - /** - * Generated from protobuf field optional string output_type = 3; - */ - protected $output_type = null; - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; - */ - protected $options = null; - /** - * Identifies if client streams multiple client messages - * - * Generated from protobuf field optional bool client_streaming = 5 [default = false]; - */ - protected $client_streaming = null; - /** - * Identifies if server streams multiple server messages - * - * Generated from protobuf field optional bool server_streaming = 6 [default = false]; - */ - protected $server_streaming = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type string $input_type - * Input and output type names. These are resolved in the same way as - * FieldDescriptorProto.type_name, but must refer to a message type. - * @type string $output_type - * @type \Google\Protobuf\Internal\MethodOptions $options - * @type bool $client_streaming - * Identifies if client streams multiple client messages - * @type bool $server_streaming - * Identifies if server streams multiple server messages - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Input and output type names. These are resolved in the same way as - * FieldDescriptorProto.type_name, but must refer to a message type. - * - * Generated from protobuf field optional string input_type = 2; - * @return string - */ - public function getInputType() - { - return isset($this->input_type) ? $this->input_type : ''; - } - - public function hasInputType() - { - return isset($this->input_type); - } - - public function clearInputType() - { - unset($this->input_type); - } - - /** - * Input and output type names. These are resolved in the same way as - * FieldDescriptorProto.type_name, but must refer to a message type. - * - * Generated from protobuf field optional string input_type = 2; - * @param string $var - * @return $this - */ - public function setInputType($var) - { - GPBUtil::checkString($var, True); - $this->input_type = $var; - - return $this; - } - - /** - * Generated from protobuf field optional string output_type = 3; - * @return string - */ - public function getOutputType() - { - return isset($this->output_type) ? $this->output_type : ''; - } - - public function hasOutputType() - { - return isset($this->output_type); - } - - public function clearOutputType() - { - unset($this->output_type); - } - - /** - * Generated from protobuf field optional string output_type = 3; - * @param string $var - * @return $this - */ - public function setOutputType($var) - { - GPBUtil::checkString($var, True); - $this->output_type = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; - * @return \Google\Protobuf\Internal\MethodOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions options = 4; - * @param \Google\Protobuf\Internal\MethodOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\MethodOptions::class); - $this->options = $var; - - return $this; - } - - /** - * Identifies if client streams multiple client messages - * - * Generated from protobuf field optional bool client_streaming = 5 [default = false]; - * @return bool - */ - public function getClientStreaming() - { - return isset($this->client_streaming) ? $this->client_streaming : false; - } - - public function hasClientStreaming() - { - return isset($this->client_streaming); - } - - public function clearClientStreaming() - { - unset($this->client_streaming); - } - - /** - * Identifies if client streams multiple client messages - * - * Generated from protobuf field optional bool client_streaming = 5 [default = false]; - * @param bool $var - * @return $this - */ - public function setClientStreaming($var) - { - GPBUtil::checkBool($var); - $this->client_streaming = $var; - - return $this; - } - - /** - * Identifies if server streams multiple server messages - * - * Generated from protobuf field optional bool server_streaming = 6 [default = false]; - * @return bool - */ - public function getServerStreaming() - { - return isset($this->server_streaming) ? $this->server_streaming : false; - } - - public function hasServerStreaming() - { - return isset($this->server_streaming); - } - - public function clearServerStreaming() - { - unset($this->server_streaming); - } - - /** - * Identifies if server streams multiple server messages - * - * Generated from protobuf field optional bool server_streaming = 6 [default = false]; - * @param bool $var - * @return $this - */ - public function setServerStreaming($var) - { - GPBUtil::checkBool($var); - $this->server_streaming = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php deleted file mode 100644 index 87af451..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php +++ /dev/null @@ -1,160 +0,0 @@ -google.protobuf.MethodOptions - */ -class MethodOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Is this method deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the method, or it will be completely ignored; in the very least, - * this is a formalization for deprecating methods. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - */ - protected $deprecated = null; - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - */ - protected $idempotency_level = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $deprecated - * Is this method deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the method, or it will be completely ignored; in the very least, - * this is a formalization for deprecating methods. - * @type int $idempotency_level - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Is this method deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the method, or it will be completely ignored; in the very least, - * this is a formalization for deprecating methods. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this method deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the method, or it will be completely ignored; in the very least, - * this is a formalization for deprecating methods. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - * @return int - */ - public function getIdempotencyLevel() - { - return isset($this->idempotency_level) ? $this->idempotency_level : 0; - } - - public function hasIdempotencyLevel() - { - return isset($this->idempotency_level); - } - - public function clearIdempotencyLevel() - { - unset($this->idempotency_level); - } - - /** - * Generated from protobuf field optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN]; - * @param int $var - * @return $this - */ - public function setIdempotencyLevel($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Internal\MethodOptions\IdempotencyLevel::class); - $this->idempotency_level = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php deleted file mode 100644 index ce3c062..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php +++ /dev/null @@ -1,64 +0,0 @@ -google.protobuf.MethodOptions.IdempotencyLevel - */ -class IdempotencyLevel -{ - /** - * Generated from protobuf enum IDEMPOTENCY_UNKNOWN = 0; - */ - const IDEMPOTENCY_UNKNOWN = 0; - /** - * implies idempotent - * - * Generated from protobuf enum NO_SIDE_EFFECTS = 1; - */ - const NO_SIDE_EFFECTS = 1; - /** - * idempotent, but may have side effects - * - * Generated from protobuf enum IDEMPOTENT = 2; - */ - const IDEMPOTENT = 2; - - private static $valueToName = [ - self::IDEMPOTENCY_UNKNOWN => 'IDEMPOTENCY_UNKNOWN', - self::NO_SIDE_EFFECTS => 'NO_SIDE_EFFECTS', - self::IDEMPOTENT => 'IDEMPOTENT', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(IdempotencyLevel::class, \Google\Protobuf\Internal\MethodOptions_IdempotencyLevel::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php deleted file mode 100644 index a291311..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions_IdempotencyLevel.php +++ /dev/null @@ -1,16 +0,0 @@ -public_desc = new \Google\Protobuf\OneofDescriptor($this); - } - - public function setName($name) - { - $this->name = $name; - } - - public function getName() - { - return $this->name; - } - - public function addField(FieldDescriptor $field) - { - $this->fields[] = $field; - } - - public function getFields() - { - return $this->fields; - } - - public function isSynthetic() - { - return !is_null($this->fields) && count($this->fields) === 1 - && $this->fields[0]->getProto3Optional(); - } - - public static function buildFromProto($oneof_proto, $desc, $index) - { - $oneof = new OneofDescriptor(); - $oneof->setName($oneof_proto->getName()); - foreach ($desc->getField() as $field) { - /** @var FieldDescriptor $field */ - if ($field->getOneofIndex() == $index) { - $oneof->addField($field); - $field->setContainingOneof($oneof); - } - } - return $oneof; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php deleted file mode 100644 index 3cb9f25..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php +++ /dev/null @@ -1,109 +0,0 @@ -google.protobuf.OneofDescriptorProto - */ -class OneofDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; - */ - protected $options = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type \Google\Protobuf\Internal\OneofOptions $options - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; - * @return \Google\Protobuf\Internal\OneofOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.OneofOptions options = 2; - * @param \Google\Protobuf\Internal\OneofOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\OneofOptions::class); - $this->options = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php deleted file mode 100644 index 2c689e8..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php +++ /dev/null @@ -1,77 +0,0 @@ -desc = $desc; - } - - public function setValue($value) - { - $this->value = $value; - } - - public function getValue() - { - return $this->value; - } - - public function setFieldName($field_name) - { - $this->field_name = $field_name; - } - - public function getFieldName() - { - return $this->field_name; - } - - public function setNumber($number) - { - $this->number = $number; - } - - public function getNumber() - { - return $this->number; - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php deleted file mode 100644 index b44d194..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php +++ /dev/null @@ -1,67 +0,0 @@ -google.protobuf.OneofOptions - */ -class OneofOptions extends \Google\Protobuf\Internal\Message -{ - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php deleted file mode 100644 index 4e7ed5c..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php +++ /dev/null @@ -1,50 +0,0 @@ -buffer = $buffer; - } - - public function getData() - { - return $this->buffer; - } - -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php deleted file mode 100644 index ea7971f..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php +++ /dev/null @@ -1,264 +0,0 @@ -container = []; - $this->type = $type; - if ($this->type == GPBType::MESSAGE) { - $pool = DescriptorPool::getGeneratedPool(); - $desc = $pool->getDescriptorByClassName($klass); - if ($desc == NULL) { - new $klass; // No msg class instance has been created before. - $desc = $pool->getDescriptorByClassName($klass); - } - $this->klass = $desc->getClass(); - $this->legacy_klass = $desc->getLegacyClass(); - } - } - - /** - * @ignore - */ - public function getType() - { - return $this->type; - } - - /** - * @ignore - */ - public function getClass() - { - return $this->klass; - } - - /** - * @ignore - */ - public function getLegacyClass() - { - return $this->legacy_klass; - } - - /** - * Return the element at the given index. - * - * This will also be called for: $ele = $arr[0] - * - * @param integer $offset The index of the element to be fetched. - * @return mixed The stored element at given index. - * @throws \ErrorException Invalid type for index. - * @throws \ErrorException Non-existing index. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function offsetGet($offset) - { - return $this->container[$offset]; - } - - /** - * Assign the element at the given index. - * - * This will also be called for: $arr []= $ele and $arr[0] = ele - * - * @param int|null $offset The index of the element to be assigned. - * @param mixed $value The element to be assigned. - * @return void - * @throws \ErrorException Invalid type for index. - * @throws \ErrorException Non-existing index. - * @throws \ErrorException Incorrect type of the element. - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function offsetSet($offset, $value) - { - switch ($this->type) { - case GPBType::SFIXED32: - case GPBType::SINT32: - case GPBType::INT32: - case GPBType::ENUM: - GPBUtil::checkInt32($value); - break; - case GPBType::FIXED32: - case GPBType::UINT32: - GPBUtil::checkUint32($value); - break; - case GPBType::SFIXED64: - case GPBType::SINT64: - case GPBType::INT64: - GPBUtil::checkInt64($value); - break; - case GPBType::FIXED64: - case GPBType::UINT64: - GPBUtil::checkUint64($value); - break; - case GPBType::FLOAT: - GPBUtil::checkFloat($value); - break; - case GPBType::DOUBLE: - GPBUtil::checkDouble($value); - break; - case GPBType::BOOL: - GPBUtil::checkBool($value); - break; - case GPBType::BYTES: - GPBUtil::checkString($value, false); - break; - case GPBType::STRING: - GPBUtil::checkString($value, true); - break; - case GPBType::MESSAGE: - if (is_null($value)) { - throw new \TypeError("RepeatedField element cannot be null."); - } - GPBUtil::checkMessage($value, $this->klass); - break; - default: - break; - } - if (is_null($offset)) { - $this->container[] = $value; - } else { - $count = count($this->container); - if (!is_numeric($offset) || $offset < 0 || $offset >= $count) { - trigger_error( - "Cannot modify element at the given index", - E_USER_ERROR); - return; - } - $this->container[$offset] = $value; - } - } - - /** - * Remove the element at the given index. - * - * This will also be called for: unset($arr) - * - * @param integer $offset The index of the element to be removed. - * @return void - * @throws \ErrorException Invalid type for index. - * @throws \ErrorException The element to be removed is not at the end of the - * RepeatedField. - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function offsetUnset($offset) - { - $count = count($this->container); - if (!is_numeric($offset) || $count === 0 || $offset !== $count - 1) { - trigger_error( - "Cannot remove element at the given index", - E_USER_ERROR); - return; - } - array_pop($this->container); - } - - /** - * Check the existence of the element at the given index. - * - * This will also be called for: isset($arr) - * - * @param integer $offset The index of the element to be removed. - * @return bool True if the element at the given offset exists. - * @throws \ErrorException Invalid type for index. - */ - public function offsetExists($offset): bool - { - return isset($this->container[$offset]); - } - - /** - * @ignore - */ - public function getIterator(): Traversable - { - return new RepeatedFieldIter($this->container); - } - - /** - * Return the number of stored elements. - * - * This will also be called for: count($arr) - * - * @return integer The number of stored elements. - */ - public function count(): int - { - return count($this->container); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php deleted file mode 100644 index ec99b64..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php +++ /dev/null @@ -1,126 +0,0 @@ -position = 0; - $this->container = $container; - } - - /** - * Reset the status of the iterator - * - * @return void - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function rewind() - { - $this->position = 0; - } - - /** - * Return the element at the current position. - * - * @return object The element at the current position. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function current() - { - return $this->container[$this->position]; - } - - /** - * Return the current position. - * - * @return integer The current position. - * @todo need to add return type mixed (require update php version to 8.0) - */ - #[\ReturnTypeWillChange] - public function key() - { - return $this->position; - } - - /** - * Move to the next position. - * - * @return void - * @todo need to add return type void (require update php version to 7.1) - */ - #[\ReturnTypeWillChange] - public function next() - { - ++$this->position; - } - - /** - * Check whether there are more elements to iterate. - * - * @return bool True if there are more elements to iterate. - */ - public function valid(): bool - { - return isset($this->container[$this->position]); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php deleted file mode 100644 index e322e2a..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php +++ /dev/null @@ -1,136 +0,0 @@ -google.protobuf.ServiceDescriptorProto - */ -class ServiceDescriptorProto extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field optional string name = 1; - */ - protected $name = null; - /** - * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; - */ - private $method; - /** - * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; - */ - protected $options = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * @type array<\Google\Protobuf\Internal\MethodDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $method - * @type \Google\Protobuf\Internal\ServiceOptions $options - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field optional string name = 1; - * @return string - */ - public function getName() - { - return isset($this->name) ? $this->name : ''; - } - - public function hasName() - { - return isset($this->name); - } - - public function clearName() - { - unset($this->name); - } - - /** - * Generated from protobuf field optional string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getMethod() - { - return $this->method; - } - - /** - * Generated from protobuf field repeated .google.protobuf.MethodDescriptorProto method = 2; - * @param array<\Google\Protobuf\Internal\MethodDescriptorProto>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setMethod($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\MethodDescriptorProto::class); - $this->method = $arr; - - return $this; - } - - /** - * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; - * @return \Google\Protobuf\Internal\ServiceOptions|null - */ - public function getOptions() - { - return $this->options; - } - - public function hasOptions() - { - return isset($this->options); - } - - public function clearOptions() - { - unset($this->options); - } - - /** - * Generated from protobuf field optional .google.protobuf.ServiceOptions options = 3; - * @param \Google\Protobuf\Internal\ServiceOptions $var - * @return $this - */ - public function setOptions($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Internal\ServiceOptions::class); - $this->options = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php deleted file mode 100644 index 8ac27ee..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php +++ /dev/null @@ -1,123 +0,0 @@ -google.protobuf.ServiceOptions - */ -class ServiceOptions extends \Google\Protobuf\Internal\Message -{ - /** - * Is this service deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the service, or it will be completely ignored; in the very least, - * this is a formalization for deprecating services. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - */ - protected $deprecated = null; - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - */ - private $uninterpreted_option; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type bool $deprecated - * Is this service deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the service, or it will be completely ignored; in the very least, - * this is a formalization for deprecating services. - * @type array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $uninterpreted_option - * The parser stores options it doesn't recognize here. See above. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Is this service deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the service, or it will be completely ignored; in the very least, - * this is a formalization for deprecating services. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - * @return bool - */ - public function getDeprecated() - { - return isset($this->deprecated) ? $this->deprecated : false; - } - - public function hasDeprecated() - { - return isset($this->deprecated); - } - - public function clearDeprecated() - { - unset($this->deprecated); - } - - /** - * Is this service deprecated? - * Depending on the target platform, this can emit Deprecated annotations - * for the service, or it will be completely ignored; in the very least, - * this is a formalization for deprecating services. - * - * Generated from protobuf field optional bool deprecated = 33 [default = false]; - * @param bool $var - * @return $this - */ - public function setDeprecated($var) - { - GPBUtil::checkBool($var); - $this->deprecated = $var; - - return $this; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getUninterpretedOption() - { - return $this->uninterpreted_option; - } - - /** - * The parser stores options it doesn't recognize here. See above. - * - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; - * @param array<\Google\Protobuf\Internal\UninterpretedOption>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setUninterpretedOption($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption::class); - $this->uninterpreted_option = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php deleted file mode 100644 index 0005bc6..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php +++ /dev/null @@ -1,230 +0,0 @@ -google.protobuf.SourceCodeInfo - */ -class SourceCodeInfo extends \Google\Protobuf\Internal\Message -{ - /** - * A Location identifies a piece of source code in a .proto file which - * corresponds to a particular definition. This information is intended - * to be useful to IDEs, code indexers, documentation generators, and similar - * tools. - * For example, say we have a file like: - * message Foo { - * optional string foo = 1; - * } - * Let's look at just the field definition: - * optional string foo = 1; - * ^ ^^ ^^ ^ ^^^ - * a bc de f ghi - * We have the following locations: - * span path represents - * [a,i) [ 4, 0, 2, 0 ] The whole field definition. - * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - * Notes: - * - A location may refer to a repeated field itself (i.e. not to any - * particular index within it). This is used whenever a set of elements are - * logically enclosed in a single code segment. For example, an entire - * extend block (possibly containing multiple extension definitions) will - * have an outer location whose path refers to the "extensions" repeated - * field without an index. - * - Multiple locations may have the same path. This happens when a single - * logical declaration is spread out across multiple places. The most - * obvious example is the "extend" block again -- there may be multiple - * extend blocks in the same scope, each of which will have the same path. - * - A location's span is not always a subset of its parent's span. For - * example, the "extendee" of an extension declaration appears at the - * beginning of the "extend" block and is shared by all extensions within - * the block. - * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendant. For example, a "group" defines - * both a type and a field in a single declaration. Thus, the locations - * corresponding to the type and field and their components will overlap. - * - Code which tries to interpret locations should probably be designed to - * ignore those that it doesn't understand, as more types of locations could - * be recorded in the future. - * - * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; - */ - private $location; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\SourceCodeInfo\Location>|\Google\Protobuf\Internal\RepeatedField $location - * A Location identifies a piece of source code in a .proto file which - * corresponds to a particular definition. This information is intended - * to be useful to IDEs, code indexers, documentation generators, and similar - * tools. - * For example, say we have a file like: - * message Foo { - * optional string foo = 1; - * } - * Let's look at just the field definition: - * optional string foo = 1; - * ^ ^^ ^^ ^ ^^^ - * a bc de f ghi - * We have the following locations: - * span path represents - * [a,i) [ 4, 0, 2, 0 ] The whole field definition. - * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - * Notes: - * - A location may refer to a repeated field itself (i.e. not to any - * particular index within it). This is used whenever a set of elements are - * logically enclosed in a single code segment. For example, an entire - * extend block (possibly containing multiple extension definitions) will - * have an outer location whose path refers to the "extensions" repeated - * field without an index. - * - Multiple locations may have the same path. This happens when a single - * logical declaration is spread out across multiple places. The most - * obvious example is the "extend" block again -- there may be multiple - * extend blocks in the same scope, each of which will have the same path. - * - A location's span is not always a subset of its parent's span. For - * example, the "extendee" of an extension declaration appears at the - * beginning of the "extend" block and is shared by all extensions within - * the block. - * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendant. For example, a "group" defines - * both a type and a field in a single declaration. Thus, the locations - * corresponding to the type and field and their components will overlap. - * - Code which tries to interpret locations should probably be designed to - * ignore those that it doesn't understand, as more types of locations could - * be recorded in the future. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * A Location identifies a piece of source code in a .proto file which - * corresponds to a particular definition. This information is intended - * to be useful to IDEs, code indexers, documentation generators, and similar - * tools. - * For example, say we have a file like: - * message Foo { - * optional string foo = 1; - * } - * Let's look at just the field definition: - * optional string foo = 1; - * ^ ^^ ^^ ^ ^^^ - * a bc de f ghi - * We have the following locations: - * span path represents - * [a,i) [ 4, 0, 2, 0 ] The whole field definition. - * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - * Notes: - * - A location may refer to a repeated field itself (i.e. not to any - * particular index within it). This is used whenever a set of elements are - * logically enclosed in a single code segment. For example, an entire - * extend block (possibly containing multiple extension definitions) will - * have an outer location whose path refers to the "extensions" repeated - * field without an index. - * - Multiple locations may have the same path. This happens when a single - * logical declaration is spread out across multiple places. The most - * obvious example is the "extend" block again -- there may be multiple - * extend blocks in the same scope, each of which will have the same path. - * - A location's span is not always a subset of its parent's span. For - * example, the "extendee" of an extension declaration appears at the - * beginning of the "extend" block and is shared by all extensions within - * the block. - * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendant. For example, a "group" defines - * both a type and a field in a single declaration. Thus, the locations - * corresponding to the type and field and their components will overlap. - * - Code which tries to interpret locations should probably be designed to - * ignore those that it doesn't understand, as more types of locations could - * be recorded in the future. - * - * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getLocation() - { - return $this->location; - } - - /** - * A Location identifies a piece of source code in a .proto file which - * corresponds to a particular definition. This information is intended - * to be useful to IDEs, code indexers, documentation generators, and similar - * tools. - * For example, say we have a file like: - * message Foo { - * optional string foo = 1; - * } - * Let's look at just the field definition: - * optional string foo = 1; - * ^ ^^ ^^ ^ ^^^ - * a bc de f ghi - * We have the following locations: - * span path represents - * [a,i) [ 4, 0, 2, 0 ] The whole field definition. - * [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - * [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - * [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - * [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - * Notes: - * - A location may refer to a repeated field itself (i.e. not to any - * particular index within it). This is used whenever a set of elements are - * logically enclosed in a single code segment. For example, an entire - * extend block (possibly containing multiple extension definitions) will - * have an outer location whose path refers to the "extensions" repeated - * field without an index. - * - Multiple locations may have the same path. This happens when a single - * logical declaration is spread out across multiple places. The most - * obvious example is the "extend" block again -- there may be multiple - * extend blocks in the same scope, each of which will have the same path. - * - A location's span is not always a subset of its parent's span. For - * example, the "extendee" of an extension declaration appears at the - * beginning of the "extend" block and is shared by all extensions within - * the block. - * - Just because a location's span is a subset of some other location's span - * does not mean that it is a descendant. For example, a "group" defines - * both a type and a field in a single declaration. Thus, the locations - * corresponding to the type and field and their components will overlap. - * - Code which tries to interpret locations should probably be designed to - * ignore those that it doesn't understand, as more types of locations could - * be recorded in the future. - * - * Generated from protobuf field repeated .google.protobuf.SourceCodeInfo.Location location = 1; - * @param array<\Google\Protobuf\Internal\SourceCodeInfo\Location>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setLocation($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\SourceCodeInfo\Location::class); - $this->location = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php deleted file mode 100644 index 032be39..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php +++ /dev/null @@ -1,448 +0,0 @@ -google.protobuf.SourceCodeInfo.Location - */ -class Location extends \Google\Protobuf\Internal\Message -{ - /** - * Identifies which part of the FileDescriptorProto was defined at this - * location. - * Each element is a field number or an index. They form a path from - * the root FileDescriptorProto to the place where the definition occurs. - * For example, this path: - * [ 4, 3, 2, 7, 1 ] - * refers to: - * file.message_type(3) // 4, 3 - * .field(7) // 2, 7 - * .name() // 1 - * This is because FileDescriptorProto.message_type has field number 4: - * repeated DescriptorProto message_type = 4; - * and DescriptorProto.field has field number 2: - * repeated FieldDescriptorProto field = 2; - * and FieldDescriptorProto.name has field number 1: - * optional string name = 1; - * Thus, the above path gives the location of a field name. If we removed - * the last element: - * [ 4, 3, 2, 7 ] - * this path refers to the whole field declaration (from the beginning - * of the label to the terminating semicolon). - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - */ - private $path; - /** - * Always has exactly three or four elements: start line, start column, - * end line (optional, otherwise assumed same as start line), end column. - * These are packed into a single field for efficiency. Note that line - * and column numbers are zero-based -- typically you will want to add - * 1 to each before displaying to a user. - * - * Generated from protobuf field repeated int32 span = 2 [packed = true]; - */ - private $span; - /** - * If this SourceCodeInfo represents a complete declaration, these are any - * comments appearing before and after the declaration which appear to be - * attached to the declaration. - * A series of line comments appearing on consecutive lines, with no other - * tokens appearing on those lines, will be treated as a single comment. - * leading_detached_comments will keep paragraphs of comments that appear - * before (but not connected to) the current element. Each paragraph, - * separated by empty lines, will be one comment element in the repeated - * field. - * Only the comment content is provided; comment markers (e.g. //) are - * stripped out. For block comments, leading whitespace and an asterisk - * will be stripped from the beginning of each line other than the first. - * Newlines are included in the output. - * Examples: - * optional int32 foo = 1; // Comment attached to foo. - * // Comment attached to bar. - * optional int32 bar = 2; - * optional string baz = 3; - * // Comment attached to baz. - * // Another line attached to baz. - * // Comment attached to moo. - * // - * // Another line attached to moo. - * optional double moo = 4; - * // Detached comment for corge. This is not leading or trailing comments - * // to moo or corge because there are blank lines separating it from - * // both. - * // Detached comment for corge paragraph 2. - * optional string corge = 5; - * /* Block comment attached - * * to corge. Leading asterisks - * * will be removed. */ - * /* Block comment attached to - * * grault. */ - * optional int32 grault = 6; - * // ignored detached comments. - * - * Generated from protobuf field optional string leading_comments = 3; - */ - protected $leading_comments = null; - /** - * Generated from protobuf field optional string trailing_comments = 4; - */ - protected $trailing_comments = null; - /** - * Generated from protobuf field repeated string leading_detached_comments = 6; - */ - private $leading_detached_comments; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array|\Google\Protobuf\Internal\RepeatedField $path - * Identifies which part of the FileDescriptorProto was defined at this - * location. - * Each element is a field number or an index. They form a path from - * the root FileDescriptorProto to the place where the definition occurs. - * For example, this path: - * [ 4, 3, 2, 7, 1 ] - * refers to: - * file.message_type(3) // 4, 3 - * .field(7) // 2, 7 - * .name() // 1 - * This is because FileDescriptorProto.message_type has field number 4: - * repeated DescriptorProto message_type = 4; - * and DescriptorProto.field has field number 2: - * repeated FieldDescriptorProto field = 2; - * and FieldDescriptorProto.name has field number 1: - * optional string name = 1; - * Thus, the above path gives the location of a field name. If we removed - * the last element: - * [ 4, 3, 2, 7 ] - * this path refers to the whole field declaration (from the beginning - * of the label to the terminating semicolon). - * @type array|\Google\Protobuf\Internal\RepeatedField $span - * Always has exactly three or four elements: start line, start column, - * end line (optional, otherwise assumed same as start line), end column. - * These are packed into a single field for efficiency. Note that line - * and column numbers are zero-based -- typically you will want to add - * 1 to each before displaying to a user. - * @type string $leading_comments - * If this SourceCodeInfo represents a complete declaration, these are any - * comments appearing before and after the declaration which appear to be - * attached to the declaration. - * A series of line comments appearing on consecutive lines, with no other - * tokens appearing on those lines, will be treated as a single comment. - * leading_detached_comments will keep paragraphs of comments that appear - * before (but not connected to) the current element. Each paragraph, - * separated by empty lines, will be one comment element in the repeated - * field. - * Only the comment content is provided; comment markers (e.g. //) are - * stripped out. For block comments, leading whitespace and an asterisk - * will be stripped from the beginning of each line other than the first. - * Newlines are included in the output. - * Examples: - * optional int32 foo = 1; // Comment attached to foo. - * // Comment attached to bar. - * optional int32 bar = 2; - * optional string baz = 3; - * // Comment attached to baz. - * // Another line attached to baz. - * // Comment attached to moo. - * // - * // Another line attached to moo. - * optional double moo = 4; - * // Detached comment for corge. This is not leading or trailing comments - * // to moo or corge because there are blank lines separating it from - * // both. - * // Detached comment for corge paragraph 2. - * optional string corge = 5; - * /* Block comment attached - * * to corge. Leading asterisks - * * will be removed. */ - * /* Block comment attached to - * * grault. */ - * optional int32 grault = 6; - * // ignored detached comments. - * @type string $trailing_comments - * @type array|\Google\Protobuf\Internal\RepeatedField $leading_detached_comments - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Identifies which part of the FileDescriptorProto was defined at this - * location. - * Each element is a field number or an index. They form a path from - * the root FileDescriptorProto to the place where the definition occurs. - * For example, this path: - * [ 4, 3, 2, 7, 1 ] - * refers to: - * file.message_type(3) // 4, 3 - * .field(7) // 2, 7 - * .name() // 1 - * This is because FileDescriptorProto.message_type has field number 4: - * repeated DescriptorProto message_type = 4; - * and DescriptorProto.field has field number 2: - * repeated FieldDescriptorProto field = 2; - * and FieldDescriptorProto.name has field number 1: - * optional string name = 1; - * Thus, the above path gives the location of a field name. If we removed - * the last element: - * [ 4, 3, 2, 7 ] - * this path refers to the whole field declaration (from the beginning - * of the label to the terminating semicolon). - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getPath() - { - return $this->path; - } - - /** - * Identifies which part of the FileDescriptorProto was defined at this - * location. - * Each element is a field number or an index. They form a path from - * the root FileDescriptorProto to the place where the definition occurs. - * For example, this path: - * [ 4, 3, 2, 7, 1 ] - * refers to: - * file.message_type(3) // 4, 3 - * .field(7) // 2, 7 - * .name() // 1 - * This is because FileDescriptorProto.message_type has field number 4: - * repeated DescriptorProto message_type = 4; - * and DescriptorProto.field has field number 2: - * repeated FieldDescriptorProto field = 2; - * and FieldDescriptorProto.name has field number 1: - * optional string name = 1; - * Thus, the above path gives the location of a field name. If we removed - * the last element: - * [ 4, 3, 2, 7 ] - * this path refers to the whole field declaration (from the beginning - * of the label to the terminating semicolon). - * - * Generated from protobuf field repeated int32 path = 1 [packed = true]; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setPath($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); - $this->path = $arr; - - return $this; - } - - /** - * Always has exactly three or four elements: start line, start column, - * end line (optional, otherwise assumed same as start line), end column. - * These are packed into a single field for efficiency. Note that line - * and column numbers are zero-based -- typically you will want to add - * 1 to each before displaying to a user. - * - * Generated from protobuf field repeated int32 span = 2 [packed = true]; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getSpan() - { - return $this->span; - } - - /** - * Always has exactly three or four elements: start line, start column, - * end line (optional, otherwise assumed same as start line), end column. - * These are packed into a single field for efficiency. Note that line - * and column numbers are zero-based -- typically you will want to add - * 1 to each before displaying to a user. - * - * Generated from protobuf field repeated int32 span = 2 [packed = true]; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setSpan($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); - $this->span = $arr; - - return $this; - } - - /** - * If this SourceCodeInfo represents a complete declaration, these are any - * comments appearing before and after the declaration which appear to be - * attached to the declaration. - * A series of line comments appearing on consecutive lines, with no other - * tokens appearing on those lines, will be treated as a single comment. - * leading_detached_comments will keep paragraphs of comments that appear - * before (but not connected to) the current element. Each paragraph, - * separated by empty lines, will be one comment element in the repeated - * field. - * Only the comment content is provided; comment markers (e.g. //) are - * stripped out. For block comments, leading whitespace and an asterisk - * will be stripped from the beginning of each line other than the first. - * Newlines are included in the output. - * Examples: - * optional int32 foo = 1; // Comment attached to foo. - * // Comment attached to bar. - * optional int32 bar = 2; - * optional string baz = 3; - * // Comment attached to baz. - * // Another line attached to baz. - * // Comment attached to moo. - * // - * // Another line attached to moo. - * optional double moo = 4; - * // Detached comment for corge. This is not leading or trailing comments - * // to moo or corge because there are blank lines separating it from - * // both. - * // Detached comment for corge paragraph 2. - * optional string corge = 5; - * /* Block comment attached - * * to corge. Leading asterisks - * * will be removed. */ - * /* Block comment attached to - * * grault. */ - * optional int32 grault = 6; - * // ignored detached comments. - * - * Generated from protobuf field optional string leading_comments = 3; - * @return string - */ - public function getLeadingComments() - { - return isset($this->leading_comments) ? $this->leading_comments : ''; - } - - public function hasLeadingComments() - { - return isset($this->leading_comments); - } - - public function clearLeadingComments() - { - unset($this->leading_comments); - } - - /** - * If this SourceCodeInfo represents a complete declaration, these are any - * comments appearing before and after the declaration which appear to be - * attached to the declaration. - * A series of line comments appearing on consecutive lines, with no other - * tokens appearing on those lines, will be treated as a single comment. - * leading_detached_comments will keep paragraphs of comments that appear - * before (but not connected to) the current element. Each paragraph, - * separated by empty lines, will be one comment element in the repeated - * field. - * Only the comment content is provided; comment markers (e.g. //) are - * stripped out. For block comments, leading whitespace and an asterisk - * will be stripped from the beginning of each line other than the first. - * Newlines are included in the output. - * Examples: - * optional int32 foo = 1; // Comment attached to foo. - * // Comment attached to bar. - * optional int32 bar = 2; - * optional string baz = 3; - * // Comment attached to baz. - * // Another line attached to baz. - * // Comment attached to moo. - * // - * // Another line attached to moo. - * optional double moo = 4; - * // Detached comment for corge. This is not leading or trailing comments - * // to moo or corge because there are blank lines separating it from - * // both. - * // Detached comment for corge paragraph 2. - * optional string corge = 5; - * /* Block comment attached - * * to corge. Leading asterisks - * * will be removed. */ - * /* Block comment attached to - * * grault. */ - * optional int32 grault = 6; - * // ignored detached comments. - * - * Generated from protobuf field optional string leading_comments = 3; - * @param string $var - * @return $this - */ - public function setLeadingComments($var) - { - GPBUtil::checkString($var, True); - $this->leading_comments = $var; - - return $this; - } - - /** - * Generated from protobuf field optional string trailing_comments = 4; - * @return string - */ - public function getTrailingComments() - { - return isset($this->trailing_comments) ? $this->trailing_comments : ''; - } - - public function hasTrailingComments() - { - return isset($this->trailing_comments); - } - - public function clearTrailingComments() - { - unset($this->trailing_comments); - } - - /** - * Generated from protobuf field optional string trailing_comments = 4; - * @param string $var - * @return $this - */ - public function setTrailingComments($var) - { - GPBUtil::checkString($var, True); - $this->trailing_comments = $var; - - return $this; - } - - /** - * Generated from protobuf field repeated string leading_detached_comments = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getLeadingDetachedComments() - { - return $this->leading_detached_comments; - } - - /** - * Generated from protobuf field repeated string leading_detached_comments = 6; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setLeadingDetachedComments($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->leading_detached_comments = $arr; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(Location::class, \Google\Protobuf\Internal\SourceCodeInfo_Location::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php deleted file mode 100644 index 1346492..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo_Location.php +++ /dev/null @@ -1,16 +0,0 @@ -seconds = $datetime->getTimestamp(); - $this->nanos = 1000 * $datetime->format('u'); - } - - /** - * Converts Timestamp to PHP DateTime. - * - * @return \DateTime $datetime - */ - public function toDateTime() - { - $time = sprintf('%s.%06d', $this->seconds, $this->nanos / 1000); - return \DateTime::createFromFormat('U.u', $time); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php deleted file mode 100644 index a1cdca5..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php +++ /dev/null @@ -1,300 +0,0 @@ -google.protobuf.UninterpretedOption - */ -class UninterpretedOption extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; - */ - private $name; - /** - * The value of the uninterpreted option, in whatever type the tokenizer - * identified it as during parsing. Exactly one of these should be set. - * - * Generated from protobuf field optional string identifier_value = 3; - */ - protected $identifier_value = null; - /** - * Generated from protobuf field optional uint64 positive_int_value = 4; - */ - protected $positive_int_value = null; - /** - * Generated from protobuf field optional int64 negative_int_value = 5; - */ - protected $negative_int_value = null; - /** - * Generated from protobuf field optional double double_value = 6; - */ - protected $double_value = null; - /** - * Generated from protobuf field optional bytes string_value = 7; - */ - protected $string_value = null; - /** - * Generated from protobuf field optional string aggregate_value = 8; - */ - protected $aggregate_value = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Internal\UninterpretedOption\NamePart>|\Google\Protobuf\Internal\RepeatedField $name - * @type string $identifier_value - * The value of the uninterpreted option, in whatever type the tokenizer - * identified it as during parsing. Exactly one of these should be set. - * @type int|string $positive_int_value - * @type int|string $negative_int_value - * @type float $double_value - * @type string $string_value - * @type string $aggregate_value - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getName() - { - return $this->name; - } - - /** - * Generated from protobuf field repeated .google.protobuf.UninterpretedOption.NamePart name = 2; - * @param array<\Google\Protobuf\Internal\UninterpretedOption\NamePart>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setName($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Internal\UninterpretedOption\NamePart::class); - $this->name = $arr; - - return $this; - } - - /** - * The value of the uninterpreted option, in whatever type the tokenizer - * identified it as during parsing. Exactly one of these should be set. - * - * Generated from protobuf field optional string identifier_value = 3; - * @return string - */ - public function getIdentifierValue() - { - return isset($this->identifier_value) ? $this->identifier_value : ''; - } - - public function hasIdentifierValue() - { - return isset($this->identifier_value); - } - - public function clearIdentifierValue() - { - unset($this->identifier_value); - } - - /** - * The value of the uninterpreted option, in whatever type the tokenizer - * identified it as during parsing. Exactly one of these should be set. - * - * Generated from protobuf field optional string identifier_value = 3; - * @param string $var - * @return $this - */ - public function setIdentifierValue($var) - { - GPBUtil::checkString($var, True); - $this->identifier_value = $var; - - return $this; - } - - /** - * Generated from protobuf field optional uint64 positive_int_value = 4; - * @return int|string - */ - public function getPositiveIntValue() - { - return isset($this->positive_int_value) ? $this->positive_int_value : 0; - } - - public function hasPositiveIntValue() - { - return isset($this->positive_int_value); - } - - public function clearPositiveIntValue() - { - unset($this->positive_int_value); - } - - /** - * Generated from protobuf field optional uint64 positive_int_value = 4; - * @param int|string $var - * @return $this - */ - public function setPositiveIntValue($var) - { - GPBUtil::checkUint64($var); - $this->positive_int_value = $var; - - return $this; - } - - /** - * Generated from protobuf field optional int64 negative_int_value = 5; - * @return int|string - */ - public function getNegativeIntValue() - { - return isset($this->negative_int_value) ? $this->negative_int_value : 0; - } - - public function hasNegativeIntValue() - { - return isset($this->negative_int_value); - } - - public function clearNegativeIntValue() - { - unset($this->negative_int_value); - } - - /** - * Generated from protobuf field optional int64 negative_int_value = 5; - * @param int|string $var - * @return $this - */ - public function setNegativeIntValue($var) - { - GPBUtil::checkInt64($var); - $this->negative_int_value = $var; - - return $this; - } - - /** - * Generated from protobuf field optional double double_value = 6; - * @return float - */ - public function getDoubleValue() - { - return isset($this->double_value) ? $this->double_value : 0.0; - } - - public function hasDoubleValue() - { - return isset($this->double_value); - } - - public function clearDoubleValue() - { - unset($this->double_value); - } - - /** - * Generated from protobuf field optional double double_value = 6; - * @param float $var - * @return $this - */ - public function setDoubleValue($var) - { - GPBUtil::checkDouble($var); - $this->double_value = $var; - - return $this; - } - - /** - * Generated from protobuf field optional bytes string_value = 7; - * @return string - */ - public function getStringValue() - { - return isset($this->string_value) ? $this->string_value : ''; - } - - public function hasStringValue() - { - return isset($this->string_value); - } - - public function clearStringValue() - { - unset($this->string_value); - } - - /** - * Generated from protobuf field optional bytes string_value = 7; - * @param string $var - * @return $this - */ - public function setStringValue($var) - { - GPBUtil::checkString($var, False); - $this->string_value = $var; - - return $this; - } - - /** - * Generated from protobuf field optional string aggregate_value = 8; - * @return string - */ - public function getAggregateValue() - { - return isset($this->aggregate_value) ? $this->aggregate_value : ''; - } - - public function hasAggregateValue() - { - return isset($this->aggregate_value); - } - - public function clearAggregateValue() - { - unset($this->aggregate_value); - } - - /** - * Generated from protobuf field optional string aggregate_value = 8; - * @param string $var - * @return $this - */ - public function setAggregateValue($var) - { - GPBUtil::checkString($var, True); - $this->aggregate_value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php deleted file mode 100644 index 2debf83..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php +++ /dev/null @@ -1,116 +0,0 @@ -google.protobuf.UninterpretedOption.NamePart - */ -class NamePart extends \Google\Protobuf\Internal\Message -{ - /** - * Generated from protobuf field required string name_part = 1; - */ - protected $name_part = null; - /** - * Generated from protobuf field required bool is_extension = 2; - */ - protected $is_extension = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name_part - * @type bool $is_extension - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Internal\Descriptor::initOnce(); - parent::__construct($data); - } - - /** - * Generated from protobuf field required string name_part = 1; - * @return string - */ - public function getNamePart() - { - return isset($this->name_part) ? $this->name_part : ''; - } - - public function hasNamePart() - { - return isset($this->name_part); - } - - public function clearNamePart() - { - unset($this->name_part); - } - - /** - * Generated from protobuf field required string name_part = 1; - * @param string $var - * @return $this - */ - public function setNamePart($var) - { - GPBUtil::checkString($var, True); - $this->name_part = $var; - - return $this; - } - - /** - * Generated from protobuf field required bool is_extension = 2; - * @return bool - */ - public function getIsExtension() - { - return isset($this->is_extension) ? $this->is_extension : false; - } - - public function hasIsExtension() - { - return isset($this->is_extension); - } - - public function clearIsExtension() - { - unset($this->is_extension); - } - - /** - * Generated from protobuf field required bool is_extension = 2; - * @param bool $var - * @return $this - */ - public function setIsExtension($var) - { - GPBUtil::checkBool($var); - $this->is_extension = $var; - - return $this; - } - -} - -// Adding a class alias for backwards compatibility with the previous class name. -class_alias(NamePart::class, \Google\Protobuf\Internal\UninterpretedOption_NamePart::class); - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php b/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php deleted file mode 100644 index 9750eb0..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption_NamePart.php +++ /dev/null @@ -1,16 +0,0 @@ -google.protobuf.ListValue - */ -class ListValue extends \Google\Protobuf\Internal\Message -{ - /** - * Repeated field of dynamically typed values. - * - * Generated from protobuf field repeated .google.protobuf.Value values = 1; - */ - private $values; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array<\Google\Protobuf\Value>|\Google\Protobuf\Internal\RepeatedField $values - * Repeated field of dynamically typed values. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Struct::initOnce(); - parent::__construct($data); - } - - /** - * Repeated field of dynamically typed values. - * - * Generated from protobuf field repeated .google.protobuf.Value values = 1; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getValues() - { - return $this->values; - } - - /** - * Repeated field of dynamically typed values. - * - * Generated from protobuf field repeated .google.protobuf.Value values = 1; - * @param array<\Google\Protobuf\Value>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setValues($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Value::class); - $this->values = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Method.php b/vendor/google/protobuf/src/Google/Protobuf/Method.php deleted file mode 100644 index eda00bf..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Method.php +++ /dev/null @@ -1,271 +0,0 @@ -google.protobuf.Method - */ -class Method extends \Google\Protobuf\Internal\Message -{ - /** - * The simple name of this method. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * A URL of the input message type. - * - * Generated from protobuf field string request_type_url = 2; - */ - protected $request_type_url = ''; - /** - * If true, the request is streamed. - * - * Generated from protobuf field bool request_streaming = 3; - */ - protected $request_streaming = false; - /** - * The URL of the output message type. - * - * Generated from protobuf field string response_type_url = 4; - */ - protected $response_type_url = ''; - /** - * If true, the response is streamed. - * - * Generated from protobuf field bool response_streaming = 5; - */ - protected $response_streaming = false; - /** - * Any metadata attached to the method. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 6; - */ - private $options; - /** - * The source syntax of this method. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - */ - protected $syntax = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * The simple name of this method. - * @type string $request_type_url - * A URL of the input message type. - * @type bool $request_streaming - * If true, the request is streamed. - * @type string $response_type_url - * The URL of the output message type. - * @type bool $response_streaming - * If true, the response is streamed. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * Any metadata attached to the method. - * @type int $syntax - * The source syntax of this method. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Api::initOnce(); - parent::__construct($data); - } - - /** - * The simple name of this method. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The simple name of this method. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * A URL of the input message type. - * - * Generated from protobuf field string request_type_url = 2; - * @return string - */ - public function getRequestTypeUrl() - { - return $this->request_type_url; - } - - /** - * A URL of the input message type. - * - * Generated from protobuf field string request_type_url = 2; - * @param string $var - * @return $this - */ - public function setRequestTypeUrl($var) - { - GPBUtil::checkString($var, True); - $this->request_type_url = $var; - - return $this; - } - - /** - * If true, the request is streamed. - * - * Generated from protobuf field bool request_streaming = 3; - * @return bool - */ - public function getRequestStreaming() - { - return $this->request_streaming; - } - - /** - * If true, the request is streamed. - * - * Generated from protobuf field bool request_streaming = 3; - * @param bool $var - * @return $this - */ - public function setRequestStreaming($var) - { - GPBUtil::checkBool($var); - $this->request_streaming = $var; - - return $this; - } - - /** - * The URL of the output message type. - * - * Generated from protobuf field string response_type_url = 4; - * @return string - */ - public function getResponseTypeUrl() - { - return $this->response_type_url; - } - - /** - * The URL of the output message type. - * - * Generated from protobuf field string response_type_url = 4; - * @param string $var - * @return $this - */ - public function setResponseTypeUrl($var) - { - GPBUtil::checkString($var, True); - $this->response_type_url = $var; - - return $this; - } - - /** - * If true, the response is streamed. - * - * Generated from protobuf field bool response_streaming = 5; - * @return bool - */ - public function getResponseStreaming() - { - return $this->response_streaming; - } - - /** - * If true, the response is streamed. - * - * Generated from protobuf field bool response_streaming = 5; - * @param bool $var - * @return $this - */ - public function setResponseStreaming($var) - { - GPBUtil::checkBool($var); - $this->response_streaming = $var; - - return $this; - } - - /** - * Any metadata attached to the method. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 6; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * Any metadata attached to the method. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 6; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - - /** - * The source syntax of this method. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - * @return int - */ - public function getSyntax() - { - return $this->syntax; - } - - /** - * The source syntax of this method. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 7; - * @param int $var - * @return $this - */ - public function setSyntax($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); - $this->syntax = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Mixin.php b/vendor/google/protobuf/src/Google/Protobuf/Mixin.php deleted file mode 100644 index 4f7bf84..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Mixin.php +++ /dev/null @@ -1,166 +0,0 @@ -google.protobuf.Mixin - */ -class Mixin extends \Google\Protobuf\Internal\Message -{ - /** - * The fully qualified name of the interface which is included. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * If non-empty specifies a path under which inherited HTTP paths - * are rooted. - * - * Generated from protobuf field string root = 2; - */ - protected $root = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * The fully qualified name of the interface which is included. - * @type string $root - * If non-empty specifies a path under which inherited HTTP paths - * are rooted. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Api::initOnce(); - parent::__construct($data); - } - - /** - * The fully qualified name of the interface which is included. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The fully qualified name of the interface which is included. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * If non-empty specifies a path under which inherited HTTP paths - * are rooted. - * - * Generated from protobuf field string root = 2; - * @return string - */ - public function getRoot() - { - return $this->root; - } - - /** - * If non-empty specifies a path under which inherited HTTP paths - * are rooted. - * - * Generated from protobuf field string root = 2; - * @param string $var - * @return $this - */ - public function setRoot($var) - { - GPBUtil::checkString($var, True); - $this->root = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/NullValue.php b/vendor/google/protobuf/src/Google/Protobuf/NullValue.php deleted file mode 100644 index 61569f8..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/NullValue.php +++ /dev/null @@ -1,49 +0,0 @@ -google.protobuf.NullValue - */ -class NullValue -{ - /** - * Null value. - * - * Generated from protobuf enum NULL_VALUE = 0; - */ - const NULL_VALUE = 0; - - private static $valueToName = [ - self::NULL_VALUE => 'NULL_VALUE', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php b/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php deleted file mode 100644 index 66ffbd5..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php +++ /dev/null @@ -1,87 +0,0 @@ -internal_desc = $internal_desc; - } - - /** - * @return string The name of the oneof - */ - public function getName() - { - return $this->internal_desc->getName(); - } - - /** - * @param int $index Must be >= 0 and < getFieldCount() - * @return FieldDescriptor - */ - public function getField($index) - { - if ( - is_null($this->internal_desc->getFields()) - || !isset($this->internal_desc->getFields()[$index]) - ) { - return null; - } - return $this->getPublicDescriptor($this->internal_desc->getFields()[$index]); - } - - /** - * @return int Number of fields in the oneof - */ - public function getFieldCount() - { - return count($this->internal_desc->getFields()); - } - - public function isSynthetic() - { - return $this->internal_desc->isSynthetic(); - } -} diff --git a/vendor/google/protobuf/src/Google/Protobuf/Option.php b/vendor/google/protobuf/src/Google/Protobuf/Option.php deleted file mode 100644 index 31249e5..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Option.php +++ /dev/null @@ -1,136 +0,0 @@ -google.protobuf.Option - */ -class Option extends \Google\Protobuf\Internal\Message -{ - /** - * The option's name. For protobuf built-in options (options defined in - * descriptor.proto), this is the short name. For example, `"map_entry"`. - * For custom options, it should be the fully-qualified name. For example, - * `"google.api.http"`. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * The option's value packed in an Any message. If the value is a primitive, - * the corresponding wrapper type defined in google/protobuf/wrappers.proto - * should be used. If the value is an enum, it should be stored as an int32 - * value using the google.protobuf.Int32Value type. - * - * Generated from protobuf field .google.protobuf.Any value = 2; - */ - protected $value = null; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * The option's name. For protobuf built-in options (options defined in - * descriptor.proto), this is the short name. For example, `"map_entry"`. - * For custom options, it should be the fully-qualified name. For example, - * `"google.api.http"`. - * @type \Google\Protobuf\Any $value - * The option's value packed in an Any message. If the value is a primitive, - * the corresponding wrapper type defined in google/protobuf/wrappers.proto - * should be used. If the value is an enum, it should be stored as an int32 - * value using the google.protobuf.Int32Value type. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Type::initOnce(); - parent::__construct($data); - } - - /** - * The option's name. For protobuf built-in options (options defined in - * descriptor.proto), this is the short name. For example, `"map_entry"`. - * For custom options, it should be the fully-qualified name. For example, - * `"google.api.http"`. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The option's name. For protobuf built-in options (options defined in - * descriptor.proto), this is the short name. For example, `"map_entry"`. - * For custom options, it should be the fully-qualified name. For example, - * `"google.api.http"`. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * The option's value packed in an Any message. If the value is a primitive, - * the corresponding wrapper type defined in google/protobuf/wrappers.proto - * should be used. If the value is an enum, it should be stored as an int32 - * value using the google.protobuf.Int32Value type. - * - * Generated from protobuf field .google.protobuf.Any value = 2; - * @return \Google\Protobuf\Any|null - */ - public function getValue() - { - return $this->value; - } - - public function hasValue() - { - return isset($this->value); - } - - public function clearValue() - { - unset($this->value); - } - - /** - * The option's value packed in an Any message. If the value is a primitive, - * the corresponding wrapper type defined in google/protobuf/wrappers.proto - * should be used. If the value is an enum, it should be stored as an int32 - * value using the google.protobuf.Int32Value type. - * - * Generated from protobuf field .google.protobuf.Any value = 2; - * @param \Google\Protobuf\Any $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Any::class); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php b/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php deleted file mode 100644 index 8b3ea11..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php +++ /dev/null @@ -1,72 +0,0 @@ -google.protobuf.SourceContext - */ -class SourceContext extends \Google\Protobuf\Internal\Message -{ - /** - * The path-qualified name of the .proto file that contained the associated - * protobuf element. For example: `"google/protobuf/source_context.proto"`. - * - * Generated from protobuf field string file_name = 1; - */ - protected $file_name = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $file_name - * The path-qualified name of the .proto file that contained the associated - * protobuf element. For example: `"google/protobuf/source_context.proto"`. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\SourceContext::initOnce(); - parent::__construct($data); - } - - /** - * The path-qualified name of the .proto file that contained the associated - * protobuf element. For example: `"google/protobuf/source_context.proto"`. - * - * Generated from protobuf field string file_name = 1; - * @return string - */ - public function getFileName() - { - return $this->file_name; - } - - /** - * The path-qualified name of the .proto file that contained the associated - * protobuf element. For example: `"google/protobuf/source_context.proto"`. - * - * Generated from protobuf field string file_name = 1; - * @param string $var - * @return $this - */ - public function setFileName($var) - { - GPBUtil::checkString($var, True); - $this->file_name = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/StringValue.php b/vendor/google/protobuf/src/Google/Protobuf/StringValue.php deleted file mode 100644 index ad98316..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/StringValue.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.StringValue - */ -class StringValue extends \Google\Protobuf\Internal\Message -{ - /** - * The string value. - * - * Generated from protobuf field string value = 1; - */ - protected $value = ''; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $value - * The string value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The string value. - * - * Generated from protobuf field string value = 1; - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * The string value. - * - * Generated from protobuf field string value = 1; - * @param string $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkString($var, True); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Struct.php b/vendor/google/protobuf/src/Google/Protobuf/Struct.php deleted file mode 100644 index 0456541..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Struct.php +++ /dev/null @@ -1,73 +0,0 @@ -google.protobuf.Struct - */ -class Struct extends \Google\Protobuf\Internal\Message -{ - /** - * Unordered map of dynamically typed values. - * - * Generated from protobuf field map fields = 1; - */ - private $fields; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type array|\Google\Protobuf\Internal\MapField $fields - * Unordered map of dynamically typed values. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Struct::initOnce(); - parent::__construct($data); - } - - /** - * Unordered map of dynamically typed values. - * - * Generated from protobuf field map fields = 1; - * @return \Google\Protobuf\Internal\MapField - */ - public function getFields() - { - return $this->fields; - } - - /** - * Unordered map of dynamically typed values. - * - * Generated from protobuf field map fields = 1; - * @param array|\Google\Protobuf\Internal\MapField $var - * @return $this - */ - public function setFields($var) - { - $arr = GPBUtil::checkMapField($var, \Google\Protobuf\Internal\GPBType::STRING, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Value::class); - $this->fields = $arr; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Syntax.php b/vendor/google/protobuf/src/Google/Protobuf/Syntax.php deleted file mode 100644 index 10952bf..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Syntax.php +++ /dev/null @@ -1,54 +0,0 @@ -google.protobuf.Syntax - */ -class Syntax -{ - /** - * Syntax `proto2`. - * - * Generated from protobuf enum SYNTAX_PROTO2 = 0; - */ - const SYNTAX_PROTO2 = 0; - /** - * Syntax `proto3`. - * - * Generated from protobuf enum SYNTAX_PROTO3 = 1; - */ - const SYNTAX_PROTO3 = 1; - - private static $valueToName = [ - self::SYNTAX_PROTO2 => 'SYNTAX_PROTO2', - self::SYNTAX_PROTO3 => 'SYNTAX_PROTO3', - ]; - - public static function name($value) - { - if (!isset(self::$valueToName[$value])) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no name defined for value %s', __CLASS__, $value)); - } - return self::$valueToName[$value]; - } - - - public static function value($name) - { - $const = __CLASS__ . '::' . strtoupper($name); - if (!defined($const)) { - throw new UnexpectedValueException(sprintf( - 'Enum %s has no value defined for name %s', __CLASS__, $name)); - } - return constant($const); - } -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php b/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php deleted file mode 100644 index a12f485..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php +++ /dev/null @@ -1,186 +0,0 @@ -google.protobuf.Timestamp - */ -class Timestamp extends \Google\Protobuf\Internal\TimestampBase -{ - /** - * Represents seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * - * Generated from protobuf field int64 seconds = 1; - */ - protected $seconds = 0; - /** - * Non-negative fractions of a second at nanosecond resolution. Negative - * second values with fractions must still have non-negative nanos values - * that count forward in time. Must be from 0 to 999,999,999 - * inclusive. - * - * Generated from protobuf field int32 nanos = 2; - */ - protected $nanos = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $seconds - * Represents seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * @type int $nanos - * Non-negative fractions of a second at nanosecond resolution. Negative - * second values with fractions must still have non-negative nanos values - * that count forward in time. Must be from 0 to 999,999,999 - * inclusive. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Timestamp::initOnce(); - parent::__construct($data); - } - - /** - * Represents seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * - * Generated from protobuf field int64 seconds = 1; - * @return int|string - */ - public function getSeconds() - { - return $this->seconds; - } - - /** - * Represents seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * - * Generated from protobuf field int64 seconds = 1; - * @param int|string $var - * @return $this - */ - public function setSeconds($var) - { - GPBUtil::checkInt64($var); - $this->seconds = $var; - - return $this; - } - - /** - * Non-negative fractions of a second at nanosecond resolution. Negative - * second values with fractions must still have non-negative nanos values - * that count forward in time. Must be from 0 to 999,999,999 - * inclusive. - * - * Generated from protobuf field int32 nanos = 2; - * @return int - */ - public function getNanos() - { - return $this->nanos; - } - - /** - * Non-negative fractions of a second at nanosecond resolution. Negative - * second values with fractions must still have non-negative nanos values - * that count forward in time. Must be from 0 to 999,999,999 - * inclusive. - * - * Generated from protobuf field int32 nanos = 2; - * @param int $var - * @return $this - */ - public function setNanos($var) - { - GPBUtil::checkInt32($var); - $this->nanos = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Type.php b/vendor/google/protobuf/src/Google/Protobuf/Type.php deleted file mode 100644 index d4af7df..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Type.php +++ /dev/null @@ -1,247 +0,0 @@ -google.protobuf.Type - */ -class Type extends \Google\Protobuf\Internal\Message -{ - /** - * The fully qualified message name. - * - * Generated from protobuf field string name = 1; - */ - protected $name = ''; - /** - * The list of fields. - * - * Generated from protobuf field repeated .google.protobuf.Field fields = 2; - */ - private $fields; - /** - * The list of types appearing in `oneof` definitions in this type. - * - * Generated from protobuf field repeated string oneofs = 3; - */ - private $oneofs; - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 4; - */ - private $options; - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - */ - protected $source_context = null; - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 6; - */ - protected $syntax = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type string $name - * The fully qualified message name. - * @type array<\Google\Protobuf\Field>|\Google\Protobuf\Internal\RepeatedField $fields - * The list of fields. - * @type array|\Google\Protobuf\Internal\RepeatedField $oneofs - * The list of types appearing in `oneof` definitions in this type. - * @type array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $options - * The protocol buffer options. - * @type \Google\Protobuf\SourceContext $source_context - * The source context. - * @type int $syntax - * The source syntax. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Type::initOnce(); - parent::__construct($data); - } - - /** - * The fully qualified message name. - * - * Generated from protobuf field string name = 1; - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * The fully qualified message name. - * - * Generated from protobuf field string name = 1; - * @param string $var - * @return $this - */ - public function setName($var) - { - GPBUtil::checkString($var, True); - $this->name = $var; - - return $this; - } - - /** - * The list of fields. - * - * Generated from protobuf field repeated .google.protobuf.Field fields = 2; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getFields() - { - return $this->fields; - } - - /** - * The list of fields. - * - * Generated from protobuf field repeated .google.protobuf.Field fields = 2; - * @param array<\Google\Protobuf\Field>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setFields($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Field::class); - $this->fields = $arr; - - return $this; - } - - /** - * The list of types appearing in `oneof` definitions in this type. - * - * Generated from protobuf field repeated string oneofs = 3; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOneofs() - { - return $this->oneofs; - } - - /** - * The list of types appearing in `oneof` definitions in this type. - * - * Generated from protobuf field repeated string oneofs = 3; - * @param array|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOneofs($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); - $this->oneofs = $arr; - - return $this; - } - - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 4; - * @return \Google\Protobuf\Internal\RepeatedField - */ - public function getOptions() - { - return $this->options; - } - - /** - * The protocol buffer options. - * - * Generated from protobuf field repeated .google.protobuf.Option options = 4; - * @param array<\Google\Protobuf\Option>|\Google\Protobuf\Internal\RepeatedField $var - * @return $this - */ - public function setOptions($var) - { - $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Protobuf\Option::class); - $this->options = $arr; - - return $this; - } - - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - * @return \Google\Protobuf\SourceContext|null - */ - public function getSourceContext() - { - return $this->source_context; - } - - public function hasSourceContext() - { - return isset($this->source_context); - } - - public function clearSourceContext() - { - unset($this->source_context); - } - - /** - * The source context. - * - * Generated from protobuf field .google.protobuf.SourceContext source_context = 5; - * @param \Google\Protobuf\SourceContext $var - * @return $this - */ - public function setSourceContext($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\SourceContext::class); - $this->source_context = $var; - - return $this; - } - - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 6; - * @return int - */ - public function getSyntax() - { - return $this->syntax; - } - - /** - * The source syntax. - * - * Generated from protobuf field .google.protobuf.Syntax syntax = 6; - * @param int $var - * @return $this - */ - public function setSyntax($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\Syntax::class); - $this->syntax = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php b/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php deleted file mode 100644 index ae5fc5b..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.UInt32Value - */ -class UInt32Value extends \Google\Protobuf\Internal\Message -{ - /** - * The uint32 value. - * - * Generated from protobuf field uint32 value = 1; - */ - protected $value = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $value - * The uint32 value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The uint32 value. - * - * Generated from protobuf field uint32 value = 1; - * @return int - */ - public function getValue() - { - return $this->value; - } - - /** - * The uint32 value. - * - * Generated from protobuf field uint32 value = 1; - * @param int $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkUint32($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php b/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php deleted file mode 100644 index aa96867..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php +++ /dev/null @@ -1,68 +0,0 @@ -google.protobuf.UInt64Value - */ -class UInt64Value extends \Google\Protobuf\Internal\Message -{ - /** - * The uint64 value. - * - * Generated from protobuf field uint64 value = 1; - */ - protected $value = 0; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int|string $value - * The uint64 value. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Wrappers::initOnce(); - parent::__construct($data); - } - - /** - * The uint64 value. - * - * Generated from protobuf field uint64 value = 1; - * @return int|string - */ - public function getValue() - { - return $this->value; - } - - /** - * The uint64 value. - * - * Generated from protobuf field uint64 value = 1; - * @param int|string $var - * @return $this - */ - public function setValue($var) - { - GPBUtil::checkUint64($var); - $this->value = $var; - - return $this; - } - -} - diff --git a/vendor/google/protobuf/src/Google/Protobuf/Value.php b/vendor/google/protobuf/src/Google/Protobuf/Value.php deleted file mode 100644 index dcc0bdf..0000000 --- a/vendor/google/protobuf/src/Google/Protobuf/Value.php +++ /dev/null @@ -1,244 +0,0 @@ -google.protobuf.Value - */ -class Value extends \Google\Protobuf\Internal\Message -{ - protected $kind; - - /** - * Constructor. - * - * @param array $data { - * Optional. Data for populating the Message object. - * - * @type int $null_value - * Represents a null value. - * @type float $number_value - * Represents a double value. - * @type string $string_value - * Represents a string value. - * @type bool $bool_value - * Represents a boolean value. - * @type \Google\Protobuf\Struct $struct_value - * Represents a structured value. - * @type \Google\Protobuf\ListValue $list_value - * Represents a repeated `Value`. - * } - */ - public function __construct($data = NULL) { - \GPBMetadata\Google\Protobuf\Struct::initOnce(); - parent::__construct($data); - } - - /** - * Represents a null value. - * - * Generated from protobuf field .google.protobuf.NullValue null_value = 1; - * @return int - */ - public function getNullValue() - { - return $this->readOneof(1); - } - - public function hasNullValue() - { - return $this->hasOneof(1); - } - - /** - * Represents a null value. - * - * Generated from protobuf field .google.protobuf.NullValue null_value = 1; - * @param int $var - * @return $this - */ - public function setNullValue($var) - { - GPBUtil::checkEnum($var, \Google\Protobuf\NullValue::class); - $this->writeOneof(1, $var); - - return $this; - } - - /** - * Represents a double value. - * - * Generated from protobuf field double number_value = 2; - * @return float - */ - public function getNumberValue() - { - return $this->readOneof(2); - } - - public function hasNumberValue() - { - return $this->hasOneof(2); - } - - /** - * Represents a double value. - * - * Generated from protobuf field double number_value = 2; - * @param float $var - * @return $this - */ - public function setNumberValue($var) - { - GPBUtil::checkDouble($var); - $this->writeOneof(2, $var); - - return $this; - } - - /** - * Represents a string value. - * - * Generated from protobuf field string string_value = 3; - * @return string - */ - public function getStringValue() - { - return $this->readOneof(3); - } - - public function hasStringValue() - { - return $this->hasOneof(3); - } - - /** - * Represents a string value. - * - * Generated from protobuf field string string_value = 3; - * @param string $var - * @return $this - */ - public function setStringValue($var) - { - GPBUtil::checkString($var, True); - $this->writeOneof(3, $var); - - return $this; - } - - /** - * Represents a boolean value. - * - * Generated from protobuf field bool bool_value = 4; - * @return bool - */ - public function getBoolValue() - { - return $this->readOneof(4); - } - - public function hasBoolValue() - { - return $this->hasOneof(4); - } - - /** - * Represents a boolean value. - * - * Generated from protobuf field bool bool_value = 4; - * @param bool $var - * @return $this - */ - public function setBoolValue($var) - { - GPBUtil::checkBool($var); - $this->writeOneof(4, $var); - - return $this; - } - - /** - * Represents a structured value. - * - * Generated from protobuf field .google.protobuf.Struct struct_value = 5; - * @return \Google\Protobuf\Struct|null - */ - public function getStructValue() - { - return $this->readOneof(5); - } - - public function hasStructValue() - { - return $this->hasOneof(5); - } - - /** - * Represents a structured value. - * - * Generated from protobuf field .google.protobuf.Struct struct_value = 5; - * @param \Google\Protobuf\Struct $var - * @return $this - */ - public function setStructValue($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\Struct::class); - $this->writeOneof(5, $var); - - return $this; - } - - /** - * Represents a repeated `Value`. - * - * Generated from protobuf field .google.protobuf.ListValue list_value = 6; - * @return \Google\Protobuf\ListValue|null - */ - public function getListValue() - { - return $this->readOneof(6); - } - - public function hasListValue() - { - return $this->hasOneof(6); - } - - /** - * Represents a repeated `Value`. - * - * Generated from protobuf field .google.protobuf.ListValue list_value = 6; - * @param \Google\Protobuf\ListValue $var - * @return $this - */ - public function setListValue($var) - { - GPBUtil::checkMessage($var, \Google\Protobuf\ListValue::class); - $this->writeOneof(6, $var); - - return $this; - } - - /** - * @return string - */ - public function getKind() - { - return $this->whichOneof("kind"); - } - -} - diff --git a/vendor/google/protobuf/src/phpdoc.dist.xml b/vendor/google/protobuf/src/phpdoc.dist.xml deleted file mode 100644 index dd31302..0000000 --- a/vendor/google/protobuf/src/phpdoc.dist.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - doc - - - doc - - - Google/Protobuf/Internal/MapField.php - Google/Protobuf/Internal/Message.php - Google/Protobuf/Internal/RepeatedField.php - - diff --git a/vendor/grpc/grpc/LICENSE b/vendor/grpc/grpc/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/vendor/grpc/grpc/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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 {yyyy} {name of copyright owner} - - 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/vendor/grpc/grpc/MAINTAINERS.md b/vendor/grpc/grpc/MAINTAINERS.md deleted file mode 100644 index 975a694..0000000 --- a/vendor/grpc/grpc/MAINTAINERS.md +++ /dev/null @@ -1,16 +0,0 @@ -This page lists all active maintainers of this repository. If you were a -maintainer and would like to add your name to the Emeritus list, please send us a -PR. - -See [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md) -for governance guidelines and how to become a maintainer. -See [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) -for general contribution guidelines. - -## Maintainers (in alphabetical order) -- [stanley-cheung](https://github.com/stanley-cheung), Google Inc. -- [wenbozhu](https://github.com/wenbozhu), Google Inc. -- [zhouyihaiding](https://github.com/zhouyihaiding), Google Inc. - -## Emeritus Maintainers (in alphabetical order) -- [murgatroid99](https://github.com/murgatroid99), Google Inc. diff --git a/vendor/grpc/grpc/README.md b/vendor/grpc/grpc/README.md deleted file mode 100644 index 293c27b..0000000 --- a/vendor/grpc/grpc/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# gRPC PHP Client Library - -This repository contains only PHP files to support Composer installation. - -This repository is a mirror of [gRPC](https://github.com/grpc/grpc). Any support -requests, bug reports, or development contributions should be directed to -that project. - -To install gRPC for PHP, please see https://github.com/grpc/grpc/tree/master/src/php diff --git a/vendor/grpc/grpc/composer.json b/vendor/grpc/grpc/composer.json deleted file mode 100644 index bf91659..0000000 --- a/vendor/grpc/grpc/composer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "grpc/grpc", - "type": "library", - "description": "gRPC library for PHP", - "keywords": ["rpc"], - "homepage": "https://grpc.io", - "license": "Apache-2.0", - "version": "1.42.0", - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "google/auth": "^v1.3.0" - }, - "suggest": { - "ext-protobuf": "For better performance, install the protobuf C extension.", - "google/protobuf": "To get started using grpc quickly, install the native protobuf library." - }, - "autoload": { - "psr-4": { - "Grpc\\": "src/lib/" - } - } -} diff --git a/vendor/grpc/grpc/etc/roots.pem b/vendor/grpc/grpc/etc/roots.pem deleted file mode 100644 index e5c84fa..0000000 --- a/vendor/grpc/grpc/etc/roots.pem +++ /dev/null @@ -1,4337 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) -# Label: "NetLock Arany (Class Gold) Főtanúsítvány" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes -# Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes -# Label: "EC-ACC" -# Serial: -23701579247955709139626555126524820479 -# MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09 -# SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8 -# SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99 ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB -8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy -dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 -YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 -dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh -IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD -LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG -EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g -KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD -ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu -bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg -ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R -85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm -4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV -HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd -QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t -lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB -o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 -opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo -dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW -ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN -AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y -/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k -SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy -Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS -Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl -nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi -# Subject: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi -# Label: "E-Tugra Certification Authority" -# Serial: 7667447206703254355 -# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 -# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 -# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV -BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC -aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV -BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 -Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz -MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ -BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp -em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY -B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH -D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF -Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo -q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D -k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH -fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut -dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM -ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 -zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX -U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 -Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 -XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF -Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR -HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY -GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c -77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 -+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK -vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 -FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl -yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P -AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD -y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d -NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 14367148294922964480859022125800977897474 -# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e -# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb -# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ -FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F -uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX -kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs -ewv4n4Q= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden EV Root CA" -# Serial: 10000013 -# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba -# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb -# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y -MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg -TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS -b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS -M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC -UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d -Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p -rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l -pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb -j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC -KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS -/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X -cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH -1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP -px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 -MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u -2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS -v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC -wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy -CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e -vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 -Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa -Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL -eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 -FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc -7uzXLg== ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-1" -# Serial: 15752444095811006489 -# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 -# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a -# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y -IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB -pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h -IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG -A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU -cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid -RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V -seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme -9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV -EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW -hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ -DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD -ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I -/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ -yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts -L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN -zl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-2" -# Serial: 2711694510199101698 -# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 -# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 -# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig -Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk -MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg -Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD -VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy -dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ -QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq -1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp -2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK -DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape -az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF -3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 -oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM -g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 -mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd -BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U -nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw -DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX -dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ -MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL -/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX -CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa -ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW -2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 -N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 -Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB -As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp -5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu -1uwJ ------END CERTIFICATE----- - -# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor ECA-1" -# Serial: 9548242946988625984 -# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c -# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd -# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y -IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig -RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb -3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA -BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 -3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou -owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ -wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF -ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf -BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv -civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 -AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 -soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI -WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi -tJ/X5g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 146587175971765017618439757810265552097 -# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85 -# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8 -# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH -MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM -QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy -MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl -cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM -f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX -mX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7 -zUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P -fyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc -vfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4 -Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp -zBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO -Rc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW -k70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+ -DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF -lQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW -Cu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z -XPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR -gyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3 -d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv -J4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg -DdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM -+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy -F62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9 -SQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws -E3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 146587176055767053814479386953112547951 -# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b -# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d -# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH -MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM -QzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy -MDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl -cnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv -CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg -GjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu -XvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd -re7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu -PuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1 -mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K -8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj -x5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR -nTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0 -kzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok -twIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp -8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT -z9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA -pJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb -pxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB -R64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R -RaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk -0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC -5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF -izoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn -yOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 146587176140553309517047991083707763997 -# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25 -# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5 -# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5 ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout -736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A -DDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk -fCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA -njWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 146587176229350439916519468929765261721 -# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26 -# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb -# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu -hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l -xKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0 -CMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx -sbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G4" -# Serial: 289383649854506086828220374796556676440 -# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 -# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 -# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw -gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL -Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg -MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw -BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 -MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 -c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ -bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ -2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E -T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j -5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM -C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T -DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX -wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A -2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm -nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 -dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl -N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj -c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS -5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS -Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr -hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ -B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI -AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw -H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ -b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk -2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol -IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk -5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY -n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Label: "GLOBALTRUST 2020" -# Serial: 109160994242082918454945253 -# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 -# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 -# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a ------BEGIN CERTIFICATE----- -MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG -A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw -FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx -MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u -aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b -RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z -YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 -QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw -yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ -BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ -SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH -r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 -4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me -dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw -q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 -nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu -H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA -VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC -XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd -6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf -+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi -kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 -wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB -TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C -MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn -4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I -aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy -qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV -BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk -YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV -BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN -MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF -UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD -VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v -dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj -cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q -yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH -2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX -H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL -zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR -p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz -W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ -SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn -LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 -n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B -u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj -o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC -AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L -9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej -rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK -pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 -vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq -OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ -/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 -2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI -+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 -MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo -tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 -MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu -MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV -BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw -MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg -U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ -n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q -p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq -NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF -8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 -HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa -mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi -7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF -ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P -qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ -v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 -Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 -vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD -ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 -WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo -zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR -5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ -GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf -5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq -0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D -P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM -qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP -0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf -E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- diff --git a/vendor/grpc/grpc/src/lib/AbstractCall.php b/vendor/grpc/grpc/src/lib/AbstractCall.php deleted file mode 100644 index d1a186a..0000000 --- a/vendor/grpc/grpc/src/lib/AbstractCall.php +++ /dev/null @@ -1,147 +0,0 @@ -add($delta); - } else { - $deadline = Timeval::infFuture(); - } - $this->call = new Call($channel, $method, $deadline); - $this->deserialize = $deserialize; - $this->metadata = null; - $this->trailing_metadata = null; - if (array_key_exists('call_credentials_callback', $options) && - is_callable($call_credentials_callback = - $options['call_credentials_callback']) - ) { - $call_credentials = CallCredentials::createFromPlugin( - $call_credentials_callback - ); - $this->call->setCredentials($call_credentials); - } - } - - /** - * @return mixed The metadata sent by the server - */ - public function getMetadata() - { - return $this->metadata; - } - - /** - * @return mixed The trailing metadata sent by the server - */ - public function getTrailingMetadata() - { - return $this->trailing_metadata; - } - - /** - * @return string The URI of the endpoint - */ - public function getPeer() - { - return $this->call->getPeer(); - } - - /** - * Cancels the call. - */ - public function cancel() - { - $this->call->cancel(); - } - - /** - * Serialize a message to the protobuf binary format. - * - * @param mixed $data The Protobuf message - * - * @return string The protobuf binary format - */ - protected function _serializeMessage($data) - { - // Proto3 implementation - return $data->serializeToString(); - } - - /** - * Deserialize a response value to an object. - * - * @param string $value The binary value to deserialize - * - * @return mixed The deserialized value - */ - protected function _deserializeResponse($value) - { - if ($value === null) { - return; - } - list($className, $deserializeFunc) = $this->deserialize; - $obj = new $className(); - $obj->mergeFromString($value); - return $obj; - } - - /** - * Set the CallCredentials for the underlying Call. - * - * @param CallCredentials $call_credentials The CallCredentials object - */ - public function setCallCredentials($call_credentials) - { - $this->call->setCredentials($call_credentials); - } -} diff --git a/vendor/grpc/grpc/src/lib/BaseStub.php b/vendor/grpc/grpc/src/lib/BaseStub.php deleted file mode 100644 index cb44ef6..0000000 --- a/vendor/grpc/grpc/src/lib/BaseStub.php +++ /dev/null @@ -1,618 +0,0 @@ -hostname = $hostname; - $this->update_metadata = null; - if (isset($opts['update_metadata'])) { - if (is_callable($opts['update_metadata'])) { - $this->update_metadata = $opts['update_metadata']; - } - unset($opts['update_metadata']); - } - if (!empty($opts['grpc.ssl_target_name_override'])) { - $this->hostname_override = $opts['grpc.ssl_target_name_override']; - } - if (isset($opts['grpc_call_invoker'])) { - $this->call_invoker = $opts['grpc_call_invoker']; - unset($opts['grpc_call_invoker']); - $channel_opts = $this->updateOpts($opts); - // If the grpc_call_invoker is defined, use the channel created by the call invoker. - $this->channel = $this->call_invoker->createChannelFactory($hostname, $channel_opts); - return; - } - $this->call_invoker = new DefaultCallInvoker(); - if ($channel) { - if (!is_a($channel, 'Grpc\Channel') && - !is_a($channel, 'Grpc\Internal\InterceptorChannel')) { - throw new \Exception('The channel argument is not a Channel object '. - 'or an InterceptorChannel object created by '. - 'Interceptor::intercept($channel, Interceptor|Interceptor[] $interceptors)'); - } - $this->channel = $channel; - return; - } - - $this->channel = static::getDefaultChannel($hostname, $opts); - } - - private static function updateOpts($opts) { - if (!empty($opts['grpc.primary_user_agent'])) { - $opts['grpc.primary_user_agent'] .= ' '; - } else { - $opts['grpc.primary_user_agent'] = ''; - } - if (defined('\Grpc\VERSION')) { - $version_str = \Grpc\VERSION; - } else { - if (!file_exists($composerFile = __DIR__.'/../../composer.json')) { - // for grpc/grpc-php subpackage - $composerFile = __DIR__.'/../composer.json'; - } - $package_config = json_decode(file_get_contents($composerFile), true); - $version_str = $package_config['version']; - } - $opts['grpc.primary_user_agent'] .= 'grpc-php/'.$version_str; - if (!array_key_exists('credentials', $opts)) { - throw new \Exception("The opts['credentials'] key is now ". - 'required. Please see one of the '. - 'ChannelCredentials::create methods'); - } - return $opts; - } - - /** - * Creates and returns the default Channel - * - * @param array $opts Channel constructor options - * - * @return Channel The channel - */ - public static function getDefaultChannel($hostname, array $opts) - { - $channel_opts = self::updateOpts($opts); - return new Channel($hostname, $opts); - } - - /** - * @return string The URI of the endpoint - */ - public function getTarget() - { - return $this->channel->getTarget(); - } - - /** - * @param bool $try_to_connect (optional) - * - * @return int The grpc connectivity state - */ - public function getConnectivityState($try_to_connect = false) - { - return $this->channel->getConnectivityState($try_to_connect); - } - - /** - * @param int $timeout in microseconds - * - * @return bool true if channel is ready - * @throw Exception if channel is in FATAL_ERROR state - */ - public function waitForReady($timeout) - { - $new_state = $this->getConnectivityState(true); - if ($this->_checkConnectivityState($new_state)) { - return true; - } - - $now = Timeval::now(); - $delta = new Timeval($timeout); - $deadline = $now->add($delta); - - while ($this->channel->watchConnectivityState($new_state, $deadline)) { - // state has changed before deadline - $new_state = $this->getConnectivityState(); - if ($this->_checkConnectivityState($new_state)) { - return true; - } - } - // deadline has passed - $new_state = $this->getConnectivityState(); - - return $this->_checkConnectivityState($new_state); - } - - /** - * Close the communication channel associated with this stub. - */ - public function close() - { - $this->channel->close(); - } - - /** - * @param $new_state Connect state - * - * @return bool true if state is CHANNEL_READY - * @throw Exception if state is CHANNEL_FATAL_FAILURE - */ - private function _checkConnectivityState($new_state) - { - if ($new_state == \Grpc\CHANNEL_READY) { - return true; - } - if ($new_state == \Grpc\CHANNEL_FATAL_FAILURE) { - throw new \Exception('Failed to connect to server'); - } - - return false; - } - - /** - * constructs the auth uri for the jwt. - * - * @param string $method The method string - * - * @return string The URL string - */ - private function _get_jwt_aud_uri($method) - { - // TODO(jtattermusch): This is not the correct implementation - // of extracting JWT "aud" claim. We should rely on - // grpc_metadata_credentials_plugin which - // also provides the correct value of "aud" claim - // in the grpc_auth_metadata_context.service_url field. - // Trying to do the construction of "aud" field ourselves - // is bad. - $last_slash_idx = strrpos($method, '/'); - if ($last_slash_idx === false) { - throw new \InvalidArgumentException( - 'service name must have a slash' - ); - } - $service_name = substr($method, 0, $last_slash_idx); - - if ($this->hostname_override) { - $hostname = $this->hostname_override; - } else { - $hostname = $this->hostname; - } - - // Remove the port if it is 443 - // See https://github.com/grpc/grpc/blob/07c9f7a36b2a0d34fcffebc85649cf3b8c339b5d/src/core/lib/security/transport/client_auth_filter.cc#L205 - if ((strlen($hostname) > 4) && (substr($hostname, -4) === ":443")) { - $hostname = substr($hostname, 0, -4); - } - - return 'https://'.$hostname.$service_name; - } - - /** - * validate and normalize the metadata array. - * - * @param array $metadata The metadata map - * - * @return array $metadata Validated and key-normalized metadata map - * @throw InvalidArgumentException if key contains invalid characters - */ - private function _validate_and_normalize_metadata($metadata) - { - $metadata_copy = []; - foreach ($metadata as $key => $value) { - if (!preg_match('/^[.A-Za-z\d_-]+$/', $key)) { - throw new \InvalidArgumentException( - 'Metadata keys must be nonempty strings containing only '. - 'alphanumeric characters, hyphens, underscores and dots' - ); - } - $metadata_copy[strtolower($key)] = $value; - } - - return $metadata_copy; - } - - /** - * Create a function which can be used to create UnaryCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _GrpcUnaryUnary($channel) - { - return function ($method, - $argument, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - $call = $this->call_invoker->UnaryCall( - $channel, - $method, - $deserialize, - $options - ); - $jwt_aud_uri = $this->_get_jwt_aud_uri($method); - if (is_callable($this->update_metadata)) { - $metadata = call_user_func( - $this->update_metadata, - $metadata, - $jwt_aud_uri - ); - } - $metadata = $this->_validate_and_normalize_metadata( - $metadata - ); - $call->start($argument, $metadata, $options); - return $call; - }; - } - - /** - * Create a function which can be used to create ServerStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _GrpcStreamUnary($channel) - { - return function ($method, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - $call = $this->call_invoker->ClientStreamingCall( - $channel, - $method, - $deserialize, - $options - ); - $jwt_aud_uri = $this->_get_jwt_aud_uri($method); - if (is_callable($this->update_metadata)) { - $metadata = call_user_func( - $this->update_metadata, - $metadata, - $jwt_aud_uri - ); - } - $metadata = $this->_validate_and_normalize_metadata( - $metadata - ); - $call->start($metadata); - return $call; - }; - } - - /** - * Create a function which can be used to create ClientStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _GrpcUnaryStream($channel) - { - return function ($method, - $argument, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - $call = $this->call_invoker->ServerStreamingCall( - $channel, - $method, - $deserialize, - $options - ); - $jwt_aud_uri = $this->_get_jwt_aud_uri($method); - if (is_callable($this->update_metadata)) { - $metadata = call_user_func( - $this->update_metadata, - $metadata, - $jwt_aud_uri - ); - } - $metadata = $this->_validate_and_normalize_metadata( - $metadata - ); - $call->start($argument, $metadata, $options); - return $call; - }; - } - - /** - * Create a function which can be used to create BidiStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _GrpcStreamStream($channel) - { - return function ($method, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - $call = $this->call_invoker->BidiStreamingCall( - $channel, - $method, - $deserialize, - $options - ); - $jwt_aud_uri = $this->_get_jwt_aud_uri($method); - if (is_callable($this->update_metadata)) { - $metadata = call_user_func( - $this->update_metadata, - $metadata, - $jwt_aud_uri - ); - } - $metadata = $this->_validate_and_normalize_metadata( - $metadata - ); - $call->start($metadata); - - return $call; - }; - } - - /** - * Create a function which can be used to create UnaryCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _UnaryUnaryCallFactory($channel) - { - if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { - return function ($method, - $argument, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - return $channel->getInterceptor()->interceptUnaryUnary( - $method, - $argument, - $deserialize, - $this->_UnaryUnaryCallFactory($channel->getNext()), - $metadata, - $options - ); - }; - } - return $this->_GrpcUnaryUnary($channel); - } - - /** - * Create a function which can be used to create ServerStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _UnaryStreamCallFactory($channel) - { - if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { - return function ($method, - $argument, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - return $channel->getInterceptor()->interceptUnaryStream( - $method, - $argument, - $deserialize, - $this->_UnaryStreamCallFactory($channel->getNext()), - $metadata, - $options - ); - }; - } - return $this->_GrpcUnaryStream($channel); - } - - /** - * Create a function which can be used to create ClientStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _StreamUnaryCallFactory($channel) - { - if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { - return function ($method, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - return $channel->getInterceptor()->interceptStreamUnary( - $method, - $deserialize, - $this->_StreamUnaryCallFactory($channel->getNext()), - $metadata, - $options - ); - }; - } - return $this->_GrpcStreamUnary($channel); - } - - /** - * Create a function which can be used to create BidiStreamingCall - * - * @param Channel|InterceptorChannel $channel - * @param callable $deserialize A function that deserializes the response - * - * @return \Closure - */ - private function _StreamStreamCallFactory($channel) - { - if (is_a($channel, 'Grpc\Internal\InterceptorChannel')) { - return function ($method, - $deserialize, - array $metadata = [], - array $options = []) use ($channel) { - return $channel->getInterceptor()->interceptStreamStream( - $method, - $deserialize, - $this->_StreamStreamCallFactory($channel->getNext()), - $metadata, - $options - ); - }; - } - return $this->_GrpcStreamStream($channel); - } - - /* This class is intended to be subclassed by generated code, so - * all functions begin with "_" to avoid name collisions. */ - /** - * Call a remote method that takes a single argument and has a - * single output. - * - * @param string $method The name of the method to call - * @param mixed $argument The argument to the method - * @param callable $deserialize A function that deserializes the response - * @param array $metadata A metadata map to send to the server - * (optional) - * @param array $options An array of options (optional) - * - * @return UnaryCall The active call object - */ - protected function _simpleRequest( - $method, - $argument, - $deserialize, - array $metadata = [], - array $options = [] - ) { - $call_factory = $this->_UnaryUnaryCallFactory($this->channel); - $call = $call_factory($method, $argument, $deserialize, $metadata, $options); - return $call; - } - - /** - * Call a remote method that takes a stream of arguments and has a single - * output. - * - * @param string $method The name of the method to call - * @param callable $deserialize A function that deserializes the response - * @param array $metadata A metadata map to send to the server - * (optional) - * @param array $options An array of options (optional) - * - * @return ClientStreamingCall The active call object - */ - protected function _clientStreamRequest( - $method, - $deserialize, - array $metadata = [], - array $options = [] - ) { - $call_factory = $this->_StreamUnaryCallFactory($this->channel); - $call = $call_factory($method, $deserialize, $metadata, $options); - return $call; - } - - /** - * Call a remote method that takes a single argument and returns a stream - * of responses. - * - * @param string $method The name of the method to call - * @param mixed $argument The argument to the method - * @param callable $deserialize A function that deserializes the responses - * @param array $metadata A metadata map to send to the server - * (optional) - * @param array $options An array of options (optional) - * - * @return ServerStreamingCall The active call object - */ - protected function _serverStreamRequest( - $method, - $argument, - $deserialize, - array $metadata = [], - array $options = [] - ) { - $call_factory = $this->_UnaryStreamCallFactory($this->channel); - $call = $call_factory($method, $argument, $deserialize, $metadata, $options); - return $call; - } - - /** - * Call a remote method with messages streaming in both directions. - * - * @param string $method The name of the method to call - * @param callable $deserialize A function that deserializes the responses - * @param array $metadata A metadata map to send to the server - * (optional) - * @param array $options An array of options (optional) - * - * @return BidiStreamingCall The active call object - */ - protected function _bidiRequest( - $method, - $deserialize, - array $metadata = [], - array $options = [] - ) { - $call_factory = $this->_StreamStreamCallFactory($this->channel); - $call = $call_factory($method, $deserialize, $metadata, $options); - return $call; - } -} diff --git a/vendor/grpc/grpc/src/lib/BidiStreamingCall.php b/vendor/grpc/grpc/src/lib/BidiStreamingCall.php deleted file mode 100644 index be79c5d..0000000 --- a/vendor/grpc/grpc/src/lib/BidiStreamingCall.php +++ /dev/null @@ -1,105 +0,0 @@ -call->startBatch([ - OP_SEND_INITIAL_METADATA => $metadata, - ]); - } - - /** - * Reads the next value from the server. - * - * @return mixed The next value from the server, or null if there is none - */ - public function read() - { - $batch = [OP_RECV_MESSAGE => true]; - if ($this->metadata === null) { - $batch[OP_RECV_INITIAL_METADATA] = true; - } - $read_event = $this->call->startBatch($batch); - if ($this->metadata === null) { - $this->metadata = $read_event->metadata; - } - - return $this->_deserializeResponse($read_event->message); - } - - /** - * Write a single message to the server. This cannot be called after - * writesDone is called. - * - * @param ByteBuffer $data The data to write - * @param array $options An array of options, possible keys: - * 'flags' => a number (optional) - */ - public function write($data, array $options = []) - { - $message_array = ['message' => $this->_serializeMessage($data)]; - if (array_key_exists('flags', $options)) { - $message_array['flags'] = $options['flags']; - } - $this->call->startBatch([ - OP_SEND_MESSAGE => $message_array, - ]); - } - - /** - * Indicate that no more writes will be sent. - */ - public function writesDone() - { - $this->call->startBatch([ - OP_SEND_CLOSE_FROM_CLIENT => true, - ]); - } - - /** - * Wait for the server to send the status, and return it. - * - * @return \stdClass The status object, with integer $code, string - * $details, and array $metadata members - */ - public function getStatus() - { - $status_event = $this->call->startBatch([ - OP_RECV_STATUS_ON_CLIENT => true, - ]); - - $this->trailing_metadata = $status_event->status->metadata; - - return $status_event->status; - } -} diff --git a/vendor/grpc/grpc/src/lib/CallInvoker.php b/vendor/grpc/grpc/src/lib/CallInvoker.php deleted file mode 100644 index aacd54e..0000000 --- a/vendor/grpc/grpc/src/lib/CallInvoker.php +++ /dev/null @@ -1,32 +0,0 @@ -call->startBatch([ - OP_SEND_INITIAL_METADATA => $metadata, - ]); - } - - /** - * Write a single message to the server. This cannot be called after - * wait is called. - * - * @param ByteBuffer $data The data to write - * @param array $options An array of options, possible keys: - * 'flags' => a number (optional) - */ - public function write($data, array $options = []) - { - $message_array = ['message' => $this->_serializeMessage($data)]; - if (array_key_exists('flags', $options)) { - $message_array['flags'] = $options['flags']; - } - $this->call->startBatch([ - OP_SEND_MESSAGE => $message_array, - ]); - } - - /** - * Wait for the server to respond with data and a status. - * - * @return array [response data, status] - */ - public function wait() - { - $event = $this->call->startBatch([ - OP_SEND_CLOSE_FROM_CLIENT => true, - OP_RECV_INITIAL_METADATA => true, - OP_RECV_MESSAGE => true, - OP_RECV_STATUS_ON_CLIENT => true, - ]); - $this->metadata = $event->metadata; - - $status = $event->status; - $this->trailing_metadata = $status->metadata; - - return [$this->_deserializeResponse($event->message), $status]; - } -} diff --git a/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php b/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php deleted file mode 100644 index 217dafa..0000000 --- a/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php +++ /dev/null @@ -1,46 +0,0 @@ -= 0; $i--) { - $channel = new Internal\InterceptorChannel($channel, $interceptors[$i]); - } - } else { - $channel = new Internal\InterceptorChannel($channel, $interceptors); - } - return $channel; - } -} - diff --git a/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php b/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php deleted file mode 100644 index 2f85c35..0000000 --- a/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php +++ /dev/null @@ -1,76 +0,0 @@ -interceptor = $interceptor; - $this->next = $channel; - } - - public function getNext() - { - return $this->next; - } - - public function getInterceptor() - { - return $this->interceptor; - } - - public function getTarget() - { - return $this->getNext()->getTarget(); - } - - public function watchConnectivityState($new_state, $deadline) - { - return $this->getNext()->watchConnectivityState($new_state, $deadline); - } - - public function getConnectivityState($try_to_connect = false) - { - return $this->getNext()->getConnectivityState($try_to_connect); - } - - public function close() - { - return $this->getNext()->close(); - } -} diff --git a/vendor/grpc/grpc/src/lib/MethodDescriptor.php b/vendor/grpc/grpc/src/lib/MethodDescriptor.php deleted file mode 100644 index c0faf75..0000000 --- a/vendor/grpc/grpc/src/lib/MethodDescriptor.php +++ /dev/null @@ -1,52 +0,0 @@ -service = $service; - $this->method_name = $method_name; - $this->request_type = $request_type; - $this->call_type = $call_type; - } - - public const UNARY_CALL = 0; - public const SERVER_STREAMING_CALL = 1; - public const CLIENT_STREAMING_CALL = 2; - public const BIDI_STREAMING_CALL = 3; - - public $service; - public $method_name; - public $request_type; - public $call_type; -} diff --git a/vendor/grpc/grpc/src/lib/RpcServer.php b/vendor/grpc/grpc/src/lib/RpcServer.php deleted file mode 100644 index c631e58..0000000 --- a/vendor/grpc/grpc/src/lib/RpcServer.php +++ /dev/null @@ -1,151 +0,0 @@ - => MethodDescriptor ] - private $paths_map = []; - - private function waitForNextEvent() - { - return $this->requestCall(); - } - - /** - * Add a service to this server - * - * @param Object $service The service to be added - */ - public function handle($service) - { - $methodDescriptors = $service->getMethodDescriptors(); - $exist_methods = array_intersect_key($this->paths_map, $methodDescriptors); - if (!empty($exist_methods)) { - fwrite(STDERR, "WARNING: " . 'override already registered methods: ' . - implode(', ', array_keys($exist_methods)) . PHP_EOL); - } - - $this->paths_map = array_merge($this->paths_map, $methodDescriptors); - return $this->paths_map; - } - - public function run() - { - $this->start(); - while (true) try { - // This blocks until the server receives a request - $event = $this->waitForNextEvent(); - - $full_path = $event->method; - $context = new ServerContext($event); - $server_writer = new ServerCallWriter($event->call, $context); - - if (!array_key_exists($full_path, $this->paths_map)) { - $context->setStatus(Status::unimplemented()); - $server_writer->finish(); - continue; - }; - - $method_desc = $this->paths_map[$full_path]; - $server_reader = new ServerCallReader( - $event->call, - $method_desc->request_type - ); - - try { - $this->processCall( - $method_desc, - $server_reader, - $server_writer, - $context - ); - } catch (\Exception $e) { - $context->setStatus(Status::status( - STATUS_INTERNAL, - $e->getMessage() - )); - $server_writer->finish(); - } - } catch (\Exception $e) { - fwrite(STDERR, "ERROR: " . $e->getMessage() . PHP_EOL); - exit(1); - } - } - - private function processCall( - MethodDescriptor $method_desc, - ServerCallReader $server_reader, - ServerCallWriter $server_writer, - ServerContext $context - ) { - // Dispatch to actual server logic - switch ($method_desc->call_type) { - case MethodDescriptor::UNARY_CALL: - $request = $server_reader->read(); - $response = - call_user_func( - array($method_desc->service, $method_desc->method_name), - $request ?? new $method_desc->request_type, - $context - ); - $server_writer->finish($response); - break; - case MethodDescriptor::SERVER_STREAMING_CALL: - $request = $server_reader->read(); - call_user_func( - array($method_desc->service, $method_desc->method_name), - $request ?? new $method_desc->request_type, - $server_writer, - $context - ); - break; - case MethodDescriptor::CLIENT_STREAMING_CALL: - $response = call_user_func( - array($method_desc->service, $method_desc->method_name), - $server_reader, - $context - ); - $server_writer->finish($response); - break; - case MethodDescriptor::BIDI_STREAMING_CALL: - call_user_func( - array($method_desc->service, $method_desc->method_name), - $server_reader, - $server_writer, - $context - ); - break; - default: - throw new \Exception(); - } - } -} diff --git a/vendor/grpc/grpc/src/lib/ServerCallReader.php b/vendor/grpc/grpc/src/lib/ServerCallReader.php deleted file mode 100644 index a886448..0000000 --- a/vendor/grpc/grpc/src/lib/ServerCallReader.php +++ /dev/null @@ -1,52 +0,0 @@ -call_ = $call; - $this->request_type_ = $request_type; - } - - public function read() - { - $event = $this->call_->startBatch([ - OP_RECV_MESSAGE => true, - ]); - if ($event->message === null) { - return null; - } - $data = new $this->request_type_; - $data->mergeFromString($event->message); - return $data; - } - - private $call_; - private $request_type_; -} diff --git a/vendor/grpc/grpc/src/lib/ServerCallWriter.php b/vendor/grpc/grpc/src/lib/ServerCallWriter.php deleted file mode 100644 index aceb20c..0000000 --- a/vendor/grpc/grpc/src/lib/ServerCallWriter.php +++ /dev/null @@ -1,109 +0,0 @@ -call_ = $call; - $this->serverContext_ = $serverContext; - } - - public function start( - $data = null, - array $options = [] - ) { - $batch = []; - $this->addSendInitialMetadataOpIfNotSent( - $batch, - $this->serverContext_->initialMetadata() - ); - $this->addSendMessageOpIfHasData($batch, $data, $options); - $this->call_->startBatch($batch); - } - - public function write( - $data, - array $options = [] - ) { - $batch = []; - $this->addSendInitialMetadataOpIfNotSent( - $batch, - $this->serverContext_->initialMetadata() - ); - $this->addSendMessageOpIfHasData($batch, $data, $options); - $this->call_->startBatch($batch); - } - - public function finish( - $data = null, - array $options = [] - ) { - $batch = [ - OP_SEND_STATUS_FROM_SERVER => - $this->serverContext_->status() ?? Status::ok(), - OP_RECV_CLOSE_ON_SERVER => true, - ]; - $this->addSendInitialMetadataOpIfNotSent( - $batch, - $this->serverContext_->initialMetadata() - ); - $this->addSendMessageOpIfHasData($batch, $data, $options); - $this->call_->startBatch($batch); - } - - //////////////////////////// - - private function addSendInitialMetadataOpIfNotSent( - array &$batch, - array $initialMetadata = null - ) { - if (!$this->initialMetadataSent_) { - $batch[OP_SEND_INITIAL_METADATA] = $initialMetadata ?? []; - $this->initialMetadataSent_ = true; - } - } - - private function addSendMessageOpIfHasData( - array &$batch, - $data = null, - array $options = [] - ) { - if ($data) { - $message_array = ['message' => $data->serializeToString()]; - if (array_key_exists('flags', $options)) { - $message_array['flags'] = $options['flags']; - } - $batch[OP_SEND_MESSAGE] = $message_array; - } - } - - private $call_; - private $initialMetadataSent_ = false; - private $serverContext_; -} diff --git a/vendor/grpc/grpc/src/lib/ServerContext.php b/vendor/grpc/grpc/src/lib/ServerContext.php deleted file mode 100644 index 104250e..0000000 --- a/vendor/grpc/grpc/src/lib/ServerContext.php +++ /dev/null @@ -1,76 +0,0 @@ -event = $event; - } - - public function clientMetadata() - { - return $this->event->metadata; - } - public function deadline() - { - return $this->event->absolute_deadline; - } - public function host() - { - return $this->event->host; - } - public function method() - { - return $this->event->method; - } - - public function setInitialMetadata($initialMetadata) - { - $this->initialMetadata_ = $initialMetadata; - } - - public function initialMetadata() - { - return $this->initialMetadata_; - } - - public function setStatus($status) - { - $this->status_ = $status; - } - - public function status() - { - return $this->status_; - } - - private $event; - private $initialMetadata_; - private $status_; -} diff --git a/vendor/grpc/grpc/src/lib/ServerStreamingCall.php b/vendor/grpc/grpc/src/lib/ServerStreamingCall.php deleted file mode 100644 index f8fddfe..0000000 --- a/vendor/grpc/grpc/src/lib/ServerStreamingCall.php +++ /dev/null @@ -1,100 +0,0 @@ - a number (optional) - */ - public function start($data, array $metadata = [], array $options = []) - { - $message_array = ['message' => $this->_serializeMessage($data)]; - if (array_key_exists('flags', $options)) { - $message_array['flags'] = $options['flags']; - } - $this->call->startBatch([ - OP_SEND_INITIAL_METADATA => $metadata, - OP_SEND_MESSAGE => $message_array, - OP_SEND_CLOSE_FROM_CLIENT => true, - ]); - } - - /** - * @return mixed An iterator of response values - */ - public function responses() - { - $batch = [OP_RECV_MESSAGE => true]; - if ($this->metadata === null) { - $batch[OP_RECV_INITIAL_METADATA] = true; - } - $read_event = $this->call->startBatch($batch); - if ($this->metadata === null) { - $this->metadata = $read_event->metadata; - } - $response = $read_event->message; - while ($response !== null) { - yield $this->_deserializeResponse($response); - $response = $this->call->startBatch([ - OP_RECV_MESSAGE => true, - ])->message; - } - } - - /** - * Wait for the server to send the status, and return it. - * - * @return \stdClass The status object, with integer $code, string - * $details, and array $metadata members - */ - public function getStatus() - { - $status_event = $this->call->startBatch([ - OP_RECV_STATUS_ON_CLIENT => true, - ]); - - $this->trailing_metadata = $status_event->status->metadata; - - return $status_event->status; - } - - /** - * @return mixed The metadata sent by the server - */ - public function getMetadata() - { - if ($this->metadata === null) { - $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]); - $this->metadata = $event->metadata; - } - return $this->metadata; - } -} diff --git a/vendor/grpc/grpc/src/lib/Status.php b/vendor/grpc/grpc/src/lib/Status.php deleted file mode 100644 index add208f..0000000 --- a/vendor/grpc/grpc/src/lib/Status.php +++ /dev/null @@ -1,55 +0,0 @@ - $code, - 'details' => $details, - ]; - if ($metadata) { - $status['metadata'] = $metadata; - } - return $status; - } - - public static function ok(array $metadata = null): array - { - return Status::status(STATUS_OK, 'OK', $metadata); - } - public static function unimplemented(): array - { - return Status::status(STATUS_UNIMPLEMENTED, 'UNIMPLEMENTED'); - } -} diff --git a/vendor/grpc/grpc/src/lib/UnaryCall.php b/vendor/grpc/grpc/src/lib/UnaryCall.php deleted file mode 100644 index e849649..0000000 --- a/vendor/grpc/grpc/src/lib/UnaryCall.php +++ /dev/null @@ -1,85 +0,0 @@ - a number (optional) - */ - public function start($data, array $metadata = [], array $options = []) - { - $message_array = ['message' => $this->_serializeMessage($data)]; - if (isset($options['flags'])) { - $message_array['flags'] = $options['flags']; - } - $this->call->startBatch([ - OP_SEND_INITIAL_METADATA => $metadata, - OP_SEND_MESSAGE => $message_array, - OP_SEND_CLOSE_FROM_CLIENT => true, - ]); - } - - /** - * Wait for the server to respond with data and a status. - * - * @return array [response data, status] - */ - public function wait() - { - $batch = [ - OP_RECV_MESSAGE => true, - OP_RECV_STATUS_ON_CLIENT => true, - ]; - if ($this->metadata === null) { - $batch[OP_RECV_INITIAL_METADATA] = true; - } - $event = $this->call->startBatch($batch); - if ($this->metadata === null) { - $this->metadata = $event->metadata; - } - $status = $event->status; - $this->trailing_metadata = $status->metadata; - - return [$this->_deserializeResponse($event->message), $status]; - } - - /** - * @return mixed The metadata sent by the server - */ - public function getMetadata() - { - if ($this->metadata === null) { - $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]); - $this->metadata = $event->metadata; - } - return $this->metadata; - } -} diff --git a/vendor/passkit/vendor/autoload.php b/vendor/passkit/vendor/autoload.php deleted file mode 100644 index f30641a..0000000 --- a/vendor/passkit/vendor/autoload.php +++ /dev/null @@ -1,12 +0,0 @@ -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'); - exit(0); - } -} - -include __DIR__ . '/..'.'/zircote/swagger-php/bin/openapi'; diff --git a/vendor/passkit/vendor/bin/yaml-lint b/vendor/passkit/vendor/bin/yaml-lint deleted file mode 100755 index 9e7a09c..0000000 --- a/vendor/passkit/vendor/bin/yaml-lint +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env php -realpath = realpath($opened_path) ?: $opened_path; - $opened_path = $this->realpath; - $this->handle = fopen($this->realpath, $mode); - $this->position = 0; - - return (bool) $this->handle; - } - - public function stream_read($count) - { - $data = fread($this->handle, $count); - - if ($this->position === 0) { - $data = preg_replace('{^#!.*\r?\n}', '', $data); - } - - $this->position += strlen($data); - - return $data; - } - - public function stream_cast($castAs) - { - return $this->handle; - } - - public function stream_close() - { - fclose($this->handle); - } - - public function stream_lock($operation) - { - return $operation ? flock($this->handle, $operation) : true; - } - - public function stream_seek($offset, $whence) - { - if (0 === fseek($this->handle, $offset, $whence)) { - $this->position = ftell($this->handle); - return true; - } - - return false; - } - - public function stream_tell() - { - return $this->position; - } - - public function stream_eof() - { - return feof($this->handle); - } - - public function stream_stat() - { - return array(); - } - - public function stream_set_option($option, $arg1, $arg2) - { - return true; - } - - public function url_stat($path, $flags) - { - $path = substr($path, 17); - if (file_exists($path)) { - return stat($path); - } - - return false; - } - } - } - - if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { - include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'); - exit(0); - } -} - -include __DIR__ . '/..'.'/symfony/yaml/Resources/bin/yaml-lint'; diff --git a/vendor/passkit/vendor/composer/ClassLoader.php b/vendor/passkit/vendor/composer/ClassLoader.php deleted file mode 100644 index afef3fa..0000000 --- a/vendor/passkit/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,572 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var ?string */ - private $vendorDir; - - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ - private $missingClasses = array(); - - /** @var ?string */ - private $apcuPrefix; - - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - } - - /** - * @return string[] - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array[] - * @psalm-return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return string[] Array of classname => path - * @psalm-return array - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private - */ -function includeFile($file) -{ - include $file; -} diff --git a/vendor/passkit/vendor/composer/InstalledVersions.php b/vendor/passkit/vendor/composer/InstalledVersions.php deleted file mode 100644 index 41bc143..0000000 --- a/vendor/passkit/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,352 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints($constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - $installed[] = self::$installed; - - return $installed; - } -} diff --git a/vendor/passkit/vendor/composer/LICENSE b/vendor/passkit/vendor/composer/LICENSE deleted file mode 100644 index f27399a..0000000 --- a/vendor/passkit/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -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/vendor/passkit/vendor/composer/autoload_classmap.php b/vendor/passkit/vendor/composer/autoload_classmap.php deleted file mode 100644 index 0fb0a2c..0000000 --- a/vendor/passkit/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/composer/InstalledVersions.php', -); diff --git a/vendor/passkit/vendor/composer/autoload_files.php b/vendor/passkit/vendor/composer/autoload_files.php deleted file mode 100644 index 3f9c14a..0000000 --- a/vendor/passkit/vendor/composer/autoload_files.php +++ /dev/null @@ -1,10 +0,0 @@ - $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', -); diff --git a/vendor/passkit/vendor/composer/autoload_namespaces.php b/vendor/passkit/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/passkit/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), - 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), - 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), - 'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'), - 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), - 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), -); diff --git a/vendor/passkit/vendor/composer/autoload_real.php b/vendor/passkit/vendor/composer/autoload_real.php deleted file mode 100644 index 2153148..0000000 --- a/vendor/passkit/vendor/composer/autoload_real.php +++ /dev/null @@ -1,57 +0,0 @@ -register(true); - - $includeFiles = \Composer\Autoload\ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$files; - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire74b98ee2f4bd7384740ddd7a14b12680($fileIdentifier, $file); - } - - return $loader; - } -} - -/** - * @param string $fileIdentifier - * @param string $file - * @return void - */ -function composerRequire74b98ee2f4bd7384740ddd7a14b12680($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } -} diff --git a/vendor/passkit/vendor/composer/autoload_static.php b/vendor/passkit/vendor/composer/autoload_static.php deleted file mode 100644 index d15d9c0..0000000 --- a/vendor/passkit/vendor/composer/autoload_static.php +++ /dev/null @@ -1,84 +0,0 @@ - __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'S' => - array ( - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Component\\Yaml\\' => 23, - 'Symfony\\Component\\Finder\\' => 25, - ), - 'P' => - array ( - 'Psr\\Log\\' => 8, - 'Psr\\Cache\\' => 10, - ), - 'O' => - array ( - 'OpenApi\\' => 8, - ), - 'D' => - array ( - 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Annotations\\' => 28, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Component\\Yaml\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/yaml', - ), - 'Symfony\\Component\\Finder\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/finder', - ), - 'Psr\\Log\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/log/src', - ), - 'Psr\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/cache/src', - ), - 'OpenApi\\' => - array ( - 0 => __DIR__ . '/..' . '/zircote/swagger-php/src', - ), - 'Doctrine\\Common\\Lexer\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', - ), - 'Doctrine\\Common\\Annotations\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', - ), - ); - - public static $classMap = array ( - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit74b98ee2f4bd7384740ddd7a14b12680::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/vendor/passkit/vendor/composer/installed.json b/vendor/passkit/vendor/composer/installed.json deleted file mode 100644 index e25cb28..0000000 --- a/vendor/passkit/vendor/composer/installed.json +++ /dev/null @@ -1,574 +0,0 @@ -{ - "packages": [ - { - "name": "doctrine/annotations", - "version": "1.13.2", - "version_normalized": "1.13.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "time": "2021-08-05T19:00:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" - }, - "install-path": "../doctrine/annotations" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "version_normalized": "1.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "time": "2022-02-28T11:07:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "install-path": "../doctrine/lexer" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-02-03T23:26:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "install-path": "../psr/cache" - }, - { - "name": "psr/log", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-07-14T16:46:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "install-path": "../psr/log" - }, - { - "name": "symfony/finder", - "version": "v6.1.0", - "version_normalized": "6.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "time": "2022-04-15T08:08:08+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/finder" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", - "version_normalized": "1.26.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2022-05-24T11:49:31+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-ctype" - }, - { - "name": "symfony/yaml", - "version": "v6.1.0", - "version_normalized": "6.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2022-04-15T14:25:02+00:00", - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/yaml" - }, - { - "name": "zircote/swagger-php", - "version": "4.4.5", - "version_normalized": "4.4.5.0", - "source": { - "type": "git", - "url": "https://github.com/zircote/swagger-php.git", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "reference": "fd8f1eb8d0165c7a668f307fbccbf3adf33f4017", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.7", - "ext-json": "*", - "php": ">=7.2", - "psr/log": "^1.1 || ^2.0 || 3.0", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "time": "2022-06-02T21:05:02+00:00", - "bin": [ - "bin/openapi" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", - "keywords": [ - "api", - "json", - "rest", - "service discovery" - ], - "support": { - "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.4.5" - }, - "install-path": "../zircote/swagger-php" - } - ], - "dev": true, - "dev-package-names": [] -} diff --git a/vendor/passkit/vendor/composer/installed.php b/vendor/passkit/vendor/composer/installed.php deleted file mode 100644 index 3603bfa..0000000 --- a/vendor/passkit/vendor/composer/installed.php +++ /dev/null @@ -1,95 +0,0 @@ - array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'name' => '__root__', - 'dev' => true, - ), - 'versions' => array( - '__root__' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'dev_requirement' => false, - ), - 'doctrine/annotations' => array( - 'pretty_version' => '1.13.2', - 'version' => '1.13.2.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/annotations', - 'aliases' => array(), - 'reference' => '5b668aef16090008790395c02c893b1ba13f7e08', - 'dev_requirement' => false, - ), - 'doctrine/lexer' => array( - 'pretty_version' => '1.2.3', - 'version' => '1.2.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/lexer', - 'aliases' => array(), - 'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229', - 'dev_requirement' => false, - ), - 'psr/cache' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/cache', - 'aliases' => array(), - 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', - 'dev_requirement' => false, - ), - 'psr/log' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/log', - 'aliases' => array(), - 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', - 'dev_requirement' => false, - ), - 'symfony/finder' => array( - 'pretty_version' => 'v6.1.0', - 'version' => '6.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/finder', - 'aliases' => array(), - 'reference' => '45b8beb69d6eb3b05a65689ebfd4222326773f8f', - 'dev_requirement' => false, - ), - 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', - 'aliases' => array(), - 'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4', - 'dev_requirement' => false, - ), - 'symfony/yaml' => array( - 'pretty_version' => 'v6.1.0', - 'version' => '6.1.0.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/yaml', - 'aliases' => array(), - 'reference' => '84ce4f9d2d68f306f971a39d949d8f4b5550dba2', - 'dev_requirement' => false, - ), - 'zircote/swagger-php' => array( - 'pretty_version' => '4.4.5', - 'version' => '4.4.5.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../zircote/swagger-php', - 'aliases' => array(), - 'reference' => 'fd8f1eb8d0165c7a668f307fbccbf3adf33f4017', - 'dev_requirement' => false, - ), - ), -); diff --git a/vendor/passkit/vendor/composer/platform_check.php b/vendor/passkit/vendor/composer/platform_check.php deleted file mode 100644 index 4c3a5d6..0000000 --- a/vendor/passkit/vendor/composer/platform_check.php +++ /dev/null @@ -1,26 +0,0 @@ -= 80100)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; -} - -if ($issues) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); - } elseif (!headers_sent()) { - echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; - } - } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR - ); -} diff --git a/vendor/passkit/vendor/doctrine/annotations/LICENSE b/vendor/passkit/vendor/doctrine/annotations/LICENSE deleted file mode 100644 index 5e781fc..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2013 Doctrine Project - -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/vendor/passkit/vendor/doctrine/annotations/README.md b/vendor/passkit/vendor/doctrine/annotations/README.md deleted file mode 100644 index c2c7eb7..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Doctrine Annotations - -[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) -[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) -[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) -[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) -[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) - -Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). - -## Documentation - -See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). - -## Contributing - -When making a pull request, make sure your changes follow the -[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/vendor/passkit/vendor/doctrine/annotations/composer.json b/vendor/passkit/vendor/doctrine/annotations/composer.json deleted file mode 100644 index 00d0231..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "doctrine/annotations", - "type": "library", - "description": "Docblock Annotations Parser", - "keywords": ["annotations", "docblock", "parser"], - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "^7.1 || ^8.0", - "ext-tokenizer": "*", - "doctrine/lexer": "1.*", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "config": { - "sort-packages": true - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", - "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" - }, - "files": [ - "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", - "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" - ] - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst deleted file mode 100644 index 2c3c428..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/docs/en/annotations.rst +++ /dev/null @@ -1,252 +0,0 @@ -Handling Annotations -==================== - -There are several different approaches to handling annotations in PHP. -Doctrine Annotations maps docblock annotations to PHP classes. Because -not all docblock annotations are used for metadata purposes a filter is -applied to ignore or skip classes that are not Doctrine annotations. - -Take a look at the following code snippet: - -.. code-block:: php - - namespace MyProject\Entities; - - use Doctrine\ORM\Mapping AS ORM; - use Symfony\Component\Validator\Constraints AS Assert; - - /** - * @author Benjamin Eberlei - * @ORM\Entity - * @MyProject\Annotations\Foobarable - */ - class User - { - /** - * @ORM\Id @ORM\Column @ORM\GeneratedValue - * @dummy - * @var int - */ - private $id; - - /** - * @ORM\Column(type="string") - * @Assert\NotEmpty - * @Assert\Email - * @var string - */ - private $email; - } - -In this snippet you can see a variety of different docblock annotations: - -- Documentation annotations such as ``@var`` and ``@author``. These - annotations are ignored and never considered for throwing an - exception due to wrongly used annotations. -- Annotations imported through use statements. The statement ``use - Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace - available as ``@ORM\ClassName``. Same goes for the import of - ``@Assert``. -- The ``@dummy`` annotation. It is not a documentation annotation and - not ignored. For Doctrine Annotations it is not entirely clear how - to handle this annotation. Depending on the configuration an exception - (unknown annotation) will be thrown when parsing this annotation. -- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. - This is transformed directly into the given class name. - -How are these annotations loaded? From looking at the code you could -guess that the ORM Mapping, Assert Validation and the fully qualified -annotation can just be loaded using -the defined PHP autoloaders. This is not the case however: For error -handling reasons every check for class existence inside the -``AnnotationReader`` sets the second parameter $autoload -of ``class_exists($name, $autoload)`` to false. To work flawlessly the -``AnnotationReader`` requires silent autoloaders which many autoloaders are -not. Silent autoloading is NOT part of the `PSR-0 specification -`_ -for autoloading. - -This is why Doctrine Annotations uses its own autoloading mechanism -through a global registry. If you are wondering about the annotation -registry being global, there is no other way to solve the architectural -problems of autoloading annotation classes in a straightforward fashion. -Additionally if you think about PHP autoloading then you recognize it is -a global as well. - -To anticipate the configuration section, making the above PHP class work -with Doctrine Annotations requires this setup: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); - AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); - AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); - - $reader = new AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('dummy'); - -The second block with the annotation registry calls registers all the -three different annotation namespaces that are used. -Doctrine Annotations saves all its annotations in a single file, that is -why ``AnnotationRegistry#registerFile`` is used in contrast to -``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 -compatible loading mechanism for class to file names. - -In the third block, we create the actual ``AnnotationReader`` instance. -Note that we also add ``dummy`` to the global list of ignored -annotations for which we do not throw exceptions. Setting this is -necessary in our example case, otherwise ``@dummy`` would trigger an -exception to be thrown during the parsing of the docblock of -``MyProject\Entities\User#id``. - -Setup and Configuration ------------------------ - -To use the annotations library is simple, you just need to create a new -``AnnotationReader`` instance: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - -This creates a simple annotation reader with no caching other than in -memory (in php arrays). Since parsing docblocks can be expensive you -should cache this process by using a caching reader. - -To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. -This reader decorates the original reader and stores all annotations in a PSR-6 -cache: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\PsrCachedReader; - - $cache = ... // instantiate a PSR-6 Cache pool - - $reader = new PsrCachedReader( - new AnnotationReader(), - $cache, - $debug = true - ); - -The ``debug`` flag is used here as well to invalidate the cache files -when the PHP class with annotations changed and should be used during -development. - -.. warning :: - - The ``AnnotationReader`` works and caches under the - assumption that all annotations of a doc-block are processed at - once. That means that annotation classes that do not exist and - aren't loaded and cannot be autoloaded (using the - AnnotationRegistry) would never be visible and not accessible if a - cache is used unless the cache is cleared and the annotations - requested again, this time with all annotations defined. - -By default the annotation reader returns a list of annotations with -numeric indexes. If you want your annotations to be indexed by their -class name you can wrap the reader in an ``IndexedReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\IndexedReader; - - $reader = new IndexedReader(new AnnotationReader()); - -.. warning:: - - You should never wrap the indexed reader inside a cached reader, - only the other way around. This way you can re-use the cache with - indexed or numeric keys, otherwise your code may experience failures - due to caching in a numerical or indexed format. - -Registering Annotations -~~~~~~~~~~~~~~~~~~~~~~~ - -As explained in the introduction, Doctrine Annotations uses its own -autoloading mechanism to determine if a given annotation has a -corresponding PHP class that can be autoloaded. For annotation -autoloading you have to configure the -``Doctrine\Common\Annotations\AnnotationRegistry``. There are three -different mechanisms to configure annotation autoloading: - -- Calling ``AnnotationRegistry#registerFile($file)`` to register a file - that contains one or more annotation classes. -- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = - null)`` to register that the given namespace contains annotations and - that their base directory is located at the given $dirs or in the - include path if ``NULL`` is passed. The given directories should *NOT* - be the directory where classes of the namespace are in, but the base - directory of the root namespace. The AnnotationRegistry uses a - namespace to directory separator approach to resolve the correct path. -- Calling ``AnnotationRegistry#registerLoader($callable)`` to register - an autoloader callback. The callback accepts the class as first and - only parameter and has to return ``true`` if the corresponding file - was found and included. - -.. note:: - - Loaders have to fail silently, if a class is not found even if it - matches for example the namespace prefix of that loader. Never is a - loader to throw a warning or exception if the loading failed - otherwise parsing doc block annotations will become a huge pain. - -A sample loader callback could look like: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationRegistry; - use Symfony\Component\ClassLoader\UniversalClassLoader; - - AnnotationRegistry::registerLoader(function($class) { - $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; - - if (file_exists("/my/base/path/" . $file)) { - // file_exists() makes sure that the loader fails silently - require "/my/base/path/" . $file; - } - }); - - $loader = new UniversalClassLoader(); - AnnotationRegistry::registerLoader(array($loader, "loadClass")); - - -Ignoring missing exceptions -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -By default an exception is thrown from the ``AnnotationReader`` if an -annotation was found that: - -- is not part of the list of ignored "documentation annotations"; -- was not imported through a use statement; -- is not a fully qualified class that exists. - -You can disable this behavior for specific names if your docblocks do -not follow strict requirements: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - AnnotationReader::addGlobalIgnoredName('foo'); - -PHP Imports -~~~~~~~~~~~ - -By default the annotation reader parses the use-statement of a php file -to gain access to the import rules and register them for the annotation -processing. Only if you are using PHP Imports can you validate the -correct usage of annotations and throw exceptions if you misspelled an -annotation. This mechanism is enabled by default. - -To ease the upgrade path, we still allow you to disable this mechanism. -Note however that we will remove this in future versions: - -.. code-block:: php - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setEnabledPhpImports(false); diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst deleted file mode 100644 index 11fbe1a..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/docs/en/custom.rst +++ /dev/null @@ -1,443 +0,0 @@ -Custom Annotation Classes -========================= - -If you want to define your own annotations, you just have to group them -in a namespace and register this namespace in the ``AnnotationRegistry``. -Annotation classes have to contain a class-level docblock with the text -``@Annotation``: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** @Annotation */ - class Bar - { - // some code - } - -Inject annotation values ------------------------- - -The annotation parser checks if the annotation constructor has arguments, -if so then it will pass the value array, otherwise it will try to inject -values into public properties directly: - - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * - * Some Annotation using a constructor - */ - class Bar - { - private $foo; - - public function __construct(array $values) - { - $this->foo = $values['foo']; - } - } - - /** - * @Annotation - * - * Some Annotation without a constructor - */ - class Foo - { - public $bar; - } - -Optional: Constructors with Named Parameters --------------------------------------------- - -Starting with Annotations v1.11 a new annotation instantiation strategy -is available that aims at compatibility of Annotation classes with the PHP 8 -attribute feature. You need to declare a constructor with regular parameter -names that match the named arguments in the annotation syntax. - -To enable this feature, you can tag your annotation class with -``@NamedArgumentConstructor`` (available from v1.12) or implement the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface -(available from v1.11 and deprecated as of v1.12). -When using the ``@NamedArgumentConstructor`` tag, the first argument of the -constructor is considered as the default one. - - -Usage with the ``@NamedArgumentContrustor`` tag - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(string $foo) - { - $this->foo = $foo; - } - } - - /** Usable with @Bar(foo="baz") */ - /** Usable with @Bar("baz") */ - -In combination with PHP 8's constructor property promotion feature -you can simplify this to: - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @NamedArgumentConstructor - */ - class Bar implements NamedArgumentConstructorAnnotation - { - public function __construct(private string $foo) {} - } - - -Usage with the -``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` -interface (v1.11, deprecated as of v1.12): -.. code-block:: php - - namespace MyCompany\Annotations; - - use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; - - /** @Annotation */ - class Bar implements NamedArgumentConstructorAnnotation - { - private $foo; - - public function __construct(private string $foo) {} - } - - /** Usable with @Bar(foo="baz") */ - -Annotation Target ------------------ - -``@Target`` indicates the kinds of class elements to which an annotation -type is applicable. Then you could define one or more targets: - -- ``CLASS`` Allowed in class docblocks -- ``PROPERTY`` Allowed in property docblocks -- ``METHOD`` Allowed in the method docblocks -- ``FUNCTION`` Allowed in function dockblocks -- ``ALL`` Allowed in class, property, method and function docblocks -- ``ANNOTATION`` Allowed inside other annotations - -If the annotations is not allowed in the current context, an -``AnnotationException`` is thrown. - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - // some code - } - - /** - * @Annotation - * @Target("CLASS") - */ - class Foo - { - // some code - } - -Attribute types ---------------- - -The annotation parser checks the given parameters using the phpdoc -annotation ``@var``, The data type could be validated using the ``@var`` -annotation on the annotation properties or using the ``@Attributes`` and -``@Attribute`` annotations. - -If the data type does not match you get an ``AnnotationException`` - -.. code-block:: php - - namespace MyCompany\Annotations; - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - */ - class Bar - { - /** @var mixed */ - public $mixed; - - /** @var boolean */ - public $boolean; - - /** @var bool */ - public $bool; - - /** @var float */ - public $float; - - /** @var string */ - public $string; - - /** @var integer */ - public $integer; - - /** @var array */ - public $array; - - /** @var SomeAnnotationClass */ - public $annotation; - - /** @var array */ - public $arrayOfIntegers; - - /** @var array */ - public $arrayOfAnnotations; - } - - /** - * @Annotation - * @Target({"METHOD","PROPERTY"}) - * @Attributes({ - * @Attribute("stringProperty", type = "string"), - * @Attribute("annotProperty", type = "SomeAnnotationClass"), - * }) - */ - class Foo - { - public function __construct(array $values) - { - $this->stringProperty = $values['stringProperty']; - $this->annotProperty = $values['annotProperty']; - } - - // some code - } - -Annotation Required -------------------- - -``@Required`` indicates that the field must be specified when the -annotation is used. If it is not used you get an ``AnnotationException`` -stating that this value can not be null. - -Declaring a required field: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Foo - { - /** @Required */ - public $requiredField; - } - -Usage: - -.. code-block:: php - - /** @Foo(requiredField="value") */ - public $direction; // Valid - - /** @Foo */ - public $direction; // Required field missing, throws an AnnotationException - - -Enumerated values ------------------ - -- An annotation property marked with ``@Enum`` is a field that accepts a - fixed set of scalar values. -- You should use ``@Enum`` fields any time you need to represent fixed - values. -- The annotation parser checks the given value and throws an - ``AnnotationException`` if the value does not match. - - -Declaring an enumerated property: - -.. code-block:: php - - /** - * @Annotation - * @Target("ALL") - */ - class Direction - { - /** - * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) - */ - public $value; - } - -Annotation usage: - -.. code-block:: php - - /** @Direction("NORTH") */ - public $direction; // Valid value - - /** @Direction("NORTHEAST") */ - public $direction; // Invalid value, throws an AnnotationException - - -Constants ---------- - -The use of constants and class constants is available on the annotations -parser. - -The following usages are allowed: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - use MyCompany\Entity\SomeClass; - - /** - * @Foo(PHP_EOL) - * @Bar(Bar::FOO) - * @Foo({SomeClass::FOO, SomeClass::BAR}) - * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) - */ - class User - { - } - - -Be careful with constants and the cache ! - -.. note:: - - The cached reader will not re-evaluate each time an annotation is - loaded from cache. When a constant is changed the cache must be - cleaned. - - -Usage ------ - -Using the library API is simple. Using the annotations described in the -previous section, you can now annotate other classes with your -annotations: - -.. code-block:: php - - namespace MyCompany\Entity; - - use MyCompany\Annotations\Foo; - use MyCompany\Annotations\Bar; - - /** - * @Foo(bar="foo") - * @Bar(foo="bar") - */ - class User - { - } - -Now we can write a script to get the annotations above: - -.. code-block:: php - - $reflClass = new ReflectionClass('MyCompany\Entity\User'); - $classAnnotations = $reader->getClassAnnotations($reflClass); - - foreach ($classAnnotations AS $annot) { - if ($annot instanceof \MyCompany\Annotations\Foo) { - echo $annot->bar; // prints "foo"; - } else if ($annot instanceof \MyCompany\Annotations\Bar) { - echo $annot->foo; // prints "bar"; - } - } - -You have a complete API for retrieving annotation class instances from a -class, property or method docblock: - - -Reader API -~~~~~~~~~~ - -Access all annotations of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotations(\ReflectionClass $class); - -Access one annotation of a class -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getClassAnnotation(\ReflectionClass $class, $annotationName); - -Access all annotations of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotations(\ReflectionMethod $method); - -Access one annotation of a method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); - -Access all annotations of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotations(\ReflectionProperty $property); - -Access one annotation of a property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); - -Access all annotations of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotations(\ReflectionFunction $property); - -Access one annotation of a function -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - - public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst deleted file mode 100644 index 95476c3..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/docs/en/index.rst +++ /dev/null @@ -1,101 +0,0 @@ -Introduction -============ - -Doctrine Annotations allows to implement custom annotation -functionality for PHP classes and functions. - -.. code-block:: php - - class Foo - { - /** - * @MyAnnotation(myProperty="value") - */ - private $bar; - } - -Annotations aren't implemented in PHP itself which is why this component -offers a way to use the PHP doc-blocks as a place for the well known -annotation syntax using the ``@`` char. - -Annotations in Doctrine are used for the ORM configuration to build the -class mapping, but it can be used in other projects for other purposes -too. - -Installation -============ - -You can install the Annotation component with composer: - -.. code-block:: - -   $ composer require doctrine/annotations - -Create an annotation class -========================== - -An annotation class is a representation of the later used annotation -configuration in classes. The annotation class of the previous example -looks like this: - -.. code-block:: php - - /** - * @Annotation - */ - final class MyAnnotation - { - public $myProperty; - } - -The annotation class is declared as an annotation by ``@Annotation``. - -:ref:`Read more about custom annotations. ` - -Reading annotations -=================== - -The access to the annotations happens by reflection of the class or function -containing them. There are multiple reader-classes implementing the -``Doctrine\Common\Annotations\Reader`` interface, that can access the -annotations of a class. A common one is -``Doctrine\Common\Annotations\AnnotationReader``: - -.. code-block:: php - - use Doctrine\Common\Annotations\AnnotationReader; - use Doctrine\Common\Annotations\AnnotationRegistry; - - // Deprecated and will be removed in 2.0 but currently needed - AnnotationRegistry::registerLoader('class_exists'); - - $reflectionClass = new ReflectionClass(Foo::class); - $property = $reflectionClass->getProperty('bar'); - - $reader = new AnnotationReader(); - $myAnnotation = $reader->getPropertyAnnotation( - $property, - MyAnnotation::class - ); - - echo $myAnnotation->myProperty; // result: "value" - -Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works -if you already have an autoloader configured (i.e. composer autoloader). -Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. - -A reader has multiple methods to access the annotations of a class or -function. - -:ref:`Read more about handling annotations. ` - -IDE Support ------------ - -Some IDEs already provide support for annotations: - -- Eclipse via the `Symfony2 Plugin `_ -- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ - -.. _Read more about handling annotations.: annotations -.. _Read more about custom annotations.: custom diff --git a/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst b/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst deleted file mode 100644 index 6f5d13c..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/docs/en/sidebar.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. toctree:: - :depth: 3 - - index - annotations - custom diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php deleted file mode 100644 index 750270e..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php +++ /dev/null @@ -1,59 +0,0 @@ - $data Key-value for properties to be defined in this class. - */ - final public function __construct(array $data) - { - foreach ($data as $key => $value) { - $this->$key = $value; - } - } - - /** - * Error handler for unknown property accessor in Annotation class. - * - * @param string $name Unknown property name. - * - * @throws BadMethodCallException - */ - public function __get($name) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } - - /** - * Error handler for unknown property mutator in Annotation class. - * - * @param string $name Unknown property name. - * @param mixed $value Property value. - * - * @throws BadMethodCallException - */ - public function __set($name, $value) - { - throw new BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) - ); - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php deleted file mode 100644 index b1f8514..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php +++ /dev/null @@ -1,21 +0,0 @@ - */ - public $value; -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php deleted file mode 100644 index 35d6410..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php +++ /dev/null @@ -1,69 +0,0 @@ - */ - public $value; - - /** - * Literal target declaration. - * - * @var mixed[] - */ - public $literal; - - /** - * @throws InvalidArgumentException - * - * @phpstan-param array{literal?: mixed[], value: list} $values - */ - public function __construct(array $values) - { - if (! isset($values['literal'])) { - $values['literal'] = []; - } - - foreach ($values['value'] as $var) { - if (! is_scalar($var)) { - throw new InvalidArgumentException(sprintf( - '@Enum supports only scalar values "%s" given.', - is_object($var) ? get_class($var) : gettype($var) - )); - } - } - - foreach ($values['literal'] as $key => $var) { - if (! in_array($key, $values['value'])) { - throw new InvalidArgumentException(sprintf( - 'Undefined enumerator value "%s" for literal "%s".', - $key, - $var - )); - } - } - - $this->value = $values['value']; - $this->literal = $values['literal']; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php deleted file mode 100644 index ae60f7d..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php +++ /dev/null @@ -1,43 +0,0 @@ - */ - public $names; - - /** - * @throws RuntimeException - * - * @phpstan-param array{value: string|list} $values - */ - public function __construct(array $values) - { - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new RuntimeException(sprintf( - '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', - json_encode($values['value']) - )); - } - - $this->names = $values['value']; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php deleted file mode 100644 index 1690601..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php +++ /dev/null @@ -1,13 +0,0 @@ - */ - private static $map = [ - 'ALL' => self::TARGET_ALL, - 'CLASS' => self::TARGET_CLASS, - 'METHOD' => self::TARGET_METHOD, - 'PROPERTY' => self::TARGET_PROPERTY, - 'FUNCTION' => self::TARGET_FUNCTION, - 'ANNOTATION' => self::TARGET_ANNOTATION, - ]; - - /** @phpstan-var list */ - public $value; - - /** - * Targets as bitmask. - * - * @var int - */ - public $targets; - - /** - * Literal target declaration. - * - * @var string - */ - public $literal; - - /** - * @throws InvalidArgumentException - * - * @phpstan-param array{value?: string|list} $values - */ - public function __construct(array $values) - { - if (! isset($values['value'])) { - $values['value'] = null; - } - - if (is_string($values['value'])) { - $values['value'] = [$values['value']]; - } - - if (! is_array($values['value'])) { - throw new InvalidArgumentException( - sprintf( - '@Target expects either a string value, or an array of strings, "%s" given.', - is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) - ) - ); - } - - $bitmask = 0; - foreach ($values['value'] as $literal) { - if (! isset(self::$map[$literal])) { - throw new InvalidArgumentException( - sprintf( - 'Invalid Target "%s". Available targets: [%s]', - $literal, - implode(', ', array_keys(self::$map)) - ) - ); - } - - $bitmask |= self::$map[$literal]; - } - - $this->targets = $bitmask; - $this->value = $values['value']; - $this->literal = implode(', ', $this->value); - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php deleted file mode 100644 index b1ea64e..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php +++ /dev/null @@ -1,171 +0,0 @@ - $available - */ - public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) - { - return new self(sprintf( - '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', - $attributeName, - $annotationName, - $context, - implode(', ', $available), - is_object($given) ? get_class($given) : $given - )); - } - - /** - * @return AnnotationException - */ - public static function optimizerPlusSaveComments() - { - return new self( - 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' - ); - } - - /** - * @return AnnotationException - */ - public static function optimizerPlusLoadComments() - { - return new self( - 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' - ); - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php deleted file mode 100644 index 1f538ee..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php +++ /dev/null @@ -1,389 +0,0 @@ - - */ - private static $globalImports = [ - 'ignoreannotation' => Annotation\IgnoreAnnotation::class, - ]; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNamespaces = []; - - /** - * Add a new annotation to the globally ignored annotation names with regard to exception handling. - * - * @param string $name - */ - public static function addGlobalIgnoredName($name) - { - self::$globalIgnoredNames[$name] = true; - } - - /** - * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. - * - * @param string $namespace - */ - public static function addGlobalIgnoredNamespace($namespace) - { - self::$globalIgnoredNamespaces[$namespace] = true; - } - - /** - * Annotations parser. - * - * @var DocParser - */ - private $parser; - - /** - * Annotations parser used to collect parsing metadata. - * - * @var DocParser - */ - private $preParser; - - /** - * PHP parser used to collect imports. - * - * @var PhpParser - */ - private $phpParser; - - /** - * In-memory cache mechanism to store imported annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $imports = []; - - /** - * In-memory cache mechanism to store ignored annotations per class. - * - * @psalm-var array<'class'|'function', array>> - */ - private $ignoredAnnotationNames = []; - - /** - * Initializes a new AnnotationReader. - * - * @throws AnnotationException - */ - public function __construct(?DocParser $parser = null) - { - if ( - extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || - ini_get('opcache.save_comments') === '0') - ) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { - throw AnnotationException::optimizerPlusSaveComments(); - } - - // Make sure that the IgnoreAnnotation annotation is loaded - class_exists(IgnoreAnnotation::class); - - $this->parser = $parser ?: new DocParser(); - - $this->preParser = new DocParser(); - - $this->preParser->setImports(self::$globalImports); - $this->preParser->setIgnoreNotImportedAnnotations(true); - $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); - - $this->phpParser = new PhpParser(); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $this->parser->setTarget(Target::TARGET_CLASS); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $context = 'property ' . $class->getName() . '::$' . $property->getName(); - - $this->parser->setTarget(Target::TARGET_PROPERTY); - $this->parser->setImports($this->getPropertyImports($property)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($property->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - - $this->parser->setTarget(Target::TARGET_METHOD); - $this->parser->setImports($this->getMethodImports($method)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($method->getDocComment(), $context); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets the annotations applied to a function. - * - * @phpstan-return list An array of Annotations. - */ - public function getFunctionAnnotations(ReflectionFunction $function): array - { - $context = 'function ' . $function->getName(); - - $this->parser->setTarget(Target::TARGET_FUNCTION); - $this->parser->setImports($this->getImports($function)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); - $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); - - return $this->parser->parse($function->getDocComment(), $context); - } - - /** - * Gets a function annotation. - * - * @return object|null The Annotation or NULL, if the requested annotation does not exist. - */ - public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) - { - $annotations = $this->getFunctionAnnotations($function); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Returns the ignored annotations for the given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getIgnoredAnnotationNames($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->ignoredAnnotationNames[$type][$name])) { - return $this->ignoredAnnotationNames[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->ignoredAnnotationNames[$type][$name]; - } - - /** - * Retrieves imports for a class or a function. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @return array - */ - private function getImports($reflection): array - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - if (isset($this->imports[$type][$name])) { - return $this->imports[$type][$name]; - } - - $this->collectParsingMetadata($reflection); - - return $this->imports[$type][$name]; - } - - /** - * Retrieves imports for methods. - * - * @return array - */ - private function getMethodImports(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if ( - ! $trait->hasMethod($method->getName()) - || $trait->getFileName() !== $method->getFileName() - ) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Retrieves imports for properties. - * - * @return array - */ - private function getPropertyImports(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $classImports = $this->getImports($class); - - $traitImports = []; - - foreach ($class->getTraits() as $trait) { - if (! $trait->hasProperty($property->getName())) { - continue; - } - - $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); - } - - return array_merge($classImports, $traitImports); - } - - /** - * Collects parsing metadata for a given class or function. - * - * @param ReflectionClass|ReflectionFunction $reflection - */ - private function collectParsingMetadata($reflection): void - { - $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; - $name = $reflection->getName(); - - $ignoredAnnotationNames = self::$globalIgnoredNames; - $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); - - foreach ($annotations as $annotation) { - if (! ($annotation instanceof IgnoreAnnotation)) { - continue; - } - - foreach ($annotation->names as $annot) { - $ignoredAnnotationNames[$annot] = true; - } - } - - $this->imports[$type][$name] = array_merge( - self::$globalImports, - $this->phpParser->parseUseStatements($reflection), - [ - '__NAMESPACE__' => $reflection->getNamespaceName(), - 'self' => $name, - ] - ); - - $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php deleted file mode 100644 index 259d497..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php +++ /dev/null @@ -1,190 +0,0 @@ -|null $dirs - */ - public static function registerAutoloadNamespace(string $namespace, $dirs = null): void - { - self::$autoloadNamespaces[$namespace] = $dirs; - } - - /** - * Registers multiple namespaces. - * - * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - * - * @param string[][]|string[]|null[] $namespaces indexed by namespace name - */ - public static function registerAutoloadNamespaces(array $namespaces): void - { - self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); - } - - /** - * Registers an autoloading callable for annotations, much like spl_autoload_register(). - * - * NOTE: These class loaders HAVE to be silent when a class was not found! - * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerLoader(callable $callable): void - { - // Reset our static cache now that we have a new loader to work with - self::$failedToAutoload = []; - self::$loaders[] = $callable; - } - - /** - * Registers an autoloading callable for annotations, if it is not already registered - * - * @deprecated This method is deprecated and will be removed in - * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. - */ - public static function registerUniqueLoader(callable $callable): void - { - if (in_array($callable, self::$loaders, true)) { - return; - } - - self::registerLoader($callable); - } - - /** - * Autoloads an annotation class silently. - */ - public static function loadAnnotationClass(string $class): bool - { - if (class_exists($class, false)) { - return true; - } - - if (array_key_exists($class, self::$failedToAutoload)) { - return false; - } - - foreach (self::$autoloadNamespaces as $namespace => $dirs) { - if (strpos($class, $namespace) !== 0) { - continue; - } - - $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; - - if ($dirs === null) { - $path = stream_resolve_include_path($file); - if ($path) { - require $path; - - return true; - } - } else { - foreach ((array) $dirs as $dir) { - if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { - require $dir . DIRECTORY_SEPARATOR . $file; - - return true; - } - } - } - } - - foreach (self::$loaders as $loader) { - if ($loader($class) === true) { - return true; - } - } - - if ( - self::$loaders === [] && - self::$autoloadNamespaces === [] && - self::$registerFileUsed === false && - class_exists($class) - ) { - return true; - } - - self::$failedToAutoload[$class] = null; - - return false; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php deleted file mode 100644 index c036b2d..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php +++ /dev/null @@ -1,268 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - /** - * @param bool $debug - */ - public function __construct(Reader $reader, Cache $cache, $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getClassAnnotations($class); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getPropertyAnnotations($property); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class); - if ($annots === false) { - $annots = $this->delegate->getMethodAnnotations($method); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** - * Fetches a value from the cache. - * - * @param string $cacheKey The cache key. - * - * @return mixed The cached value or false when the value is not in cache. - */ - private function fetchFromCache($cacheKey, ReflectionClass $class) - { - $data = $this->cache->fetch($cacheKey); - if ($data !== false) { - if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { - return $data; - } - } - - return false; - } - - /** - * Saves a value to the cache. - * - * @param string $cacheKey The cache key. - * @param mixed $value The value. - * - * @return void - */ - private function saveToCache($cacheKey, $value) - { - $this->cache->save($cacheKey, $value); - if (! $this->debug) { - return; - } - - $this->cache->save('[C]' . $cacheKey, time()); - } - - /** - * Checks if the cache is fresh. - * - * @param string $cacheKey - * - * @return bool - */ - private function isCacheFresh($cacheKey, ReflectionClass $class) - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php deleted file mode 100644 index f6567c5..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php +++ /dev/null @@ -1,129 +0,0 @@ -= 100 - public const T_IDENTIFIER = 100; - public const T_AT = 101; - public const T_CLOSE_CURLY_BRACES = 102; - public const T_CLOSE_PARENTHESIS = 103; - public const T_COMMA = 104; - public const T_EQUALS = 105; - public const T_FALSE = 106; - public const T_NAMESPACE_SEPARATOR = 107; - public const T_OPEN_CURLY_BRACES = 108; - public const T_OPEN_PARENTHESIS = 109; - public const T_TRUE = 110; - public const T_NULL = 111; - public const T_COLON = 112; - public const T_MINUS = 113; - - /** @var array */ - protected $noCase = [ - '@' => self::T_AT, - ',' => self::T_COMMA, - '(' => self::T_OPEN_PARENTHESIS, - ')' => self::T_CLOSE_PARENTHESIS, - '{' => self::T_OPEN_CURLY_BRACES, - '}' => self::T_CLOSE_CURLY_BRACES, - '=' => self::T_EQUALS, - ':' => self::T_COLON, - '-' => self::T_MINUS, - '\\' => self::T_NAMESPACE_SEPARATOR, - ]; - - /** @var array */ - protected $withCase = [ - 'true' => self::T_TRUE, - 'false' => self::T_FALSE, - 'null' => self::T_NULL, - ]; - - /** - * Whether the next token starts immediately, or if there were - * non-captured symbols before that - */ - public function nextTokenIsAdjacent(): bool - { - return $this->token === null - || ($this->lookahead !== null - && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); - } - - /** - * {@inheritdoc} - */ - protected function getCatchablePatterns() - { - return [ - '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', - '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', - '"(?:""|[^"])*+"', - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNonCatchablePatterns() - { - return ['\s+', '\*+', '(.)']; - } - - /** - * {@inheritdoc} - */ - protected function getType(&$value) - { - $type = self::T_NONE; - - if ($value[0] === '"') { - $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); - - return self::T_STRING; - } - - if (isset($this->noCase[$value])) { - return $this->noCase[$value]; - } - - if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { - return self::T_IDENTIFIER; - } - - $lowerValue = strtolower($value); - - if (isset($this->withCase[$lowerValue])) { - return $this->withCase[$lowerValue]; - } - - // Checking numeric value - if (is_numeric($value)) { - return strpos($value, '.') !== false || stripos($value, 'e') !== false - ? self::T_FLOAT : self::T_INTEGER; - } - - return $type; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php deleted file mode 100644 index ae530c5..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php +++ /dev/null @@ -1,1459 +0,0 @@ - - */ - private static $classIdentifiers = [ - DocLexer::T_IDENTIFIER, - DocLexer::T_TRUE, - DocLexer::T_FALSE, - DocLexer::T_NULL, - ]; - - /** - * The lexer. - * - * @var DocLexer - */ - private $lexer; - - /** - * Current target context. - * - * @var int - */ - private $target; - - /** - * Doc parser used to collect annotation target. - * - * @var DocParser - */ - private static $metadataParser; - - /** - * Flag to control if the current annotation is nested or not. - * - * @var bool - */ - private $isNestedAnnotation = false; - - /** - * Hashmap containing all use-statements that are to be used when parsing - * the given doc block. - * - * @var array - */ - private $imports = []; - - /** - * This hashmap is used internally to cache results of class_exists() - * look-ups. - * - * @var array - */ - private $classExists = []; - - /** - * Whether annotations that have not been imported should be ignored. - * - * @var bool - */ - private $ignoreNotImportedAnnotations = false; - - /** - * An array of default namespaces if operating in simple mode. - * - * @var string[] - */ - private $namespaces = []; - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names must be the raw names as used in the class, not the fully qualified - * - * @var bool[] indexed by annotation name - */ - private $ignoredAnnotationNames = []; - - /** - * A list with annotations in namespaced format - * that are not causing exceptions when not resolved to an annotation class. - * - * @var bool[] indexed by namespace name - */ - private $ignoredAnnotationNamespaces = []; - - /** @var string */ - private $context = ''; - - /** - * Hash-map for caching annotation metadata. - * - * @var array - */ - private static $annotationMetadata = [ - Annotation\Target::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'properties' => [], - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'attribute_types' => [ - 'value' => [ - 'required' => false, - 'type' => 'array', - 'array_type' => 'string', - 'value' => 'array', - ], - ], - ], - Annotation\Attribute::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_ANNOTATION', - 'targets' => Target::TARGET_ANNOTATION, - 'default_property' => 'name', - 'properties' => [ - 'name' => 'name', - 'type' => 'type', - 'required' => 'required', - ], - 'attribute_types' => [ - 'value' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'type' => [ - 'required' => true, - 'type' => 'string', - 'value' => 'string', - ], - 'required' => [ - 'required' => false, - 'type' => 'boolean', - 'value' => 'boolean', - ], - ], - ], - Annotation\Attributes::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - 'array_type' => Annotation\Attribute::class, - 'value' => 'array<' . Annotation\Attribute::class . '>', - ], - ], - ], - Annotation\Enum::class => [ - 'is_annotation' => true, - 'has_constructor' => true, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_PROPERTY', - 'targets' => Target::TARGET_PROPERTY, - 'default_property' => 'value', - 'properties' => ['value' => 'value'], - 'attribute_types' => [ - 'value' => [ - 'type' => 'array', - 'required' => true, - ], - 'literal' => [ - 'type' => 'array', - 'required' => false, - ], - ], - ], - Annotation\NamedArgumentConstructor::class => [ - 'is_annotation' => true, - 'has_constructor' => false, - 'has_named_argument_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => null, - 'properties' => [], - 'attribute_types' => [], - ], - ]; - - /** - * Hash-map for handle types declaration. - * - * @var array - */ - private static $typeMap = [ - 'float' => 'double', - 'bool' => 'boolean', - // allow uppercase Boolean in honor of George Boole - 'Boolean' => 'boolean', - 'int' => 'integer', - ]; - - /** - * Constructs a new DocParser. - */ - public function __construct() - { - $this->lexer = new DocLexer(); - } - - /** - * Sets the annotation names that are ignored during the parsing process. - * - * The names are supposed to be the raw names as used in the class, not the - * fully qualified class names. - * - * @param bool[] $names indexed by annotation name - * - * @return void - */ - public function setIgnoredAnnotationNames(array $names) - { - $this->ignoredAnnotationNames = $names; - } - - /** - * Sets the annotation namespaces that are ignored during the parsing process. - * - * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name - * - * @return void - */ - public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) - { - $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; - } - - /** - * Sets ignore on not-imported annotations. - * - * @param bool $bool - * - * @return void - */ - public function setIgnoreNotImportedAnnotations($bool) - { - $this->ignoreNotImportedAnnotations = (bool) $bool; - } - - /** - * Sets the default namespaces. - * - * @param string $namespace - * - * @return void - * - * @throws RuntimeException - */ - public function addNamespace($namespace) - { - if ($this->imports) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->namespaces[] = $namespace; - } - - /** - * Sets the imports. - * - * @param array $imports - * - * @return void - * - * @throws RuntimeException - */ - public function setImports(array $imports) - { - if ($this->namespaces) { - throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - - $this->imports = $imports; - } - - /** - * Sets current target context as bitmask. - * - * @param int $target - * - * @return void - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Parses the given docblock string for annotations. - * - * @param string $input The docblock string to parse. - * @param string $context The parsing context. - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. - */ - public function parse($input, $context = '') - { - $pos = $this->findInitialTokenPosition($input); - if ($pos === null) { - return []; - } - - $this->context = $context; - - $this->lexer->setInput(trim(substr($input, $pos), '* /')); - $this->lexer->moveNext(); - - return $this->Annotations(); - } - - /** - * Finds the first valid annotation - * - * @param string $input The docblock string to parse - */ - private function findInitialTokenPosition($input): ?int - { - $pos = 0; - - // search for first valid annotation - while (($pos = strpos($input, '@', $pos)) !== false) { - $preceding = substr($input, $pos - 1, 1); - - // if the @ is preceded by a space, a tab or * it is valid - if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { - return $pos; - } - - $pos++; - } - - return null; - } - - /** - * Attempts to match the given token with the current lookahead token. - * If they match, updates the lookahead token; otherwise raises a syntax error. - * - * @param int $token Type of token. - * - * @return bool True if tokens match; false otherwise. - * - * @throws AnnotationException - */ - private function match(int $token): bool - { - if (! $this->lexer->isNextToken($token)) { - throw $this->syntaxError($this->lexer->getLiteral($token)); - } - - return $this->lexer->moveNext(); - } - - /** - * Attempts to match the current lookahead token with any of the given tokens. - * - * If any of them matches, this method updates the lookahead token; otherwise - * a syntax error is raised. - * - * @throws AnnotationException - * - * @phpstan-param list $tokens - */ - private function matchAny(array $tokens): bool - { - if (! $this->lexer->isNextTokenAny($tokens)) { - throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); - } - - return $this->lexer->moveNext(); - } - - /** - * Generates a new syntax error. - * - * @param string $expected Expected string. - * @param mixed[]|null $token Optional token. - */ - private function syntaxError(string $expected, ?array $token = null): AnnotationException - { - if ($token === null) { - $token = $this->lexer->lookahead; - } - - $message = sprintf('Expected %s, got ', $expected); - $message .= $this->lexer->lookahead === null - ? 'end of string' - : sprintf("'%s' at position %s", $token['value'], $token['position']); - - if (strlen($this->context)) { - $message .= ' in ' . $this->context; - } - - $message .= '.'; - - return AnnotationException::syntaxError($message); - } - - /** - * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism - * but uses the {@link AnnotationRegistry} to load classes. - * - * @param class-string $fqcn - */ - private function classExists(string $fqcn): bool - { - if (isset($this->classExists[$fqcn])) { - return $this->classExists[$fqcn]; - } - - // first check if the class already exists, maybe loaded through another AnnotationReader - if (class_exists($fqcn, false)) { - return $this->classExists[$fqcn] = true; - } - - // final check, does this class exist? - return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); - } - - /** - * Collects parsing metadata for a given annotation class - * - * @param class-string $name The annotation name - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function collectAnnotationMetadata(string $name): void - { - if (self::$metadataParser === null) { - self::$metadataParser = new self(); - - self::$metadataParser->setIgnoreNotImportedAnnotations(true); - self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); - self::$metadataParser->setImports([ - 'enum' => Enum::class, - 'target' => Target::class, - 'attribute' => Attribute::class, - 'attributes' => Attributes::class, - 'namedargumentconstructor' => NamedArgumentConstructor::class, - ]); - - // Make sure that annotations from metadata are loaded - class_exists(Enum::class); - class_exists(Target::class); - class_exists(Attribute::class); - class_exists(Attributes::class); - class_exists(NamedArgumentConstructor::class); - } - - $class = new ReflectionClass($name); - $docComment = $class->getDocComment(); - - // Sets default values for annotation metadata - $constructor = $class->getConstructor(); - $metadata = [ - 'default_property' => null, - 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, - 'constructor_args' => [], - 'properties' => [], - 'property_types' => [], - 'attribute_types' => [], - 'targets_literal' => null, - 'targets' => Target::TARGET_ALL, - 'is_annotation' => strpos($docComment, '@Annotation') !== false, - ]; - - $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] - && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); - - // verify that the class is really meant to be an annotation - if ($metadata['is_annotation']) { - self::$metadataParser->setTarget(Target::TARGET_CLASS); - - foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { - if ($annotation instanceof Target) { - $metadata['targets'] = $annotation->targets; - $metadata['targets_literal'] = $annotation->literal; - - continue; - } - - if ($annotation instanceof NamedArgumentConstructor) { - $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; - if ($metadata['has_named_argument_constructor']) { - // choose the first argument as the default property - $metadata['default_property'] = $constructor->getParameters()[0]->getName(); - } - } - - if (! ($annotation instanceof Attributes)) { - continue; - } - - foreach ($annotation->value as $attribute) { - $this->collectAttributeTypeMetadata($metadata, $attribute); - } - } - - // if not has a constructor will inject values into public properties - if ($metadata['has_constructor'] === false) { - // collect all public properties - foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { - $metadata['properties'][$property->name] = $property->name; - - $propertyComment = $property->getDocComment(); - if ($propertyComment === false) { - continue; - } - - $attribute = new Attribute(); - - $attribute->required = (strpos($propertyComment, '@Required') !== false); - $attribute->name = $property->name; - $attribute->type = (strpos($propertyComment, '@var') !== false && - preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) - ? $matches[1] - : 'mixed'; - - $this->collectAttributeTypeMetadata($metadata, $attribute); - - // checks if the property has @Enum - if (strpos($propertyComment, '@Enum') === false) { - continue; - } - - $context = 'property ' . $class->name . '::$' . $property->name; - - self::$metadataParser->setTarget(Target::TARGET_PROPERTY); - - foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { - if (! $annotation instanceof Enum) { - continue; - } - - $metadata['enum'][$property->name]['value'] = $annotation->value; - $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) - ? $annotation->literal - : $annotation->value; - } - } - - // choose the first property as default property - $metadata['default_property'] = reset($metadata['properties']); - } elseif ($metadata['has_named_argument_constructor']) { - foreach ($constructor->getParameters() as $parameter) { - $metadata['constructor_args'][$parameter->getName()] = [ - 'position' => $parameter->getPosition(), - 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, - ]; - } - } - } - - self::$annotationMetadata[$name] = $metadata; - } - - /** - * Collects parsing metadata for a given attribute. - * - * @param mixed[] $metadata - */ - private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void - { - // handle internal type declaration - $type = self::$typeMap[$attribute->type] ?? $attribute->type; - - // handle the case if the property type is mixed - if ($type === 'mixed') { - return; - } - - // Evaluate type - $pos = strpos($type, '<'); - if ($pos !== false) { - // Checks if the property has array - $arrayType = substr($type, $pos + 1, -1); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } else { - // Checks if the property has type[] - $pos = strrpos($type, '['); - if ($pos !== false) { - $arrayType = substr($type, 0, $pos); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; - } - } - - $metadata['attribute_types'][$attribute->name]['type'] = $type; - $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; - $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; - } - - /** - * Annotations ::= Annotation {[ "*" ]* [Annotation]}* - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return list - */ - private function Annotations(): array - { - $annotations = []; - - while ($this->lexer->lookahead !== null) { - if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is preceded by non-catchable pattern - if ( - $this->lexer->token !== null && - $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( - $this->lexer->token['value'] - ) - ) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is followed by either a namespace separator, or - // an identifier token - $peek = $this->lexer->glimpse(); - if ( - ($peek === null) - || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( - $peek['type'], - self::$classIdentifiers, - true - )) - || $peek['position'] !== $this->lexer->lookahead['position'] + 1 - ) { - $this->lexer->moveNext(); - continue; - } - - $this->isNestedAnnotation = false; - $annot = $this->Annotation(); - if ($annot === false) { - continue; - } - - $annotations[] = $annot; - } - - return $annotations; - } - - /** - * Annotation ::= "@" AnnotationName MethodCall - * AnnotationName ::= QualifiedName | SimpleName - * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName - * NameSpacePart ::= identifier | null | false | true - * SimpleName ::= identifier | null | false | true - * - * @return object|false False if it is not a valid annotation. - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Annotation() - { - $this->match(DocLexer::T_AT); - - // check if we have an annotation - $name = $this->Identifier(); - - if ( - $this->lexer->isNextToken(DocLexer::T_MINUS) - && $this->lexer->nextTokenIsAdjacent() - ) { - // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded - return false; - } - - // only process names which are not fully qualified, yet - // fully qualified names must start with a \ - $originalName = $name; - - if ($name[0] !== '\\') { - $pos = strpos($name, '\\'); - $alias = ($pos === false) ? $name : substr($name, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - if ($this->namespaces) { - foreach ($this->namespaces as $namespace) { - if ($this->classExists($namespace . '\\' . $name)) { - $name = $namespace . '\\' . $name; - $found = true; - break; - } - } - } elseif (isset($this->imports[$loweredAlias])) { - $namespace = ltrim($this->imports[$loweredAlias], '\\'); - $name = ($pos !== false) - ? $namespace . substr($name, $pos) - : $namespace; - $found = $this->classExists($name); - } elseif ( - ! isset($this->ignoredAnnotationNames[$name]) - && isset($this->imports['__NAMESPACE__']) - && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) - ) { - $name = $this->imports['__NAMESPACE__'] . '\\' . $name; - $found = true; - } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { - $found = true; - } - - if (! $found) { - if ($this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? -EXCEPTION - , - $name, - $this->context - )); - } - } - - $name = ltrim($name, '\\'); - - if (! $this->classExists($name)) { - throw AnnotationException::semanticalError(sprintf( - 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', - $name, - $this->context - )); - } - - // at this point, $name contains the fully qualified class name of the - // annotation, and it is also guaranteed that this class exists, and - // that it is loaded - - // collects the metadata annotation only if there is not yet - if (! isset(self::$annotationMetadata[$name])) { - $this->collectAnnotationMetadata($name); - } - - // verify that the class is really meant to be an annotation and not just any ordinary class - if (self::$annotationMetadata[$name]['is_annotation'] === false) { - if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { - return false; - } - - throw AnnotationException::semanticalError(sprintf( - <<<'EXCEPTION' -The class "%s" is not annotated with @Annotation. -Are you sure this class can be used as annotation? -If so, then you need to add @Annotation to the _class_ doc comment of "%s". -If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. -EXCEPTION - , - $name, - $name, - $originalName, - $this->context - )); - } - - //if target is nested annotation - $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; - - // Next will be nested - $this->isNestedAnnotation = true; - - //if annotation does not support current target - if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { - throw AnnotationException::semanticalError( - sprintf( - <<<'EXCEPTION' -Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. -EXCEPTION - , - $originalName, - $this->context, - self::$annotationMetadata[$name]['targets_literal'] - ) - ); - } - - $arguments = $this->MethodCall(); - $values = $this->resolvePositionalValues($arguments, $name); - - if (isset(self::$annotationMetadata[$name]['enum'])) { - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { - // checks if the attribute is a valid enumerator - if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { - throw AnnotationException::enumeratorError( - $property, - $name, - $this->context, - $enum['literal'], - $values[$property] - ); - } - } - } - - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { - if ( - $property === self::$annotationMetadata[$name]['default_property'] - && ! isset($values[$property]) && isset($values['value']) - ) { - $property = 'value'; - } - - // handle a not given attribute or null value - if (! isset($values[$property])) { - if ($type['required']) { - throw AnnotationException::requiredError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'] - ); - } - - continue; - } - - if ($type['type'] === 'array') { - // handle the case of a single value - if (! is_array($values[$property])) { - $values[$property] = [$values[$property]]; - } - - // checks if the attribute has array type declaration, such as "array" - if (isset($type['array_type'])) { - foreach ($values[$property] as $item) { - if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', - $item - ); - } - } - } - } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { - throw AnnotationException::attributeTypeError( - $property, - $originalName, - $this->context, - 'a(n) ' . $type['value'], - $values[$property] - ); - } - } - - if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { - if (PHP_VERSION_ID >= 80000) { - return new $name(...$values); - } - - $positionalValues = []; - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $positionalValues[$parameter['position']] = $parameter['default']; - } - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s" -that can be set through its named arguments constructor. -Available named arguments: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) - )); - } - - $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; - } - - return new $name(...$positionalValues); - } - - // check if the annotation expects values via the constructor, - // or directly injected into public properties - if (self::$annotationMetadata[$name]['has_constructor'] === true) { - return new $name($values); - } - - $instance = new $name(); - - foreach ($values as $property => $value) { - if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { - if ($property !== 'value') { - throw AnnotationException::creationError(sprintf( - <<<'EXCEPTION' -The annotation @%s declared on %s does not have a property named "%s". -Available properties: %s -EXCEPTION - , - $originalName, - $this->context, - $property, - implode(', ', self::$annotationMetadata[$name]['properties']) - )); - } - - // handle the case if the property has no annotations - $property = self::$annotationMetadata[$name]['default_property']; - if (! $property) { - throw AnnotationException::creationError(sprintf( - 'The annotation @%s declared on %s does not accept any values, but got %s.', - $originalName, - $this->context, - json_encode($values) - )); - } - } - - $instance->{$property} = $value; - } - - return $instance; - } - - /** - * MethodCall ::= ["(" [Values] ")"] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function MethodCall(): array - { - $values = []; - - if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { - return $values; - } - - $this->match(DocLexer::T_OPEN_PARENTHESIS); - - if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - $values = $this->Values(); - } - - $this->match(DocLexer::T_CLOSE_PARENTHESIS); - - return $values; - } - - /** - * Values ::= Array | Value {"," Value}* [","] - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Values(): array - { - $values = [$this->Value()]; - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - break; - } - - $token = $this->lexer->lookahead; - $value = $this->Value(); - - $values[] = $value; - } - - $namedArguments = []; - $positionalArguments = []; - foreach ($values as $k => $value) { - if (is_object($value) && $value instanceof stdClass) { - $namedArguments[$value->name] = $value->value; - } else { - $positionalArguments[$k] = $value; - } - } - - return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; - } - - /** - * Constant ::= integer | string | float | boolean - * - * @return mixed - * - * @throws AnnotationException - */ - private function Constant() - { - $identifier = $this->Identifier(); - - if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { - [$className, $const] = explode('::', $identifier); - - $pos = strpos($className, '\\'); - $alias = ($pos === false) ? $className : substr($className, 0, $pos); - $found = false; - $loweredAlias = strtolower($alias); - - switch (true) { - case ! empty($this->namespaces): - foreach ($this->namespaces as $ns) { - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - break; - } - } - - break; - - case isset($this->imports[$loweredAlias]): - $found = true; - $className = ($pos !== false) - ? $this->imports[$loweredAlias] . substr($className, $pos) - : $this->imports[$loweredAlias]; - break; - - default: - if (isset($this->imports['__NAMESPACE__'])) { - $ns = $this->imports['__NAMESPACE__']; - - if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { - $className = $ns . '\\' . $className; - $found = true; - } - } - - break; - } - - if ($found) { - $identifier = $className . '::' . $const; - } - } - - /** - * Checks if identifier ends with ::class and remove the leading backslash if it exists. - */ - if ( - $this->identifierEndsWithClassConstant($identifier) && - ! $this->identifierStartsWithBackslash($identifier) - ) { - return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); - } - - if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { - return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); - } - - if (! defined($identifier)) { - throw AnnotationException::semanticalErrorConstants($identifier, $this->context); - } - - return constant($identifier); - } - - private function identifierStartsWithBackslash(string $identifier): bool - { - return $identifier[0] === '\\'; - } - - private function identifierEndsWithClassConstant(string $identifier): bool - { - return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); - } - - /** - * @return int|false - */ - private function getClassConstantPositionInIdentifier(string $identifier) - { - return stripos($identifier, '::class'); - } - - /** - * Identifier ::= string - * - * @throws AnnotationException - */ - private function Identifier(): string - { - // check if we have an annotation - if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { - throw $this->syntaxError('namespace separator or identifier'); - } - - $this->lexer->moveNext(); - - $className = $this->lexer->token['value']; - - while ( - $this->lexer->lookahead !== null && - $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + - strlen($this->lexer->token['value'])) && - $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) - ) { - $this->match(DocLexer::T_NAMESPACE_SEPARATOR); - $this->matchAny(self::$classIdentifiers); - - $className .= '\\' . $this->lexer->token['value']; - } - - return $className; - } - - /** - * Value ::= PlainValue | FieldAssignment - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Value() - { - $peek = $this->lexer->glimpse(); - - if ($peek['type'] === DocLexer::T_EQUALS) { - return $this->FieldAssignment(); - } - - return $this->PlainValue(); - } - - /** - * PlainValue ::= integer | string | float | boolean | Array | Annotation - * - * @return mixed - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function PlainValue() - { - if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { - return $this->Arrayx(); - } - - if ($this->lexer->isNextToken(DocLexer::T_AT)) { - return $this->Annotation(); - } - - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - return $this->Constant(); - } - - switch ($this->lexer->lookahead['type']) { - case DocLexer::T_STRING: - $this->match(DocLexer::T_STRING); - - return $this->lexer->token['value']; - - case DocLexer::T_INTEGER: - $this->match(DocLexer::T_INTEGER); - - return (int) $this->lexer->token['value']; - - case DocLexer::T_FLOAT: - $this->match(DocLexer::T_FLOAT); - - return (float) $this->lexer->token['value']; - - case DocLexer::T_TRUE: - $this->match(DocLexer::T_TRUE); - - return true; - - case DocLexer::T_FALSE: - $this->match(DocLexer::T_FALSE); - - return false; - - case DocLexer::T_NULL: - $this->match(DocLexer::T_NULL); - - return null; - - default: - throw $this->syntaxError('PlainValue'); - } - } - - /** - * FieldAssignment ::= FieldName "=" PlainValue - * FieldName ::= identifier - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function FieldAssignment(): stdClass - { - $this->match(DocLexer::T_IDENTIFIER); - $fieldName = $this->lexer->token['value']; - - $this->match(DocLexer::T_EQUALS); - - $item = new stdClass(); - $item->name = $fieldName; - $item->value = $this->PlainValue(); - - return $item; - } - - /** - * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" - * - * @return mixed[] - * - * @throws AnnotationException - * @throws ReflectionException - */ - private function Arrayx(): array - { - $array = $values = []; - - $this->match(DocLexer::T_OPEN_CURLY_BRACES); - - // If the array is empty, stop parsing and return. - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - return $array; - } - - $values[] = $this->ArrayEntry(); - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - // optional trailing comma - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - break; - } - - $values[] = $this->ArrayEntry(); - } - - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - foreach ($values as $value) { - [$key, $val] = $value; - - if ($key !== null) { - $array[$key] = $val; - } else { - $array[] = $val; - } - } - - return $array; - } - - /** - * ArrayEntry ::= Value | KeyValuePair - * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant - * Key ::= string | integer | Constant - * - * @throws AnnotationException - * @throws ReflectionException - * - * @phpstan-return array{mixed, mixed} - */ - private function ArrayEntry(): array - { - $peek = $this->lexer->glimpse(); - - if ( - $peek['type'] === DocLexer::T_EQUALS - || $peek['type'] === DocLexer::T_COLON - ) { - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - $key = $this->Constant(); - } else { - $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); - $key = $this->lexer->token['value']; - } - - $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); - - return [$key, $this->PlainValue()]; - } - - return [null, $this->Value()]; - } - - /** - * Checks whether the given $name matches any ignored annotation name or namespace - */ - private function isIgnoredAnnotation(string $name): bool - { - if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { - return true; - } - - foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { - $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; - - if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { - return true; - } - } - - return false; - } - - /** - * Resolve positional arguments (without name) to named ones - * - * @param array $arguments - * - * @return array - */ - private function resolvePositionalValues(array $arguments, string $name): array - { - $positionalArguments = $arguments['positional_arguments'] ?? []; - $values = $arguments['named_arguments'] ?? []; - - if ( - self::$annotationMetadata[$name]['has_named_argument_constructor'] - && self::$annotationMetadata[$name]['default_property'] !== null - ) { - // We must ensure that we don't have positional arguments after named ones - $positions = array_keys($positionalArguments); - $lastPosition = null; - foreach ($positions as $position) { - if ( - ($lastPosition === null && $position !== 0) || - ($lastPosition !== null && $position !== $lastPosition + 1) - ) { - throw $this->syntaxError('Positional arguments after named arguments is not allowed'); - } - - $lastPosition = $position; - } - - foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { - $position = $parameter['position']; - if (isset($values[$property]) || ! isset($positionalArguments[$position])) { - continue; - } - - $values[$property] = $positionalArguments[$position]; - } - } else { - if (count($positionalArguments) > 0 && ! isset($values['value'])) { - if (count($positionalArguments) === 1) { - $value = array_pop($positionalArguments); - } else { - $value = array_values($positionalArguments); - } - - $values['value'] = $value; - } - } - - return $values; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php deleted file mode 100644 index 6c6c22c..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php +++ /dev/null @@ -1,315 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var array */ - private $classNameHashes = []; - - /** @var int */ - private $umask; - - /** - * @param string $cacheDir - * @param bool $debug - * @param int $umask - * - * @throws InvalidArgumentException - */ - public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) - { - if (! is_int($umask)) { - throw new InvalidArgumentException(sprintf( - 'The parameter umask must be an integer, was: %s', - gettype($umask) - )); - } - - $this->reader = $reader; - $this->umask = $umask; - - if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { - throw new InvalidArgumentException(sprintf( - 'The directory "%s" does not exist and could not be created.', - $cacheDir - )); - } - - $this->dir = rtrim($cacheDir, '\\/'); - $this->debug = $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name]; - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - if (! isset($this->classNameHashes[$class->name])) { - $this->classNameHashes[$class->name] = sha1($class->name); - } - - $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; - if (! is_file($path)) { - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - $filename = $class->getFilename(); - if ( - $this->debug - && $filename !== false - && filemtime($path) < filemtime($filename) - ) { - @unlink($path); - - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Saves the cache file. - * - * @param string $path - * @param mixed $data - * - * @return void - */ - private function saveCacheFile($path, $data) - { - if (! is_writable($this->dir)) { - throw new InvalidArgumentException(sprintf( - <<<'EXCEPTION' -The directory "%s" is not writable. Both the webserver and the console user need access. -You can manage access rights for multiple users with "chmod +a". -If your system does not support this, check out the acl package., -EXCEPTION - , - $this->dir - )); - } - - $tempfile = tempnam($this->dir, uniqid('', true)); - - if ($tempfile === false) { - throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); - } - - @chmod($tempfile, 0666 & (~$this->umask)); - - $written = file_put_contents( - $tempfile, - 'umask)); - - if (rename($tempfile, $path) === false) { - @unlink($tempfile); - - throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); - } - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Clears loaded annotations. - * - * @return void - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = []; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php deleted file mode 100644 index 2efeb1d..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php +++ /dev/null @@ -1,177 +0,0 @@ - true, - 'Attribute' => true, - 'Attributes' => true, - /* Can we enable this? 'Enum' => true, */ - 'Required' => true, - 'Target' => true, - 'NamedArgumentConstructor' => true, - ]; - - private const WidelyUsedNonStandard = [ - 'fix' => true, - 'fixme' => true, - 'override' => true, - ]; - - private const PhpDocumentor1 = [ - 'abstract' => true, - 'access' => true, - 'code' => true, - 'deprec' => true, - 'endcode' => true, - 'exception' => true, - 'final' => true, - 'ingroup' => true, - 'inheritdoc' => true, - 'inheritDoc' => true, - 'magic' => true, - 'name' => true, - 'private' => true, - 'static' => true, - 'staticvar' => true, - 'staticVar' => true, - 'toc' => true, - 'tutorial' => true, - 'throw' => true, - ]; - - private const PhpDocumentor2 = [ - 'api' => true, - 'author' => true, - 'category' => true, - 'copyright' => true, - 'deprecated' => true, - 'example' => true, - 'filesource' => true, - 'global' => true, - 'ignore' => true, - /* Can we enable this? 'index' => true, */ - 'internal' => true, - 'license' => true, - 'link' => true, - 'method' => true, - 'package' => true, - 'param' => true, - 'property' => true, - 'property-read' => true, - 'property-write' => true, - 'return' => true, - 'see' => true, - 'since' => true, - 'source' => true, - 'subpackage' => true, - 'throws' => true, - 'todo' => true, - 'TODO' => true, - 'usedby' => true, - 'uses' => true, - 'var' => true, - 'version' => true, - ]; - - private const PHPUnit = [ - 'author' => true, - 'after' => true, - 'afterClass' => true, - 'backupGlobals' => true, - 'backupStaticAttributes' => true, - 'before' => true, - 'beforeClass' => true, - 'codeCoverageIgnore' => true, - 'codeCoverageIgnoreStart' => true, - 'codeCoverageIgnoreEnd' => true, - 'covers' => true, - 'coversDefaultClass' => true, - 'coversNothing' => true, - 'dataProvider' => true, - 'depends' => true, - 'doesNotPerformAssertions' => true, - 'expectedException' => true, - 'expectedExceptionCode' => true, - 'expectedExceptionMessage' => true, - 'expectedExceptionMessageRegExp' => true, - 'group' => true, - 'large' => true, - 'medium' => true, - 'preserveGlobalState' => true, - 'requires' => true, - 'runTestsInSeparateProcesses' => true, - 'runInSeparateProcess' => true, - 'small' => true, - 'test' => true, - 'testdox' => true, - 'testWith' => true, - 'ticket' => true, - 'uses' => true, - ]; - - private const PhpCheckStyle = ['SuppressWarnings' => true]; - - private const PhpStorm = ['noinspection' => true]; - - private const PEAR = ['package_version' => true]; - - private const PlainUML = [ - 'startuml' => true, - 'enduml' => true, - ]; - - private const Symfony = ['experimental' => true]; - - private const PhpCodeSniffer = [ - 'codingStandardsIgnoreStart' => true, - 'codingStandardsIgnoreEnd' => true, - ]; - - private const SlevomatCodingStandard = ['phpcsSuppress' => true]; - - private const Phan = ['suppress' => true]; - - private const Rector = ['noRector' => true]; - - private const StaticAnalysis = [ - // PHPStan, Psalm - 'extends' => true, - 'implements' => true, - 'template' => true, - 'use' => true, - - // Psalm - 'pure' => true, - 'immutable' => true, - ]; - - public const LIST = self::Reserved - + self::WidelyUsedNonStandard - + self::PhpDocumentor1 - + self::PhpDocumentor2 - + self::PHPUnit - + self::PhpCheckStyle - + self::PhpStorm - + self::PEAR - + self::PlainUML - + self::Symfony - + self::SlevomatCodingStandard - + self::PhpCodeSniffer - + self::Phan - + self::Rector - + self::StaticAnalysis; - - private function __construct() - { - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php deleted file mode 100644 index 42e7076..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php +++ /dev/null @@ -1,100 +0,0 @@ -delegate = $reader; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $annotations = []; - foreach ($this->delegate->getClassAnnotations($class) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotation) - { - return $this->delegate->getClassAnnotation($class, $annotation); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $annotations = []; - foreach ($this->delegate->getMethodAnnotations($method) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotation) - { - return $this->delegate->getMethodAnnotation($method, $annotation); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $annotations = []; - foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotation) - { - return $this->delegate->getPropertyAnnotation($property, $annotation); - } - - /** - * Proxies all methods to the delegate. - * - * @param string $method - * @param mixed[] $args - * - * @return mixed - */ - public function __call($method, $args) - { - return call_user_func_array([$this->delegate, $method], $args); - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php deleted file mode 100644 index 8af224c..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php +++ /dev/null @@ -1,14 +0,0 @@ -ReflectionClass object. - * - * @return array A list with use statements in the form (Alias => FQN). - */ - public function parseClass(ReflectionClass $class) - { - return $this->parseUseStatements($class); - } - - /** - * Parse a class or function for use statements. - * - * @param ReflectionClass|ReflectionFunction $reflection - * - * @psalm-return array a list with use statements in the form (Alias => FQN). - */ - public function parseUseStatements($reflection): array - { - if (method_exists($reflection, 'getUseStatements')) { - return $reflection->getUseStatements(); - } - - $filename = $reflection->getFileName(); - - if ($filename === false) { - return []; - } - - $content = $this->getFileContent($filename, $reflection->getStartLine()); - - if ($content === null) { - return []; - } - - $namespace = preg_quote($reflection->getNamespaceName()); - $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); - $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); - } - - /** - * Gets the content of the file right up to the given line number. - * - * @param string $filename The name of the file to load. - * @param int $lineNumber The number of lines to read from file. - * - * @return string|null The content of the file or null if the file does not exist. - */ - private function getFileContent($filename, $lineNumber) - { - if (! is_file($filename)) { - return null; - } - - $content = ''; - $lineCnt = 0; - $file = new SplFileObject($filename); - while (! $file->eof()) { - if ($lineCnt++ === $lineNumber) { - break; - } - - $content .= $file->fgets(); - } - - return $content; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php deleted file mode 100644 index a7099d5..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php +++ /dev/null @@ -1,232 +0,0 @@ -> */ - private $loadedAnnotations = []; - - /** @var int[] */ - private $loadedFilemtimes = []; - - public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (bool) $debug; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName() . '$' . $property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName() . '#' . $method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - public function clearLoadedAnnotations(): void - { - $this->loadedAnnotations = []; - $this->loadedFilemtimes = []; - } - - /** @return mixed[] */ - private function fetchFromCache( - string $cacheKey, - ReflectionClass $class, - string $method, - Reflector $reflector - ): array { - $cacheKey = rawurlencode($cacheKey); - - $item = $this->cache->getItem($cacheKey); - if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { - $this->cache->save($item->set($this->delegate->{$method}($reflector))); - } - - return $item->get(); - } - - /** - * Used in debug mode to check if the cache is fresh. - * - * @return bool Returns true if the cache was fresh, or false if the class - * being read was modified since writing to the cache. - */ - private function refresh(string $cacheKey, ReflectionClass $class): bool - { - $lastModification = $this->getLastModification($class); - if ($lastModification === 0) { - return true; - } - - $item = $this->cache->getItem('[C]' . $cacheKey); - if ($item->isHit() && $item->get() >= $lastModification) { - return true; - } - - $this->cache->save($item->set(time())); - - return false; - } - - /** - * Returns the time the class was last modified, testing traits and parents - */ - private function getLastModification(ReflectionClass $class): int - { - $filename = $class->getFileName(); - - if (isset($this->loadedFilemtimes[$filename])) { - return $this->loadedFilemtimes[$filename]; - } - - $parent = $class->getParentClass(); - - $lastModification = max(array_merge( - [$filename ? filemtime($filename) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $class->getTraits()), - array_map(function (ReflectionClass $class): int { - return $this->getLastModification($class); - }, $class->getInterfaces()), - $parent ? [$this->getLastModification($parent)] : [] - )); - - assert($lastModification !== false); - - return $this->loadedFilemtimes[$filename] = $lastModification; - } - - private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int - { - $fileName = $reflectionTrait->getFileName(); - - if (isset($this->loadedFilemtimes[$fileName])) { - return $this->loadedFilemtimes[$fileName]; - } - - $lastModificationTime = max(array_merge( - [$fileName ? filemtime($fileName) : 0], - array_map(function (ReflectionClass $reflectionTrait): int { - return $this->getTraitLastModificationTime($reflectionTrait); - }, $reflectionTrait->getTraits()) - )); - - assert($lastModificationTime !== false); - - return $this->loadedFilemtimes[$fileName] = $lastModificationTime; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php deleted file mode 100644 index 0663ffd..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php +++ /dev/null @@ -1,80 +0,0 @@ - An array of Annotations. - */ - public function getClassAnnotations(ReflectionClass $class); - - /** - * Gets a class annotation. - * - * @param ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName); - - /** - * Gets the annotations applied to a method. - * - * @param ReflectionMethod $method The ReflectionMethod of the method from which - * the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getMethodAnnotations(ReflectionMethod $method); - - /** - * Gets a method annotation. - * - * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName); - - /** - * Gets the annotations applied to a property. - * - * @param ReflectionProperty $property The ReflectionProperty of the property - * from which the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getPropertyAnnotations(ReflectionProperty $property); - - /** - * Gets a property annotation. - * - * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. - * @param class-string $annotationName The name of the annotation. - * - * @return T|null The Annotation or NULL, if the requested annotation does not exist. - * - * @template T - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php deleted file mode 100644 index 8a78c11..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php +++ /dev/null @@ -1,114 +0,0 @@ -parser = new DocParser(); - $this->parser->setIgnoreNotImportedAnnotations(true); - } - - /** - * Adds a namespace in which we will look for annotations. - * - * @param string $namespace - * - * @return void - */ - public function addNamespace($namespace) - { - $this->parser->addNamespace($namespace); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotations(ReflectionClass $class) - { - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - return $this->parser->parse( - $method->getDocComment(), - 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' - ); - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - return $this->parser->parse( - $property->getDocComment(), - 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() - ); - } - - /** - * {@inheritDoc} - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } -} diff --git a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php deleted file mode 100644 index 9605fb8..0000000 --- a/vendor/passkit/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php +++ /dev/null @@ -1,208 +0,0 @@ - - */ - private $tokens; - - /** - * The number of tokens. - * - * @var int - */ - private $numTokens; - - /** - * The current array pointer. - * - * @var int - */ - private $pointer = 0; - - /** - * @param string $contents - */ - public function __construct($contents) - { - $this->tokens = token_get_all($contents); - - // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it - // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored - // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a - // docblock. If the first thing in the file is a class without a doc block this would cause calls to - // getDocBlock() on said class to return our long lost doc_comment. Argh. - // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least - // it's harmless to us. - token_get_all("numTokens = count($this->tokens); - } - - /** - * Gets the next non whitespace and non comment token. - * - * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. - * If FALSE then only whitespace and normal comments are skipped. - * - * @return mixed[]|string|null The token if exists, null otherwise. - */ - public function next($docCommentIsComment = true) - { - for ($i = $this->pointer; $i < $this->numTokens; $i++) { - $this->pointer++; - if ( - $this->tokens[$i][0] === T_WHITESPACE || - $this->tokens[$i][0] === T_COMMENT || - ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) - ) { - continue; - } - - return $this->tokens[$i]; - } - - return null; - } - - /** - * Parses a single use statement. - * - * @return array A list with all found class names for a use statement. - */ - public function parseUseStatement() - { - $groupRoot = ''; - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - while (($token = $this->next())) { - if (! $explicitAlias && $token[0] === T_STRING) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $token[0] === T_STRING) { - $alias = $token[1]; - } elseif ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - ) { - $class .= $token[1]; - - $classSplit = explode('\\', $token[1]); - $alias = $classSplit[count($classSplit) - 1]; - } elseif ($token[0] === T_NS_SEPARATOR) { - $class .= '\\'; - $alias = ''; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token === ',') { - $statements[strtolower($alias)] = $groupRoot . $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[strtolower($alias)] = $groupRoot . $class; - break; - } elseif ($token === '{') { - $groupRoot = $class; - $class = ''; - } elseif ($token === '}') { - continue; - } else { - break; - } - } - - return $statements; - } - - /** - * Gets all use statements. - * - * @param string $namespaceName The namespace name of the reflected class. - * - * @return array A list with all found use statements. - */ - public function parseUseStatements($namespaceName) - { - $statements = []; - while (($token = $this->next())) { - if ($token[0] === T_USE) { - $statements = array_merge($statements, $this->parseUseStatement()); - continue; - } - - if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { - continue; - } - - // Get fresh array for new namespace. This is to prevent the parser to collect the use statements - // for a previous namespace with the same name. This is the case if a namespace is defined twice - // or if a namespace with the same name is commented out. - $statements = []; - } - - return $statements; - } - - /** - * Gets the namespace. - * - * @return string The found namespace. - */ - public function parseNamespace() - { - $name = ''; - while ( - ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( - PHP_VERSION_ID >= 80000 && - ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) - )) - ) { - $name .= $token[1]; - } - - return $name; - } - - /** - * Gets the class name. - * - * @return string The found class name. - */ - public function parseClass() - { - // Namespaces and class names are tokenized the same: T_STRINGs - // separated by T_NS_SEPARATOR so we can use one function to provide - // both. - return $this->parseNamespace(); - } -} diff --git a/vendor/passkit/vendor/doctrine/lexer/LICENSE b/vendor/passkit/vendor/doctrine/lexer/LICENSE deleted file mode 100644 index e8fdec4..0000000 --- a/vendor/passkit/vendor/doctrine/lexer/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2018 Doctrine Project - -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/vendor/passkit/vendor/doctrine/lexer/README.md b/vendor/passkit/vendor/doctrine/lexer/README.md deleted file mode 100644 index 784f2a2..0000000 --- a/vendor/passkit/vendor/doctrine/lexer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Doctrine Lexer - -[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) - -Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. - -This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). - -https://www.doctrine-project.org/projects/lexer.html diff --git a/vendor/passkit/vendor/doctrine/lexer/composer.json b/vendor/passkit/vendor/doctrine/lexer/composer.json deleted file mode 100644 index c435647..0000000 --- a/vendor/passkit/vendor/doctrine/lexer/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "doctrine/lexer", - "type": "library", - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "keywords": [ - "php", - "parser", - "lexer", - "annotations", - "docblock" - ], - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } - }, - "autoload-dev": { - "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php deleted file mode 100644 index 7e8a11d..0000000 --- a/vendor/passkit/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php +++ /dev/null @@ -1,337 +0,0 @@ - - */ - private $tokens = []; - - /** - * Current lexer position in input string. - * - * @var int - */ - private $position = 0; - - /** - * Current peek of current lexer position. - * - * @var int - */ - private $peek = 0; - - /** - * The next token in the input. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $lookahead; - - /** - * The last matched/seen token. - * - * @var mixed[]|null - * @psalm-var Token|null - */ - public $token; - - /** - * Composed regex for input parsing. - * - * @var string|null - */ - private $regex; - - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput($input) - { - $this->input = $input; - $this->tokens = []; - - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param int $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } - - /** - * Retrieve the original lexer's input until a given position. - * - * @param int $position - * - * @return string - */ - public function getInputUntilPosition($position) - { - return substr($this->input, 0, $position); - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param int|string $type - * - * @return bool - */ - public function isNextToken($type) - { - return $this->lookahead !== null && $this->lookahead['type'] === $type; - } - - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param list $types - * - * @return bool - */ - public function isNextTokenAny(array $types) - { - return $this->lookahead !== null && in_array($this->lookahead['type'], $types, true); - } - - /** - * Moves to the next token in the input string. - * - * @return bool - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = isset($this->tokens[$this->position]) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - * - * @return void - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token. - * - * @param mixed $value - * @param int|string $token - * - * @return bool - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } - - return null; - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return mixed[]|null The next token or NULL if there are no more tokens ahead. - * @psalm-return Token|null - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan($input) - { - if (! isset($this->regex)) { - $this->regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers() - ); - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($this->regex, $input, -1, $flags); - - if ($matches === false) { - // Work around https://bugs.php.net/78122 - $matches = [[$input, 0]]; - } - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); - - $this->tokens[] = [ - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ]; - } - } - - /** - * Gets the literal for a given token. - * - * @param int|string $token - * - * @return int|string - */ - public function getLiteral($token) - { - $className = static::class; - $reflClass = new ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * - * @return int|string|null - */ - abstract protected function getType(&$value); -} diff --git a/vendor/passkit/vendor/doctrine/lexer/psalm.xml b/vendor/passkit/vendor/doctrine/lexer/psalm.xml deleted file mode 100644 index f331e50..0000000 --- a/vendor/passkit/vendor/doctrine/lexer/psalm.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - diff --git a/vendor/passkit/vendor/psr/cache/CHANGELOG.md b/vendor/passkit/vendor/psr/cache/CHANGELOG.md deleted file mode 100644 index 58ddab0..0000000 --- a/vendor/passkit/vendor/psr/cache/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.0.1 - 2016-08-06 - -### Fixed - -- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr -- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr -- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell -- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell - -## 1.0.0 - 2015-12-11 - -Initial stable release; reflects accepted PSR-6 specification diff --git a/vendor/passkit/vendor/psr/cache/LICENSE.txt b/vendor/passkit/vendor/psr/cache/LICENSE.txt deleted file mode 100644 index b1c2c97..0000000 --- a/vendor/passkit/vendor/psr/cache/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 PHP Framework Interoperability Group - -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/vendor/passkit/vendor/psr/cache/README.md b/vendor/passkit/vendor/psr/cache/README.md deleted file mode 100644 index 9855a31..0000000 --- a/vendor/passkit/vendor/psr/cache/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Caching Interface -============== - -This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url]. - -Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism. - -The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. - -[psr-url]: https://www.php-fig.org/psr/psr-6/ -[package-url]: https://packagist.org/packages/psr/cache -[implementation-url]: https://packagist.org/providers/psr/cache-implementation diff --git a/vendor/passkit/vendor/psr/cache/composer.json b/vendor/passkit/vendor/psr/cache/composer.json deleted file mode 100644 index 4b68797..0000000 --- a/vendor/passkit/vendor/psr/cache/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/cache", - "description": "Common interface for caching libraries", - "keywords": ["psr", "psr-6", "cache"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": ">=8.0.0" - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/vendor/passkit/vendor/psr/cache/src/CacheException.php b/vendor/passkit/vendor/psr/cache/src/CacheException.php deleted file mode 100644 index bb785f4..0000000 --- a/vendor/passkit/vendor/psr/cache/src/CacheException.php +++ /dev/null @@ -1,10 +0,0 @@ -logger = $logger; - } - - public function doSomething() - { - if ($this->logger) { - $this->logger->info('Doing work'); - } - - try { - $this->doSomethingElse(); - } catch (Exception $exception) { - $this->logger->error('Oh no!', array('exception' => $exception)); - } - - // do something useful - } -} -``` - -You can then pick one of the implementations of the interface to get a logger. - -If you want to implement the interface, you can require this package and -implement `Psr\Log\LoggerInterface` in your code. Please read the -[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) -for details. diff --git a/vendor/passkit/vendor/psr/log/composer.json b/vendor/passkit/vendor/psr/log/composer.json deleted file mode 100644 index 879fc6f..0000000 --- a/vendor/passkit/vendor/psr/log/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "psr/log", - "description": "Common interface for logging libraries", - "keywords": ["psr", "psr-3", "log"], - "homepage": "https://github.com/php-fig/log", - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "require": { - "php": ">=8.0.0" - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - } -} diff --git a/vendor/passkit/vendor/psr/log/src/AbstractLogger.php b/vendor/passkit/vendor/psr/log/src/AbstractLogger.php deleted file mode 100644 index d60a091..0000000 --- a/vendor/passkit/vendor/psr/log/src/AbstractLogger.php +++ /dev/null @@ -1,15 +0,0 @@ -logger = $logger; - } -} diff --git a/vendor/passkit/vendor/psr/log/src/LoggerInterface.php b/vendor/passkit/vendor/psr/log/src/LoggerInterface.php deleted file mode 100644 index b3a24b5..0000000 --- a/vendor/passkit/vendor/psr/log/src/LoggerInterface.php +++ /dev/null @@ -1,125 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function alert(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function critical(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function error(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function warning(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function notice(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function info(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string|\Stringable $message - * @param array $context - * - * @return void - */ - public function debug(string|\Stringable $message, array $context = []): void - { - $this->log(LogLevel::DEBUG, $message, $context); - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string|\Stringable $message - * @param array $context - * - * @return void - * - * @throws \Psr\Log\InvalidArgumentException - */ - abstract public function log($level, string|\Stringable $message, array $context = []): void; -} diff --git a/vendor/passkit/vendor/psr/log/src/NullLogger.php b/vendor/passkit/vendor/psr/log/src/NullLogger.php deleted file mode 100644 index c1cc3c0..0000000 --- a/vendor/passkit/vendor/psr/log/src/NullLogger.php +++ /dev/null @@ -1,30 +0,0 @@ -logger) { }` - * blocks. - */ -class NullLogger extends AbstractLogger -{ - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string|\Stringable $message - * @param array $context - * - * @return void - * - * @throws \Psr\Log\InvalidArgumentException - */ - public function log($level, string|\Stringable $message, array $context = []): void - { - // noop - } -} diff --git a/vendor/passkit/vendor/symfony/finder/CHANGELOG.md b/vendor/passkit/vendor/symfony/finder/CHANGELOG.md deleted file mode 100644 index 9e2fc5a..0000000 --- a/vendor/passkit/vendor/symfony/finder/CHANGELOG.md +++ /dev/null @@ -1,92 +0,0 @@ -CHANGELOG -========= - -6.0 ---- - - * Remove `Comparator::setTarget()` and `Comparator::setOperator()` - -5.4.0 ------ - - * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` - * Add a constructor to `Comparator` that allows setting target and operator - * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified - * Add recursive .gitignore files support - -5.0.0 ------ - - * added `$useNaturalSort` argument to `Finder::sortByName()` - -4.3.0 ------ - - * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore - -4.2.0 ------ - - * added $useNaturalSort option to Finder::sortByName() method - * the `Finder::sortByName()` method will have a new `$useNaturalSort` - argument in version 5.0, not defining it is deprecated - * added `Finder::reverseSorting()` to reverse the sorting - -4.0.0 ------ - - * removed `ExceptionInterface` - * removed `Symfony\Component\Finder\Iterator\FilterIterator` - -3.4.0 ------ - - * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` - * added Finder::hasResults() method to check if any results were found - -3.3.0 ------ - - * added double-star matching to Glob::toRegex() - -3.0.0 ------ - - * removed deprecated classes - -2.8.0 ------ - - * deprecated adapters and related classes - -2.5.0 ------ - * added support for GLOB_BRACE in the paths passed to Finder::in() - -2.3.0 ------ - - * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) - * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception - -2.2.0 ------ - - * added Finder::path() and Finder::notPath() methods - * added finder adapters to improve performance on specific platforms - * added support for wildcard characters (glob patterns) in the paths passed - to Finder::in() - -2.1.0 ------ - - * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and - Finder::sortByModifiedTime() - * added Countable to Finder - * added support for an array of directories as an argument to - Finder::exclude() - * added searching based on the file content via Finder::contains() and - Finder::notContains() - * added support for the != operator in the Comparator - * [BC BREAK] filter expressions (used for file name and content) are no more - considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php deleted file mode 100644 index bd68583..0000000 --- a/vendor/passkit/vendor/symfony/finder/Comparator/Comparator.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * @author Fabien Potencier - */ -class Comparator -{ - private string $target; - private string $operator; - - public function __construct(string $target, string $operator = '==') - { - if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { - throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); - } - - $this->target = $target; - $this->operator = $operator; - } - - /** - * Gets the target value. - */ - public function getTarget(): string - { - return $this->target; - } - - /** - * Gets the comparison operator. - */ - public function getOperator(): string - { - return $this->operator; - } - - /** - * Tests against the target. - */ - public function test(mixed $test): bool - { - return match ($this->operator) { - '>' => $test > $this->target, - '>=' => $test >= $this->target, - '<' => $test < $this->target, - '<=' => $test <= $this->target, - '!=' => $test != $this->target, - default => $test == $this->target, - }; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php deleted file mode 100644 index 159964d..0000000 --- a/vendor/passkit/vendor/symfony/finder/Comparator/DateComparator.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * DateCompare compiles date comparisons. - * - * @author Fabien Potencier - */ -class DateComparator extends Comparator -{ - /** - * @param string $test A comparison string - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct(string $test) - { - if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); - } - - try { - $date = new \DateTime($matches[2]); - $target = $date->format('U'); - } catch (\Exception) { - throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); - } - - $operator = $matches[1] ?? '=='; - if ('since' === $operator || 'after' === $operator) { - $operator = '>'; - } - - if ('until' === $operator || 'before' === $operator) { - $operator = '<'; - } - - parent::__construct($target, $operator); - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php deleted file mode 100644 index ff85d96..0000000 --- a/vendor/passkit/vendor/symfony/finder/Comparator/NumberComparator.php +++ /dev/null @@ -1,78 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Comparator; - -/** - * NumberComparator compiles a simple comparison to an anonymous - * subroutine, which you can call with a value to be tested again. - * - * Now this would be very pointless, if NumberCompare didn't understand - * magnitudes. - * - * The target value may use magnitudes of kilobytes (k, ki), - * megabytes (m, mi), or gigabytes (g, gi). Those suffixed - * with an i use the appropriate 2**n version in accordance with the - * IEC standard: http://physics.nist.gov/cuu/Units/binary.html - * - * Based on the Perl Number::Compare module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - * - * @see http://physics.nist.gov/cuu/Units/binary.html - */ -class NumberComparator extends Comparator -{ - /** - * @param string|int $test A comparison string or an integer - * - * @throws \InvalidArgumentException If the test is not understood - */ - public function __construct(?string $test) - { - if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { - throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); - } - - $target = $matches[2]; - if (!is_numeric($target)) { - throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); - } - if (isset($matches[3])) { - // magnitude - switch (strtolower($matches[3])) { - case 'k': - $target *= 1000; - break; - case 'ki': - $target *= 1024; - break; - case 'm': - $target *= 1000000; - break; - case 'mi': - $target *= 1024 * 1024; - break; - case 'g': - $target *= 1000000000; - break; - case 'gi': - $target *= 1024 * 1024 * 1024; - break; - } - } - - parent::__construct($target, $matches[1] ?: '=='); - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php deleted file mode 100644 index ee195ea..0000000 --- a/vendor/passkit/vendor/symfony/finder/Exception/AccessDeniedException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Jean-François Simon - */ -class AccessDeniedException extends \UnexpectedValueException -{ -} diff --git a/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php deleted file mode 100644 index c6cc0f2..0000000 --- a/vendor/passkit/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Exception; - -/** - * @author Andreas Erhard - */ -class DirectoryNotFoundException extends \InvalidArgumentException -{ -} diff --git a/vendor/passkit/vendor/symfony/finder/Finder.php b/vendor/passkit/vendor/symfony/finder/Finder.php deleted file mode 100644 index 4636f05..0000000 --- a/vendor/passkit/vendor/symfony/finder/Finder.php +++ /dev/null @@ -1,798 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -use Symfony\Component\Finder\Comparator\DateComparator; -use Symfony\Component\Finder\Comparator\NumberComparator; -use Symfony\Component\Finder\Exception\DirectoryNotFoundException; -use Symfony\Component\Finder\Iterator\CustomFilterIterator; -use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; -use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; -use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; -use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; -use Symfony\Component\Finder\Iterator\FilenameFilterIterator; -use Symfony\Component\Finder\Iterator\LazyIterator; -use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; -use Symfony\Component\Finder\Iterator\SortableIterator; - -/** - * Finder allows to build rules to find files and directories. - * - * It is a thin wrapper around several specialized iterator classes. - * - * All rules may be invoked several times. - * - * All methods return the current Finder object to allow chaining: - * - * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); - * - * @author Fabien Potencier - * - * @implements \IteratorAggregate - */ -class Finder implements \IteratorAggregate, \Countable -{ - public const IGNORE_VCS_FILES = 1; - public const IGNORE_DOT_FILES = 2; - public const IGNORE_VCS_IGNORED_FILES = 4; - - private int $mode = 0; - private array $names = []; - private array $notNames = []; - private array $exclude = []; - private array $filters = []; - private array $depths = []; - private array $sizes = []; - private bool $followLinks = false; - private bool $reverseSorting = false; - private \Closure|int|false $sort = false; - private int $ignore = 0; - private array $dirs = []; - private array $dates = []; - private array $iterators = []; - private array $contains = []; - private array $notContains = []; - private array $paths = []; - private array $notPaths = []; - private bool $ignoreUnreadableDirs = false; - - private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; - - public function __construct() - { - $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; - } - - /** - * Creates a new Finder. - */ - public static function create(): static - { - return new static(); - } - - /** - * Restricts the matching to directories only. - * - * @return $this - */ - public function directories(): static - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; - - return $this; - } - - /** - * Restricts the matching to files only. - * - * @return $this - */ - public function files(): static - { - $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; - - return $this; - } - - /** - * Adds tests for the directory depth. - * - * Usage: - * - * $finder->depth('> 1') // the Finder will start matching at level 1. - * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. - * $finder->depth(['>= 1', '< 3']) - * - * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels - * - * @return $this - * - * @see DepthRangeFilterIterator - * @see NumberComparator - */ - public function depth(string|int|array $levels): static - { - foreach ((array) $levels as $level) { - $this->depths[] = new Comparator\NumberComparator($level); - } - - return $this; - } - - /** - * Adds tests for file dates (last modified). - * - * The date must be something that strtotime() is able to parse: - * - * $finder->date('since yesterday'); - * $finder->date('until 2 days ago'); - * $finder->date('> now - 2 hours'); - * $finder->date('>= 2005-10-15'); - * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); - * - * @param string|string[] $dates A date range string or an array of date ranges - * - * @return $this - * - * @see strtotime - * @see DateRangeFilterIterator - * @see DateComparator - */ - public function date(string|array $dates): static - { - foreach ((array) $dates as $date) { - $this->dates[] = new Comparator\DateComparator($date); - } - - return $this; - } - - /** - * Adds rules that files must match. - * - * You can use patterns (delimited with / sign), globs or simple strings. - * - * $finder->name('*.php') - * $finder->name('/\.php$/') // same as above - * $finder->name('test.php') - * $finder->name(['test.py', 'test.php']) - * - * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function name(string|array $patterns): static - { - $this->names = array_merge($this->names, (array) $patterns); - - return $this; - } - - /** - * Adds rules that files must not match. - * - * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function notName(string|array $patterns): static - { - $this->notNames = array_merge($this->notNames, (array) $patterns); - - return $this; - } - - /** - * Adds tests that file contents must match. - * - * Strings or PCRE patterns can be used: - * - * $finder->contains('Lorem ipsum') - * $finder->contains('/Lorem ipsum/i') - * $finder->contains(['dolor', '/ipsum/i']) - * - * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns - * - * @return $this - * - * @see FilecontentFilterIterator - */ - public function contains(string|array $patterns): static - { - $this->contains = array_merge($this->contains, (array) $patterns); - - return $this; - } - - /** - * Adds tests that file contents must not match. - * - * Strings or PCRE patterns can be used: - * - * $finder->notContains('Lorem ipsum') - * $finder->notContains('/Lorem ipsum/i') - * $finder->notContains(['lorem', '/dolor/i']) - * - * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns - * - * @return $this - * - * @see FilecontentFilterIterator - */ - public function notContains(string|array $patterns): static - { - $this->notContains = array_merge($this->notContains, (array) $patterns); - - return $this; - } - - /** - * Adds rules that filenames must match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->path('some/special/dir') - * $finder->path('/some\/special\/dir/') // same as above - * $finder->path(['some dir', 'another/dir']) - * - * Use only / as dirname separator. - * - * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function path(string|array $patterns): static - { - $this->paths = array_merge($this->paths, (array) $patterns); - - return $this; - } - - /** - * Adds rules that filenames must not match. - * - * You can use patterns (delimited with / sign) or simple strings. - * - * $finder->notPath('some/special/dir') - * $finder->notPath('/some\/special\/dir/') // same as above - * $finder->notPath(['some/file.txt', 'another/file.log']) - * - * Use only / as dirname separator. - * - * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns - * - * @return $this - * - * @see FilenameFilterIterator - */ - public function notPath(string|array $patterns): static - { - $this->notPaths = array_merge($this->notPaths, (array) $patterns); - - return $this; - } - - /** - * Adds tests for file sizes. - * - * $finder->size('> 10K'); - * $finder->size('<= 1Ki'); - * $finder->size(4); - * $finder->size(['> 10K', '< 20K']) - * - * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges - * - * @return $this - * - * @see SizeRangeFilterIterator - * @see NumberComparator - */ - public function size(string|int|array $sizes): static - { - foreach ((array) $sizes as $size) { - $this->sizes[] = new Comparator\NumberComparator($size); - } - - return $this; - } - - /** - * Excludes directories. - * - * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: - * - * $finder->in(__DIR__)->exclude('ruby'); - * - * @param string|array $dirs A directory path or an array of directories - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function exclude(string|array $dirs): static - { - $this->exclude = array_merge($this->exclude, (array) $dirs); - - return $this; - } - - /** - * Excludes "hidden" directories and files (starting with a dot). - * - * This option is enabled by default. - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function ignoreDotFiles(bool $ignoreDotFiles): static - { - if ($ignoreDotFiles) { - $this->ignore |= static::IGNORE_DOT_FILES; - } else { - $this->ignore &= ~static::IGNORE_DOT_FILES; - } - - return $this; - } - - /** - * Forces the finder to ignore version control directories. - * - * This option is enabled by default. - * - * @return $this - * - * @see ExcludeDirectoryFilterIterator - */ - public function ignoreVCS(bool $ignoreVCS): static - { - if ($ignoreVCS) { - $this->ignore |= static::IGNORE_VCS_FILES; - } else { - $this->ignore &= ~static::IGNORE_VCS_FILES; - } - - return $this; - } - - /** - * Forces Finder to obey .gitignore and ignore files based on rules listed there. - * - * This option is disabled by default. - * - * @return $this - */ - public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static - { - if ($ignoreVCSIgnored) { - $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; - } else { - $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; - } - - return $this; - } - - /** - * Adds VCS patterns. - * - * @see ignoreVCS() - * - * @param string|string[] $pattern VCS patterns to ignore - */ - public static function addVCSPattern(string|array $pattern) - { - foreach ((array) $pattern as $p) { - self::$vcsPatterns[] = $p; - } - - self::$vcsPatterns = array_unique(self::$vcsPatterns); - } - - /** - * Sorts files and directories by an anonymous function. - * - * The anonymous function receives two \SplFileInfo instances to compare. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sort(\Closure $closure): static - { - $this->sort = $closure; - - return $this; - } - - /** - * Sorts files and directories by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByName(bool $useNaturalSort = false): static - { - $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; - - return $this; - } - - /** - * Sorts files and directories by type (directories before files), then by name. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByType(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; - - return $this; - } - - /** - * Sorts files and directories by the last accessed time. - * - * This is the time that the file was last accessed, read or written to. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByAccessedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; - - return $this; - } - - /** - * Reverses the sorting. - * - * @return $this - */ - public function reverseSorting(): static - { - $this->reverseSorting = true; - - return $this; - } - - /** - * Sorts files and directories by the last inode changed time. - * - * This is the time that the inode information was last modified (permissions, owner, group or other metadata). - * - * On Windows, since inode is not available, changed time is actually the file creation time. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByChangedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; - - return $this; - } - - /** - * Sorts files and directories by the last modified time. - * - * This is the last time the actual contents of the file were last modified. - * - * This can be slow as all the matching files and directories must be retrieved for comparison. - * - * @return $this - * - * @see SortableIterator - */ - public function sortByModifiedTime(): static - { - $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; - - return $this; - } - - /** - * Filters the iterator with an anonymous function. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @return $this - * - * @see CustomFilterIterator - */ - public function filter(\Closure $closure): static - { - $this->filters[] = $closure; - - return $this; - } - - /** - * Forces the following of symlinks. - * - * @return $this - */ - public function followLinks(): static - { - $this->followLinks = true; - - return $this; - } - - /** - * Tells finder to ignore unreadable directories. - * - * By default, scanning unreadable directories content throws an AccessDeniedException. - * - * @return $this - */ - public function ignoreUnreadableDirs(bool $ignore = true): static - { - $this->ignoreUnreadableDirs = $ignore; - - return $this; - } - - /** - * Searches files and directories which match defined rules. - * - * @param string|string[] $dirs A directory path or an array of directories - * - * @return $this - * - * @throws DirectoryNotFoundException if one of the directories does not exist - */ - public function in(string|array $dirs): static - { - $resolvedDirs = []; - - foreach ((array) $dirs as $dir) { - if (is_dir($dir)) { - $resolvedDirs[] = [$this->normalizeDir($dir)]; - } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { - sort($glob); - $resolvedDirs[] = array_map($this->normalizeDir(...), $glob); - } else { - throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); - } - } - - $this->dirs = array_merge($this->dirs, ...$resolvedDirs); - - return $this; - } - - /** - * Returns an Iterator for the current Finder configuration. - * - * This method implements the IteratorAggregate interface. - * - * @return \Iterator - * - * @throws \LogicException if the in() method has not been called - */ - public function getIterator(): \Iterator - { - if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { - throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); - } - - if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { - $iterator = $this->searchInDirectory($this->dirs[0]); - - if ($this->sort || $this->reverseSorting) { - $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); - } - - return $iterator; - } - - $iterator = new \AppendIterator(); - foreach ($this->dirs as $dir) { - $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { - return $this->searchInDirectory($dir); - }))); - } - - foreach ($this->iterators as $it) { - $iterator->append($it); - } - - if ($this->sort || $this->reverseSorting) { - $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); - } - - return $iterator; - } - - /** - * Appends an existing set of files/directories to the finder. - * - * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. - * - * @return $this - * - * @throws \InvalidArgumentException when the given argument is not iterable - */ - public function append(iterable $iterator): static - { - if ($iterator instanceof \IteratorAggregate) { - $this->iterators[] = $iterator->getIterator(); - } elseif ($iterator instanceof \Iterator) { - $this->iterators[] = $iterator; - } elseif (is_iterable($iterator)) { - $it = new \ArrayIterator(); - foreach ($iterator as $file) { - $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); - $it[$file->getPathname()] = $file; - } - $this->iterators[] = $it; - } else { - throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); - } - - return $this; - } - - /** - * Check if any results were found. - */ - public function hasResults(): bool - { - foreach ($this->getIterator() as $_) { - return true; - } - - return false; - } - - /** - * Counts all the results collected by the iterators. - */ - public function count(): int - { - return iterator_count($this->getIterator()); - } - - private function searchInDirectory(string $dir): \Iterator - { - $exclude = $this->exclude; - $notPaths = $this->notPaths; - - if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { - $exclude = array_merge($exclude, self::$vcsPatterns); - } - - if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { - $notPaths[] = '#(^|/)\..+(/|$)#'; - } - - $minDepth = 0; - $maxDepth = \PHP_INT_MAX; - - foreach ($this->depths as $comparator) { - switch ($comparator->getOperator()) { - case '>': - $minDepth = $comparator->getTarget() + 1; - break; - case '>=': - $minDepth = $comparator->getTarget(); - break; - case '<': - $maxDepth = $comparator->getTarget() - 1; - break; - case '<=': - $maxDepth = $comparator->getTarget(); - break; - default: - $minDepth = $maxDepth = $comparator->getTarget(); - } - } - - $flags = \RecursiveDirectoryIterator::SKIP_DOTS; - - if ($this->followLinks) { - $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; - } - - $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); - - if ($exclude) { - $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); - } - - $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); - - if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { - $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); - } - - if ($this->mode) { - $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); - } - - if ($this->names || $this->notNames) { - $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); - } - - if ($this->contains || $this->notContains) { - $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); - } - - if ($this->sizes) { - $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); - } - - if ($this->dates) { - $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); - } - - if ($this->filters) { - $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); - } - - if ($this->paths || $notPaths) { - $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); - } - - if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { - $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); - } - - return $iterator; - } - - /** - * Normalizes given directory names by removing trailing slashes. - * - * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper - */ - private function normalizeDir(string $dir): string - { - if ('/' === $dir) { - return $dir; - } - - $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); - - if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { - $dir .= '/'; - } - - return $dir; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Gitignore.php b/vendor/passkit/vendor/symfony/finder/Gitignore.php deleted file mode 100644 index 070074b..0000000 --- a/vendor/passkit/vendor/symfony/finder/Gitignore.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Gitignore matches against text. - * - * @author Michael Voříšek - * @author Ahmed Abdou - */ -class Gitignore -{ - /** - * Returns a regexp which is the equivalent of the gitignore pattern. - * - * Format specification: https://git-scm.com/docs/gitignore#_pattern_format - */ - public static function toRegex(string $gitignoreFileContent): string - { - return self::buildRegex($gitignoreFileContent, false); - } - - public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string - { - return self::buildRegex($gitignoreFileContent, true); - } - - private static function buildRegex(string $gitignoreFileContent, bool $inverted): string - { - $gitignoreFileContent = preg_replace('~(? - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Glob matches globbing patterns against text. - * - * if match_glob("foo.*", "foo.bar") echo "matched\n"; - * - * // prints foo.bar and foo.baz - * $regex = glob_to_regex("foo.*"); - * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) - * { - * if (/$regex/) echo "matched: $car\n"; - * } - * - * Glob implements glob(3) style matching that can be used to match - * against text, rather than fetching names from a filesystem. - * - * Based on the Perl Text::Glob module. - * - * @author Fabien Potencier PHP port - * @author Richard Clamp Perl version - * @copyright 2004-2005 Fabien Potencier - * @copyright 2002 Richard Clamp - */ -class Glob -{ - /** - * Returns a regexp which is the equivalent of the glob pattern. - */ - public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#'): string - { - $firstByte = true; - $escaping = false; - $inCurlies = 0; - $regex = ''; - $sizeGlob = \strlen($glob); - for ($i = 0; $i < $sizeGlob; ++$i) { - $car = $glob[$i]; - if ($firstByte && $strictLeadingDot && '.' !== $car) { - $regex .= '(?=[^\.])'; - } - - $firstByte = '/' === $car; - - if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { - $car = '[^/]++/'; - if (!isset($glob[$i + 3])) { - $car .= '?'; - } - - if ($strictLeadingDot) { - $car = '(?=[^\.])'.$car; - } - - $car = '/(?:'.$car.')*'; - $i += 2 + isset($glob[$i + 3]); - - if ('/' === $delimiter) { - $car = str_replace('/', '\\/', $car); - } - } - - if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { - $regex .= "\\$car"; - } elseif ('*' === $car) { - $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); - } elseif ('?' === $car) { - $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); - } elseif ('{' === $car) { - $regex .= $escaping ? '\\{' : '('; - if (!$escaping) { - ++$inCurlies; - } - } elseif ('}' === $car && $inCurlies) { - $regex .= $escaping ? '}' : ')'; - if (!$escaping) { - --$inCurlies; - } - } elseif (',' === $car && $inCurlies) { - $regex .= $escaping ? ',' : '|'; - } elseif ('\\' === $car) { - if ($escaping) { - $regex .= '\\\\'; - $escaping = false; - } else { - $escaping = true; - } - - continue; - } else { - $regex .= $car; - } - $escaping = false; - } - - return $delimiter.'^'.$regex.'$'.$delimiter; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php deleted file mode 100644 index 82ee81d..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/CustomFilterIterator.php +++ /dev/null @@ -1,61 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * CustomFilterIterator filters files by applying anonymous functions. - * - * The anonymous function receives a \SplFileInfo and must return false - * to remove files. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class CustomFilterIterator extends \FilterIterator -{ - private array $filters = []; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param callable[] $filters An array of PHP callbacks - * - * @throws \InvalidArgumentException - */ - public function __construct(\Iterator $iterator, array $filters) - { - foreach ($filters as $filter) { - if (!\is_callable($filter)) { - throw new \InvalidArgumentException('Invalid PHP callback.'); - } - } - $this->filters = $filters; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - - foreach ($this->filters as $filter) { - if (false === $filter($fileinfo)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php deleted file mode 100644 index 718d42b..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\DateComparator; - -/** - * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class DateRangeFilterIterator extends \FilterIterator -{ - private array $comparators = []; - - /** - * @param \Iterator $iterator - * @param DateComparator[] $comparators - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - - if (!file_exists($fileinfo->getPathname())) { - return false; - } - - $filedate = $fileinfo->getMTime(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filedate)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php deleted file mode 100644 index 1cddb5f..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * DepthRangeFilterIterator limits the directory depth. - * - * @author Fabien Potencier - * - * @template-covariant TKey - * @template-covariant TValue - * - * @extends \FilterIterator - */ -class DepthRangeFilterIterator extends \FilterIterator -{ - private int $minDepth = 0; - - /** - * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter - * @param int $minDepth The min depth - * @param int $maxDepth The max depth - */ - public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) - { - $this->minDepth = $minDepth; - $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - return $this->getInnerIterator()->getDepth() >= $this->minDepth; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php deleted file mode 100644 index efe9364..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * ExcludeDirectoryFilterIterator filters out directories. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - * @implements \RecursiveIterator - */ -class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator -{ - /** @var \Iterator */ - private \Iterator $iterator; - private bool $isRecursive; - private array $excludedDirs = []; - private ?string $excludedPattern = null; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param string[] $directories An array of directories to exclude - */ - public function __construct(\Iterator $iterator, array $directories) - { - $this->iterator = $iterator; - $this->isRecursive = $iterator instanceof \RecursiveIterator; - $patterns = []; - foreach ($directories as $directory) { - $directory = rtrim($directory, '/'); - if (!$this->isRecursive || str_contains($directory, '/')) { - $patterns[] = preg_quote($directory, '#'); - } else { - $this->excludedDirs[$directory] = true; - } - } - if ($patterns) { - $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; - } - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { - return false; - } - - if ($this->excludedPattern) { - $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); - $path = str_replace('\\', '/', $path); - - return !preg_match($this->excludedPattern, $path); - } - - return true; - } - - public function hasChildren(): bool - { - return $this->isRecursive && $this->iterator->hasChildren(); - } - - public function getChildren(): self - { - $children = new self($this->iterator->getChildren(), []); - $children->excludedDirs = $this->excludedDirs; - $children->excludedPattern = $this->excludedPattern; - - return $children; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php deleted file mode 100644 index 2130378..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * FileTypeFilterIterator only keeps files, directories, or both. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class FileTypeFilterIterator extends \FilterIterator -{ - public const ONLY_FILES = 1; - public const ONLY_DIRECTORIES = 2; - - private int $mode; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) - */ - public function __construct(\Iterator $iterator, int $mode) - { - $this->mode = $mode; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { - return false; - } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { - return false; - } - - return true; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php deleted file mode 100644 index bdc71ff..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). - * - * @author Fabien Potencier - * @author Włodzimierz Gajda - * - * @extends MultiplePcreFilterIterator - */ -class FilecontentFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - if (!$this->matchRegexps && !$this->noMatchRegexps) { - return true; - } - - $fileinfo = $this->current(); - - if ($fileinfo->isDir() || !$fileinfo->isReadable()) { - return false; - } - - $content = $fileinfo->getContents(); - if (!$content) { - return false; - } - - return $this->isAccepted($content); - } - - /** - * Converts string to regexp if necessary. - * - * @param string $str Pattern: string or regexp - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php deleted file mode 100644 index 05d9535..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Glob; - -/** - * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). - * - * @author Fabien Potencier - * - * @extends MultiplePcreFilterIterator - */ -class FilenameFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - return $this->isAccepted($this->current()->getFilename()); - } - - /** - * Converts glob to regexp. - * - * PCRE patterns are left unchanged. - * Glob strings are transformed with Glob::toRegex(). - * - * @param string $str Pattern: glob or regexp - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : Glob::toRegex($str); - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php deleted file mode 100644 index 5b5806b..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/LazyIterator.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * @author Jérémy Derussé - * - * @internal - */ -class LazyIterator implements \IteratorAggregate -{ - private \Closure $iteratorFactory; - - public function __construct(callable $iteratorFactory) - { - $this->iteratorFactory = $iteratorFactory(...); - } - - public function getIterator(): \Traversable - { - yield from ($this->iteratorFactory)(); - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php deleted file mode 100644 index 82a9df3..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ /dev/null @@ -1,111 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). - * - * @author Fabien Potencier - * - * @template-covariant TKey - * @template-covariant TValue - * - * @extends \FilterIterator - */ -abstract class MultiplePcreFilterIterator extends \FilterIterator -{ - protected $matchRegexps = []; - protected $noMatchRegexps = []; - - /** - * @param \Iterator $iterator The Iterator to filter - * @param string[] $matchPatterns An array of patterns that need to match - * @param string[] $noMatchPatterns An array of patterns that need to not match - */ - public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) - { - foreach ($matchPatterns as $pattern) { - $this->matchRegexps[] = $this->toRegex($pattern); - } - - foreach ($noMatchPatterns as $pattern) { - $this->noMatchRegexps[] = $this->toRegex($pattern); - } - - parent::__construct($iterator); - } - - /** - * Checks whether the string is accepted by the regex filters. - * - * If there is no regexps defined in the class, this method will accept the string. - * Such case can be handled by child classes before calling the method if they want to - * apply a different behavior. - */ - protected function isAccepted(string $string): bool - { - // should at least not match one rule to exclude - foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $string)) { - return false; - } - } - - // should at least match one rule - if ($this->matchRegexps) { - foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $string)) { - return true; - } - } - - return false; - } - - // If there is no match rules, the file is accepted - return true; - } - - /** - * Checks whether the string is a regex. - */ - protected function isRegex(string $str): bool - { - $availableModifiers = 'imsxuADU'; - - if (\PHP_VERSION_ID >= 80200) { - $availableModifiers .= 'n'; - } - - if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { - $start = substr($m[1], 0, 1); - $end = substr($m[1], -1); - - if ($start === $end) { - return !preg_match('/[*?[:alnum:] \\\\]/', $start); - } - - foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { - if ($start === $delimiters[0] && $end === $delimiters[1]) { - return true; - } - } - } - - return false; - } - - /** - * Converts string into regexp. - */ - abstract protected function toRegex(string $str): string; -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php deleted file mode 100644 index c6d5813..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ /dev/null @@ -1,56 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\SplFileInfo; - -/** - * PathFilterIterator filters files by path patterns (e.g. some/special/dir). - * - * @author Fabien Potencier - * @author Włodzimierz Gajda - * - * @extends MultiplePcreFilterIterator - */ -class PathFilterIterator extends MultiplePcreFilterIterator -{ - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $filename = $this->current()->getRelativePathname(); - - if ('\\' === \DIRECTORY_SEPARATOR) { - $filename = str_replace('\\', '/', $filename); - } - - return $this->isAccepted($filename); - } - - /** - * Converts strings to regexp. - * - * PCRE patterns are left unchanged. - * - * Default conversion: - * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' - * - * Use only / as directory separator (on Windows also). - * - * @param string $str Pattern: regexp or dirname - */ - protected function toRegex(string $str): string - { - return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php deleted file mode 100644 index c321aee..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ /dev/null @@ -1,146 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Exception\AccessDeniedException; -use Symfony\Component\Finder\SplFileInfo; - -/** - * Extends the \RecursiveDirectoryIterator to support relative paths. - * - * @author Victor Berchet - * @extends \RecursiveDirectoryIterator - */ -class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator -{ - private bool $ignoreUnreadableDirs; - private ?bool $rewindable = null; - - // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations - private string $rootPath; - private string $subPath; - private string $directorySeparator = '/'; - - /** - * @throws \RuntimeException - */ - public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) - { - if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { - throw new \RuntimeException('This iterator only support returning current as fileinfo.'); - } - - parent::__construct($path, $flags); - $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; - $this->rootPath = $path; - if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { - $this->directorySeparator = \DIRECTORY_SEPARATOR; - } - } - - /** - * Return an instance of SplFileInfo with support for relative paths. - */ - public function current(): SplFileInfo - { - // the logic here avoids redoing the same work in all iterations - - if (!isset($this->subPath)) { - $this->subPath = $this->getSubPath(); - } - $subPathname = $this->subPath; - if ('' !== $subPathname) { - $subPathname .= $this->directorySeparator; - } - $subPathname .= $this->getFilename(); - - if ('/' !== $basePath = $this->rootPath) { - $basePath .= $this->directorySeparator; - } - - return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); - } - - public function hasChildren(bool $allowLinks = false): bool - { - $hasChildren = parent::hasChildren($allowLinks); - - if (!$hasChildren || !$this->ignoreUnreadableDirs) { - return $hasChildren; - } - - try { - parent::getChildren(); - - return true; - } catch (\UnexpectedValueException) { - // If directory is unreadable and finder is set to ignore it, skip children - return false; - } - } - - /** - * @throws AccessDeniedException - */ - public function getChildren(): \RecursiveDirectoryIterator - { - try { - $children = parent::getChildren(); - - if ($children instanceof self) { - // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore - $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; - - // performance optimization to avoid redoing the same work in all children - $children->rewindable = &$this->rewindable; - $children->rootPath = $this->rootPath; - } - - return $children; - } catch (\UnexpectedValueException $e) { - throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); - } - } - - /** - * Do nothing for non rewindable stream. - */ - public function rewind(): void - { - if (false === $this->isRewindable()) { - return; - } - - parent::rewind(); - } - - /** - * Checks if the stream is rewindable. - */ - public function isRewindable(): bool - { - if (null !== $this->rewindable) { - return $this->rewindable; - } - - if (false !== $stream = @opendir($this->getPath())) { - $infos = stream_get_meta_data($stream); - closedir($stream); - - if ($infos['seekable']) { - return $this->rewindable = true; - } - } - - return $this->rewindable = false; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php deleted file mode 100644 index 925830a..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Comparator\NumberComparator; - -/** - * SizeRangeFilterIterator filters out files that are not in the given size range. - * - * @author Fabien Potencier - * - * @extends \FilterIterator - */ -class SizeRangeFilterIterator extends \FilterIterator -{ - private array $comparators = []; - - /** - * @param \Iterator $iterator - * @param NumberComparator[] $comparators - */ - public function __construct(\Iterator $iterator, array $comparators) - { - $this->comparators = $comparators; - - parent::__construct($iterator); - } - - /** - * Filters the iterator values. - */ - public function accept(): bool - { - $fileinfo = $this->current(); - if (!$fileinfo->isFile()) { - return true; - } - - $filesize = $fileinfo->getSize(); - foreach ($this->comparators as $compare) { - if (!$compare->test($filesize)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php deleted file mode 100644 index 1c663e2..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/SortableIterator.php +++ /dev/null @@ -1,101 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -/** - * SortableIterator applies a sort on a given Iterator. - * - * @author Fabien Potencier - * - * @implements \IteratorAggregate - */ -class SortableIterator implements \IteratorAggregate -{ - public const SORT_BY_NONE = 0; - public const SORT_BY_NAME = 1; - public const SORT_BY_TYPE = 2; - public const SORT_BY_ACCESSED_TIME = 3; - public const SORT_BY_CHANGED_TIME = 4; - public const SORT_BY_MODIFIED_TIME = 5; - public const SORT_BY_NAME_NATURAL = 6; - - /** @var \Traversable $iterator */ - private \Traversable $iterator; - private \Closure|int $sort; - - /** - * @param \Traversable $iterator - * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) - * - * @throws \InvalidArgumentException - */ - public function __construct(\Traversable $iterator, int|callable $sort, bool $reverseOrder = false) - { - $this->iterator = $iterator; - $order = $reverseOrder ? -1 : 1; - - if (self::SORT_BY_NAME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_NAME_NATURAL === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_TYPE === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - if ($a->isDir() && $b->isFile()) { - return -$order; - } elseif ($a->isFile() && $b->isDir()) { - return $order; - } - - return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; - } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getATime() - $b->getATime()); - }; - } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getCTime() - $b->getCTime()); - }; - } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getMTime() - $b->getMTime()); - }; - } elseif (self::SORT_BY_NONE === $sort) { - $this->sort = $order; - } elseif (\is_callable($sort)) { - $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); - } else { - throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); - } - } - - public function getIterator(): \Traversable - { - if (1 === $this->sort) { - return $this->iterator; - } - - $array = iterator_to_array($this->iterator, true); - - if (-1 === $this->sort) { - $array = array_reverse($array); - } else { - uasort($array, $this->sort); - } - - return new \ArrayIterator($array); - } -} diff --git a/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php deleted file mode 100644 index 29fc2d9..0000000 --- a/vendor/passkit/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +++ /dev/null @@ -1,178 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder\Iterator; - -use Symfony\Component\Finder\Gitignore; - -/** - * @extends \FilterIterator - */ -final class VcsIgnoredFilterIterator extends \FilterIterator -{ - /** - * @var string - */ - private $baseDir; - - /** - * @var array - */ - private $gitignoreFilesCache = []; - - /** - * @var array - */ - private $ignoredPathsCache = []; - - /** - * @param \Iterator $iterator - */ - public function __construct(\Iterator $iterator, string $baseDir) - { - $this->baseDir = $this->normalizePath($baseDir); - - foreach ($this->parentDirectoriesUpwards($this->baseDir) as $parentDirectory) { - if (@is_dir("{$parentDirectory}/.git")) { - $this->baseDir = $parentDirectory; - break; - } - } - - parent::__construct($iterator); - } - - public function accept(): bool - { - $file = $this->current(); - - $fileRealPath = $this->normalizePath($file->getRealPath()); - - return !$this->isIgnored($fileRealPath); - } - - private function isIgnored(string $fileRealPath): bool - { - if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { - $fileRealPath .= '/'; - } - - if (isset($this->ignoredPathsCache[$fileRealPath])) { - return $this->ignoredPathsCache[$fileRealPath]; - } - - $ignored = false; - - foreach ($this->parentDirectoriesDownwards($fileRealPath) as $parentDirectory) { - if ($this->isIgnored($parentDirectory)) { - // rules in ignored directories are ignored, no need to check further. - break; - } - - $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); - - if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { - continue; - } - - [$exclusionRegex, $inclusionRegex] = $regexps; - - if (preg_match($exclusionRegex, $fileRelativePath)) { - $ignored = true; - - continue; - } - - if (preg_match($inclusionRegex, $fileRelativePath)) { - $ignored = false; - } - } - - return $this->ignoredPathsCache[$fileRealPath] = $ignored; - } - - /** - * @return list - */ - private function parentDirectoriesUpwards(string $from): array - { - $parentDirectories = []; - - $parentDirectory = $from; - - while (true) { - $newParentDirectory = \dirname($parentDirectory); - - // dirname('/') = '/' - if ($newParentDirectory === $parentDirectory) { - break; - } - - $parentDirectories[] = $parentDirectory = $newParentDirectory; - } - - return $parentDirectories; - } - - private function parentDirectoriesUpTo(string $from, string $upTo): array - { - return array_filter( - $this->parentDirectoriesUpwards($from), - static function (string $directory) use ($upTo): bool { - return str_starts_with($directory, $upTo); - } - ); - } - - /** - * @return list - */ - private function parentDirectoriesDownwards(string $fileRealPath): array - { - return array_reverse( - $this->parentDirectoriesUpTo($fileRealPath, $this->baseDir) - ); - } - - /** - * @return array{0: string, 1: string}|null - */ - private function readGitignoreFile(string $path): ?array - { - if (\array_key_exists($path, $this->gitignoreFilesCache)) { - return $this->gitignoreFilesCache[$path]; - } - - if (!file_exists($path)) { - return $this->gitignoreFilesCache[$path] = null; - } - - if (!is_file($path) || !is_readable($path)) { - throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); - } - - $gitignoreFileContent = file_get_contents($path); - - return $this->gitignoreFilesCache[$path] = [ - Gitignore::toRegex($gitignoreFileContent), - Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), - ]; - } - - private function normalizePath(string $path): string - { - if ('\\' === \DIRECTORY_SEPARATOR) { - return str_replace('\\', '/', $path); - } - - return $path; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/LICENSE b/vendor/passkit/vendor/symfony/finder/LICENSE deleted file mode 100644 index 88bf75b..0000000 --- a/vendor/passkit/vendor/symfony/finder/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/vendor/passkit/vendor/symfony/finder/README.md b/vendor/passkit/vendor/symfony/finder/README.md deleted file mode 100644 index 22bdeb9..0000000 --- a/vendor/passkit/vendor/symfony/finder/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Finder Component -================ - -The Finder component finds files and directories via an intuitive fluent -interface. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/finder.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/passkit/vendor/symfony/finder/SplFileInfo.php b/vendor/passkit/vendor/symfony/finder/SplFileInfo.php deleted file mode 100644 index 867e8e8..0000000 --- a/vendor/passkit/vendor/symfony/finder/SplFileInfo.php +++ /dev/null @@ -1,82 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Finder; - -/** - * Extends \SplFileInfo to support relative paths. - * - * @author Fabien Potencier - */ -class SplFileInfo extends \SplFileInfo -{ - private string $relativePath; - private string $relativePathname; - - /** - * @param string $file The file name - * @param string $relativePath The relative path - * @param string $relativePathname The relative path name - */ - public function __construct(string $file, string $relativePath, string $relativePathname) - { - parent::__construct($file); - $this->relativePath = $relativePath; - $this->relativePathname = $relativePathname; - } - - /** - * Returns the relative path. - * - * This path does not contain the file name. - */ - public function getRelativePath(): string - { - return $this->relativePath; - } - - /** - * Returns the relative path name. - * - * This path contains the file name. - */ - public function getRelativePathname(): string - { - return $this->relativePathname; - } - - public function getFilenameWithoutExtension(): string - { - $filename = $this->getFilename(); - - return pathinfo($filename, \PATHINFO_FILENAME); - } - - /** - * Returns the contents of the file. - * - * @throws \RuntimeException - */ - public function getContents(): string - { - set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); - try { - $content = file_get_contents($this->getPathname()); - } finally { - restore_error_handler(); - } - if (false === $content) { - throw new \RuntimeException($error); - } - - return $content; - } -} diff --git a/vendor/passkit/vendor/symfony/finder/composer.json b/vendor/passkit/vendor/symfony/finder/composer.json deleted file mode 100644 index 06d129c..0000000 --- a/vendor/passkit/vendor/symfony/finder/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "symfony/finder", - "type": "library", - "description": "Finds files and directories via an intuitive fluent interface", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Finder\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php b/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php deleted file mode 100644 index ba75a2c..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/Ctype.php +++ /dev/null @@ -1,232 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Ctype; - -/** - * Ctype implementation through regex. - * - * @internal - * - * @author Gert de Pagter - */ -final class Ctype -{ - /** - * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. - * - * @see https://php.net/ctype-alnum - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alnum($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is a letter, FALSE otherwise. - * - * @see https://php.net/ctype-alpha - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_alpha($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); - } - - /** - * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. - * - * @see https://php.net/ctype-cntrl - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_cntrl($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); - } - - /** - * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. - * - * @see https://php.net/ctype-digit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_digit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); - } - - /** - * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. - * - * @see https://php.net/ctype-graph - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_graph($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); - } - - /** - * Returns TRUE if every character in text is a lowercase letter. - * - * @see https://php.net/ctype-lower - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_lower($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); - } - - /** - * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. - * - * @see https://php.net/ctype-print - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_print($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); - } - - /** - * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. - * - * @see https://php.net/ctype-punct - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_punct($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); - } - - /** - * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. - * - * @see https://php.net/ctype-space - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_space($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); - } - - /** - * Returns TRUE if every character in text is an uppercase letter. - * - * @see https://php.net/ctype-upper - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_upper($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); - } - - /** - * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. - * - * @see https://php.net/ctype-xdigit - * - * @param mixed $text - * - * @return bool - */ - public static function ctype_xdigit($text) - { - $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); - - return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); - } - - /** - * Converts integers to their char versions according to normal ctype behaviour, if needed. - * - * If an integer between -128 and 255 inclusive is provided, - * it is interpreted as the ASCII value of a single character - * (negative values have 256 added in order to allow characters in the Extended ASCII range). - * Any other integer is interpreted as a string containing the decimal digits of the integer. - * - * @param mixed $int - * @param string $function - * - * @return mixed - */ - private static function convert_int_to_char_for_ctype($int, $function) - { - if (!\is_int($int)) { - return $int; - } - - if ($int < -128 || $int > 255) { - return (string) $int; - } - - if (\PHP_VERSION_ID >= 80100) { - @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); - } - - if ($int < 0) { - $int += 256; - } - - return \chr($int); - } -} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE b/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE deleted file mode 100644 index 3f853aa..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2018-2019 Fabien Potencier - -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/vendor/passkit/vendor/symfony/polyfill-ctype/README.md b/vendor/passkit/vendor/symfony/polyfill-ctype/README.md deleted file mode 100644 index b144d03..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Symfony Polyfill / Ctype -======================== - -This component provides `ctype_*` functions to users who run php versions without the ctype extension. - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php deleted file mode 100644 index d54524b..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (\PHP_VERSION_ID >= 80000) { - return require __DIR__.'/bootstrap80.php'; -} - -if (!function_exists('ctype_alnum')) { - function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit($text) { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph($text) { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower($text) { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print($text) { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct($text) { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space($text) { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper($text) { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } -} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php b/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php deleted file mode 100644 index ab2f861..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/bootstrap80.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Ctype as p; - -if (!function_exists('ctype_alnum')) { - function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } -} -if (!function_exists('ctype_alpha')) { - function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } -} -if (!function_exists('ctype_cntrl')) { - function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } -} -if (!function_exists('ctype_digit')) { - function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } -} -if (!function_exists('ctype_graph')) { - function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } -} -if (!function_exists('ctype_lower')) { - function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } -} -if (!function_exists('ctype_print')) { - function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } -} -if (!function_exists('ctype_punct')) { - function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } -} -if (!function_exists('ctype_space')) { - function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } -} -if (!function_exists('ctype_upper')) { - function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } -} -if (!function_exists('ctype_xdigit')) { - function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } -} diff --git a/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json b/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json deleted file mode 100644 index ee5c931..0000000 --- a/vendor/passkit/vendor/symfony/polyfill-ctype/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/polyfill-ctype", - "type": "library", - "description": "Symfony polyfill for ctype functions", - "keywords": ["polyfill", "compatibility", "portable", "ctype"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md b/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md deleted file mode 100644 index 3fb33a8..0000000 --- a/vendor/passkit/vendor/symfony/yaml/CHANGELOG.md +++ /dev/null @@ -1,242 +0,0 @@ -CHANGELOG -========= - -6.1 ---- - - * In cases where it will likely improve readability, strings containing single quotes will be double-quoted - -5.4 ---- - - * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` - option to exclude one or more specific files from multiple file list - * Allow negatable for the parse tags option with `--no-parse-tags` - -5.3 ---- - - * Added `github` format support & autodetection to render errors as annotations - when running the YAML linter command in a Github Action environment. - -5.1.0 ------ - - * Added support for parsing numbers prefixed with `0o` as octal numbers. - * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` - so that they are parsed as octal numbers. - - Before: - - ```yaml - Yaml::parse('072'); - ``` - - After: - - ```yaml - Yaml::parse('0o72'); - ``` - - * Added `yaml-lint` binary. - * Deprecated using the `!php/object` and `!php/const` tags without a value. - -5.0.0 ------ - - * Removed support for mappings inside multi-line strings. - * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.4.0 ------ - - * Added support for parsing the inline notation spanning multiple lines. - * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. - * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. - -4.3.0 ------ - - * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. - -4.2.0 ------ - - * added support for multiple files or directories in `LintCommand` - -4.0.0 ------ - - * The behavior of the non-specific tag `!` is changed and now forces - non-evaluating your values. - * complex mappings will throw a `ParseException` - * support for the comma as a group separator for floats has been dropped, use - the underscore instead - * support for the `!!php/object` tag has been dropped, use the `!php/object` - tag instead - * duplicate mapping keys throw a `ParseException` - * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` - flag to cast them to strings - * `%` at the beginning of an unquoted string throw a `ParseException` - * mappings with a colon (`:`) that is not followed by a whitespace throw a - `ParseException` - * the `Dumper::setIndentation()` method has been removed - * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, - `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of - the parser and dumper is no longer supported, pass bitmask flags instead - * the constructor arguments of the `Parser` class have been removed - * the `Inline` class is internal and no longer part of the BC promise - * removed support for the `!str` tag, use the `!!str` tag instead - * added support for tagged scalars. - - ```yml - Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); - // returns TaggedValue('foo', 'bar'); - ``` - -3.4.0 ------ - - * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method - - * the `Dumper`, `Parser`, and `Yaml` classes are marked as final - - * Deprecated the `!php/object:` tag which will be replaced by the - `!php/object` tag (without the colon) in 4.0. - - * Deprecated the `!php/const:` tag which will be replaced by the - `!php/const` tag (without the colon) in 4.0. - - * Support for the `!str` tag is deprecated, use the `!!str` tag instead. - - * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. - It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. - -3.3.0 ------ - - * Starting an unquoted string with a question mark followed by a space is - deprecated and will throw a `ParseException` in Symfony 4.0. - - * Deprecated support for implicitly parsing non-string mapping keys as strings. - Mapping keys that are no strings will lead to a `ParseException` in Symfony - 4.0. Use quotes to opt-in for keys to be parsed as strings. - - Before: - - ```php - $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); - ``` - -3.0.0 ------ - - * Yaml::parse() now throws an exception when a blackslash is not escaped - in double-quoted strings - -2.8.0 ------ - - * Deprecated usage of a colon in an unquoted mapping value - * Deprecated usage of @, \`, | and > at the beginning of an unquoted string - * When surrounding strings with double-quotes, you must now escape `\` characters. Not - escaping those characters (when surrounded by double-quotes) is deprecated. - - Before: - - ```yml - class: "Foo\Var" - ``` - - After: - - ```yml - class: "Foo\\Var" - ``` - -2.1.0 ------ - - * Yaml::parse() does not evaluate loaded files as PHP files by default - anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php b/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php deleted file mode 100644 index 66eb250..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Command/LintCommand.php +++ /dev/null @@ -1,279 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Command; - -use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\CI\GithubActionReporter; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Completion\CompletionInput; -use Symfony\Component\Console\Completion\CompletionSuggestions; -use Symfony\Component\Console\Exception\InvalidArgumentException; -use Symfony\Component\Console\Exception\RuntimeException; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Style\SymfonyStyle; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Parser; -use Symfony\Component\Yaml\Yaml; - -/** - * Validates YAML files syntax and outputs encountered errors. - * - * @author Grégoire Pineau - * @author Robin Chalas - */ -#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')] -class LintCommand extends Command -{ - private Parser $parser; - private ?string $format = null; - private bool $displayCorrectFiles; - private ?\Closure $directoryIteratorProvider; - private ?\Closure $isReadableProvider; - - public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) - { - parent::__construct($name); - - $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); - $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') - ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format') - ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude') - ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null) - ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT -the first encountered syntax error. - -You can validates YAML contents passed from STDIN: - - cat filename | php %command.full_name% - - -You can also validate the syntax of a file: - - php %command.full_name% filename - -Or of a whole directory: - - php %command.full_name% dirname - php %command.full_name% dirname --format=json - -You can also exclude one or more specific files: - - php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml" - -EOF - ) - ; - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $io = new SymfonyStyle($input, $output); - $filenames = (array) $input->getArgument('filename'); - $excludes = $input->getOption('exclude'); - $this->format = $input->getOption('format'); - $flags = $input->getOption('parse-tags'); - - if ('github' === $this->format && !class_exists(GithubActionReporter::class)) { - throw new \InvalidArgumentException('The "github" format is only available since "symfony/console" >= 5.3.'); - } - - if (null === $this->format) { - // Autodetect format according to CI environment - $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt'; - } - - $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0; - - $this->displayCorrectFiles = $output->isVerbose(); - - if (['-'] === $filenames) { - return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); - } - - if (!$filenames) { - throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); - } - - $filesInfo = []; - foreach ($filenames as $filename) { - if (!$this->isReadable($filename)) { - throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); - } - - foreach ($this->getFiles($filename) as $file) { - if (!\in_array($file->getPathname(), $excludes, true)) { - $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); - } - } - } - - return $this->display($io, $filesInfo); - } - - private function validate(string $content, int $flags, string $file = null) - { - $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { - if (\E_USER_DEPRECATED === $level) { - throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); - } - - return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; - }); - - try { - $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); - } catch (ParseException $e) { - return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; - } finally { - restore_error_handler(); - } - - return ['file' => $file, 'valid' => true]; - } - - private function display(SymfonyStyle $io, array $files): int - { - return match ($this->format) { - 'txt' => $this->displayTxt($io, $files), - 'json' => $this->displayJson($io, $files), - 'github' => $this->displayTxt($io, $files, true), - default => throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)), - }; - } - - private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int - { - $countFiles = \count($filesInfo); - $erroredFiles = 0; - $suggestTagOption = false; - - if ($errorAsGithubAnnotations) { - $githubReporter = new GithubActionReporter($io); - } - - foreach ($filesInfo as $info) { - if ($info['valid'] && $this->displayCorrectFiles) { - $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); - } elseif (!$info['valid']) { - ++$erroredFiles; - $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); - $io->text(sprintf(' >> %s', $info['message'])); - - if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) { - $suggestTagOption = true; - } - - if ($errorAsGithubAnnotations) { - $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']); - } - } - } - - if (0 === $erroredFiles) { - $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); - } else { - $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); - } - - return min($erroredFiles, 1); - } - - private function displayJson(SymfonyStyle $io, array $filesInfo): int - { - $errors = 0; - - array_walk($filesInfo, function (&$v) use (&$errors) { - $v['file'] = (string) $v['file']; - if (!$v['valid']) { - ++$errors; - } - - if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) { - $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; - } - }); - - $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); - - return min($errors, 1); - } - - private function getFiles(string $fileOrDirectory): iterable - { - if (is_file($fileOrDirectory)) { - yield new \SplFileInfo($fileOrDirectory); - - return; - } - - foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { - if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { - continue; - } - - yield $file; - } - } - - private function getParser(): Parser - { - return $this->parser ??= new Parser(); - } - - private function getDirectoryIterator(string $directory): iterable - { - $default = function ($directory) { - return new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - }; - - if (null !== $this->directoryIteratorProvider) { - return ($this->directoryIteratorProvider)($directory, $default); - } - - return $default($directory); - } - - private function isReadable(string $fileOrDirectory): bool - { - $default = function ($fileOrDirectory) { - return is_readable($fileOrDirectory); - }; - - if (null !== $this->isReadableProvider) { - return ($this->isReadableProvider)($fileOrDirectory, $default); - } - - return $default($fileOrDirectory); - } - - public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void - { - if ($input->mustSuggestOptionValuesFor('format')) { - $suggestions->suggestValues(['txt', 'json', 'github']); - } - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Dumper.php b/vendor/passkit/vendor/symfony/yaml/Dumper.php deleted file mode 100644 index 56979c7..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Dumper.php +++ /dev/null @@ -1,138 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Dumper dumps PHP variables to YAML strings. - * - * @author Fabien Potencier - * - * @final - */ -class Dumper -{ - /** - * The amount of spaces to use for indentation of nested nodes. - */ - private int $indentation; - - public function __construct(int $indentation = 4) - { - if ($indentation < 1) { - throw new \InvalidArgumentException('The indentation must be greater than zero.'); - } - - $this->indentation = $indentation; - } - - /** - * Dumps a PHP value to YAML. - * - * @param mixed $input The PHP value - * @param int $inline The level where you switch to inline YAML - * @param int $indent The level of indentation (used internally) - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - */ - public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string - { - $output = ''; - $prefix = $indent ? str_repeat(' ', $indent) : ''; - $dumpObjectAsInlineMap = true; - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $input); - } - - if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { - $output .= $prefix.Inline::dump($input, $flags); - } else { - $dumpAsMap = Inline::isHash($input); - - foreach ($input as $key => $value) { - if ('' !== $output && "\n" !== $output[-1]) { - $output .= "\n"; - } - - if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) { - // If the first line starts with a space character, the spec requires a blockIndicationIndicator - // http://www.yaml.org/spec/1.2/spec.html#id2793979 - $blockIndentationIndicator = str_starts_with($value, ' ') ? (string) $this->indentation : ''; - - if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) { - $blockChompingIndicator = '+'; - } elseif ("\n" === $value[-1]) { - $blockChompingIndicator = ''; - } else { - $blockChompingIndicator = '-'; - } - - $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator); - - foreach (explode("\n", $value) as $row) { - if ('' === $row) { - $output .= "\n"; - } else { - $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); - } - } - - continue; - } - - if ($value instanceof TaggedValue) { - $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); - - if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) { - // If the first line starts with a space character, the spec requires a blockIndicationIndicator - // http://www.yaml.org/spec/1.2/spec.html#id2793979 - $blockIndentationIndicator = str_starts_with($value->getValue(), ' ') ? (string) $this->indentation : ''; - $output .= sprintf(' |%s', $blockIndentationIndicator); - - foreach (explode("\n", $value->getValue()) as $row) { - $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); - } - - continue; - } - - if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) { - $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; - } else { - $output .= "\n"; - $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); - } - - continue; - } - - $dumpObjectAsInlineMap = true; - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { - $dumpObjectAsInlineMap = empty((array) $value); - } - - $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); - - $output .= sprintf('%s%s%s%s', - $prefix, - $dumpAsMap ? Inline::dump($key, $flags).':' : '-', - $willBeInlined ? ' ' : "\n", - $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) - ).($willBeInlined ? "\n" : ''); - } - } - - return $output; - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Escaper.php b/vendor/passkit/vendor/symfony/yaml/Escaper.php deleted file mode 100644 index e8090d8..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Escaper.php +++ /dev/null @@ -1,95 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -/** - * Escaper encapsulates escaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - * - * @internal - */ -class Escaper -{ - // Characters that would cause a dumped string to require double quoting. - public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; - - // Mapping arrays for escaping a double quoted string. The backslash is - // first to ensure proper escaping because str_replace operates iteratively - // on the input arrays. This ordering of the characters avoids the use of strtr, - // which performs more slowly. - private const ESCAPEES = ['\\', '\\\\', '\\"', '"', - "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", - "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", - "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", - "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", - "\x7f", - "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", - ]; - private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"', - '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', - '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', - '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', - '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', - '\\x7f', - '\\N', '\\_', '\\L', '\\P', - ]; - - /** - * Determines if a PHP value would require double quoting in YAML. - * - * @param string $value A PHP value - */ - public static function requiresDoubleQuoting(string $value): bool - { - return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); - } - - /** - * Escapes and surrounds a PHP value with double quotes. - * - * @param string $value A PHP value - */ - public static function escapeWithDoubleQuotes(string $value): string - { - return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value)); - } - - /** - * Determines if a PHP value would require single quoting in YAML. - * - * @param string $value A PHP value - */ - public static function requiresSingleQuoting(string $value): bool - { - // Determines if a PHP value is entirely composed of a value that would - // require single quoting in YAML. - if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { - return true; - } - - // Determines if the PHP value contains any single characters that would - // cause it to require single quoting in YAML. - return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value); - } - - /** - * Escapes and surrounds a PHP value with single quotes. - * - * @param string $value A PHP value - */ - public static function escapeWithSingleQuotes(string $value): string - { - return sprintf("'%s'", str_replace('\'', '\'\'', $value)); - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php b/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php deleted file mode 100644 index cce972f..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Exception/DumpException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during dumping. - * - * @author Fabien Potencier - */ -class DumpException extends RuntimeException -{ -} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php b/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php deleted file mode 100644 index 9091316..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Exception/ExceptionInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception interface for all exceptions thrown by the component. - * - * @author Fabien Potencier - */ -interface ExceptionInterface extends \Throwable -{ -} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php b/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php deleted file mode 100644 index 07c59b9..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Exception/ParseException.php +++ /dev/null @@ -1,126 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Fabien Potencier - */ -class ParseException extends RuntimeException -{ - private ?string $parsedFile; - private int $parsedLine; - private ?string $snippet; - private string $rawMessage; - - /** - * @param string $message The error message - * @param int $parsedLine The line where the error occurred - * @param string|null $snippet The snippet of code near the problem - * @param string|null $parsedFile The file name where the error occurred - */ - public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) - { - $this->parsedFile = $parsedFile; - $this->parsedLine = $parsedLine; - $this->snippet = $snippet; - $this->rawMessage = $message; - - $this->updateRepr(); - - parent::__construct($this->message, 0, $previous); - } - - /** - * Gets the snippet of code near the error. - */ - public function getSnippet(): string - { - return $this->snippet; - } - - /** - * Sets the snippet of code near the error. - */ - public function setSnippet(string $snippet) - { - $this->snippet = $snippet; - - $this->updateRepr(); - } - - /** - * Gets the filename where the error occurred. - * - * This method returns null if a string is parsed. - */ - public function getParsedFile(): string - { - return $this->parsedFile; - } - - /** - * Sets the filename where the error occurred. - */ - public function setParsedFile(string $parsedFile) - { - $this->parsedFile = $parsedFile; - - $this->updateRepr(); - } - - /** - * Gets the line where the error occurred. - */ - public function getParsedLine(): int - { - return $this->parsedLine; - } - - /** - * Sets the line where the error occurred. - */ - public function setParsedLine(int $parsedLine) - { - $this->parsedLine = $parsedLine; - - $this->updateRepr(); - } - - private function updateRepr() - { - $this->message = $this->rawMessage; - - $dot = false; - if (str_ends_with($this->message, '.')) { - $this->message = substr($this->message, 0, -1); - $dot = true; - } - - if (null !== $this->parsedFile) { - $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); - } - - if ($this->parsedLine >= 0) { - $this->message .= sprintf(' at line %d', $this->parsedLine); - } - - if ($this->snippet) { - $this->message .= sprintf(' (near "%s")', $this->snippet); - } - - if ($dot) { - $this->message .= '.'; - } - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php b/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php deleted file mode 100644 index 3f36b73..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Exception/RuntimeException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Exception; - -/** - * Exception class thrown when an error occurs during parsing. - * - * @author Romain Neutron - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/vendor/passkit/vendor/symfony/yaml/Inline.php b/vendor/passkit/vendor/symfony/yaml/Inline.php deleted file mode 100644 index 1a862b7..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Inline.php +++ /dev/null @@ -1,779 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\DumpException; -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Inline implements a YAML parser/dumper for the YAML inline syntax. - * - * @author Fabien Potencier - * - * @internal - */ -class Inline -{ - public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; - - public static int $parsedLineNumber = -1; - public static ?string $parsedFilename = null; - - private static bool $exceptionOnInvalidType = false; - private static bool $objectSupport = false; - private static bool $objectForMap = false; - private static bool $constantSupport = false; - - public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) - { - self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); - self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); - self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); - self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); - self::$parsedFilename = $parsedFilename; - - if (null !== $parsedLineNumber) { - self::$parsedLineNumber = $parsedLineNumber; - } - } - - /** - * Converts a YAML string to a PHP value. - * - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * @param array $references Mapping of variable names to values - * - * @throws ParseException - */ - public static function parse(string $value = null, int $flags = 0, array &$references = []): mixed - { - self::initialize($flags); - - $value = trim($value); - - if ('' === $value) { - return ''; - } - - $i = 0; - $tag = self::parseTag($value, $i, $flags); - switch ($value[$i]) { - case '[': - $result = self::parseSequence($value, $flags, $i, $references); - ++$i; - break; - case '{': - $result = self::parseMapping($value, $flags, $i, $references); - ++$i; - break; - default: - $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references); - } - - // some comments are allowed at the end - if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) { - throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if (null !== $tag && '' !== $tag) { - return new TaggedValue($tag, $result); - } - - return $result; - } - - /** - * Dumps a given PHP variable to a YAML string. - * - * @param mixed $value The PHP variable to convert - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - * - * @throws DumpException When trying to dump PHP resource - */ - public static function dump(mixed $value, int $flags = 0): string - { - switch (true) { - case \is_resource($value): - if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { - throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); - } - - return self::dumpNull($flags); - case $value instanceof \DateTimeInterface: - return $value->format('c'); - case $value instanceof \UnitEnum: - return sprintf('!php/const %s::%s', \get_class($value), $value->name); - case \is_object($value): - if ($value instanceof TaggedValue) { - return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); - } - - if (Yaml::DUMP_OBJECT & $flags) { - return '!php/object '.self::dump(serialize($value)); - } - - if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { - $output = []; - - foreach ($value as $key => $val) { - $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); - } - - return sprintf('{ %s }', implode(', ', $output)); - } - - if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { - throw new DumpException('Object support when dumping a YAML file has been disabled.'); - } - - return self::dumpNull($flags); - case \is_array($value): - return self::dumpArray($value, $flags); - case null === $value: - return self::dumpNull($flags); - case true === $value: - return 'true'; - case false === $value: - return 'false'; - case \is_int($value): - return $value; - case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"): - $locale = setlocale(\LC_NUMERIC, 0); - if (false !== $locale) { - setlocale(\LC_NUMERIC, 'C'); - } - if (\is_float($value)) { - $repr = (string) $value; - if (is_infinite($value)) { - $repr = str_ireplace('INF', '.Inf', $repr); - } elseif (floor($value) == $value && $repr == $value) { - // Preserve float data type since storing a whole number will result in integer value. - if (!str_contains($repr, 'E')) { - $repr = $repr.'.0'; - } - } - } else { - $repr = \is_string($value) ? "'$value'" : (string) $value; - } - if (false !== $locale) { - setlocale(\LC_NUMERIC, $locale); - } - - return $repr; - case '' == $value: - return "''"; - case self::isBinaryString($value): - return '!!binary '.base64_encode($value); - case Escaper::requiresDoubleQuoting($value): - return Escaper::escapeWithDoubleQuotes($value); - case Escaper::requiresSingleQuoting($value): - $singleQuoted = Escaper::escapeWithSingleQuotes($value); - if (!str_contains($value, "'")) { - return $singleQuoted; - } - // Attempt double-quoting the string instead to see if it's more efficient. - $doubleQuoted = Escaper::escapeWithDoubleQuotes($value); - - return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted; - case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): - case Parser::preg_match(self::getHexRegex(), $value): - case Parser::preg_match(self::getTimestampRegex(), $value): - return Escaper::escapeWithSingleQuotes($value); - default: - return $value; - } - } - - /** - * Check if given array is hash or just normal indexed array. - */ - public static function isHash(array|\ArrayObject|\stdClass $value): bool - { - if ($value instanceof \stdClass || $value instanceof \ArrayObject) { - return true; - } - - $expectedKey = 0; - - foreach ($value as $key => $val) { - if ($key !== $expectedKey++) { - return true; - } - } - - return false; - } - - /** - * Dumps a PHP array to a YAML string. - * - * @param array $value The PHP array to dump - * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string - */ - private static function dumpArray(array $value, int $flags): string - { - // array - if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { - $output = []; - foreach ($value as $val) { - $output[] = self::dump($val, $flags); - } - - return sprintf('[%s]', implode(', ', $output)); - } - - // hash - $output = []; - foreach ($value as $key => $val) { - $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); - } - - return sprintf('{ %s }', implode(', ', $output)); - } - - private static function dumpNull(int $flags): string - { - if (Yaml::DUMP_NULL_AS_TILDE & $flags) { - return '~'; - } - - return 'null'; - } - - /** - * Parses a YAML scalar. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null): mixed - { - if (\in_array($scalar[$i], ['"', "'"], true)) { - // quoted scalar - $isQuoted = true; - $output = self::parseQuotedScalar($scalar, $i); - - if (null !== $delimiters) { - $tmp = ltrim(substr($scalar, $i), " \n"); - if ('' === $tmp) { - throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - if (!\in_array($tmp[0], $delimiters)) { - throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - } - } else { - // "normal" string - $isQuoted = false; - - if (!$delimiters) { - $output = substr($scalar, $i); - $i += \strlen($output); - - // remove comments - if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) { - $output = substr($output, 0, $match[0][1]); - } - } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { - $output = $match[1]; - $i += \strlen($output); - $output = trim($output); - } else { - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) - if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { - throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); - } - - if ($evaluate) { - $output = self::evaluateScalar($output, $flags, $references, $isQuoted); - } - } - - return $output; - } - - /** - * Parses a YAML quoted scalar. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseQuotedScalar(string $scalar, int &$i = 0): string - { - if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - $output = substr($match[0], 1, -1); - - $unescaper = new Unescaper(); - if ('"' == $scalar[$i]) { - $output = $unescaper->unescapeDoubleQuotedString($output); - } else { - $output = $unescaper->unescapeSingleQuotedString($output); - } - - $i += \strlen($match[0]); - - return $output; - } - - /** - * Parses a YAML sequence. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array - { - $output = []; - $len = \strlen($sequence); - ++$i; - - // [foo, bar, ...] - while ($i < $len) { - if (']' === $sequence[$i]) { - return $output; - } - if (',' === $sequence[$i] || ' ' === $sequence[$i]) { - ++$i; - - continue; - } - - $tag = self::parseTag($sequence, $i, $flags); - switch ($sequence[$i]) { - case '[': - // nested sequence - $value = self::parseSequence($sequence, $flags, $i, $references); - break; - case '{': - // nested mapping - $value = self::parseMapping($sequence, $flags, $i, $references); - break; - default: - $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); - - // the value can be an array if a reference has been resolved to an array var - if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { - // embedded mapping? - try { - $pos = 0; - $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); - } catch (\InvalidArgumentException) { - // no, it's not - } - } - - if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { - $references[$matches['ref']] = $matches['value']; - $value = $matches['value']; - } - - --$i; - } - - if (null !== $tag && '' !== $tag) { - $value = new TaggedValue($tag, $value); - } - - $output[] = $value; - - ++$i; - } - - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - /** - * Parses a YAML mapping. - * - * @throws ParseException When malformed inline YAML string is parsed - */ - private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass - { - $output = []; - $len = \strlen($mapping); - ++$i; - $allowOverwrite = false; - - // {foo: bar, bar:foo, ...} - while ($i < $len) { - switch ($mapping[$i]) { - case ' ': - case ',': - case "\n": - ++$i; - continue 2; - case '}': - if (self::$objectForMap) { - return (object) $output; - } - - return $output; - } - - // key - $offsetBeforeKeyParsing = $i; - $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); - $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); - - if ($offsetBeforeKeyParsing === $i) { - throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); - } - - if ('!php/const' === $key) { - $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false); - $key = self::evaluateScalar($key, $flags); - } - - if (false === $i = strpos($mapping, ':', $i)) { - break; - } - - if (!$isKeyQuoted) { - $evaluatedKey = self::evaluateScalar($key, $flags, $references); - - if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { - throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); - } - } - - if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { - throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); - } - - if ('<<' === $key) { - $allowOverwrite = true; - } - - while ($i < $len) { - if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { - ++$i; - - continue; - } - - $tag = self::parseTag($mapping, $i, $flags); - switch ($mapping[$i]) { - case '[': - // nested sequence - $value = self::parseSequence($mapping, $flags, $i, $references); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - foreach ($value as $parsedValue) { - $output += $parsedValue; - } - } elseif ($allowOverwrite || !isset($output[$key])) { - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - break; - case '{': - // nested mapping - $value = self::parseMapping($mapping, $flags, $i, $references); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - $output += $value; - } elseif ($allowOverwrite || !isset($output[$key])) { - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - break; - default: - $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted); - // Spec: Keys MUST be unique; first one wins. - // Parser cannot abort this mapping earlier, since lines - // are processed sequentially. - // But overwriting is allowed when a merge node is used in current block. - if ('<<' === $key) { - $output += $value; - } elseif ($allowOverwrite || !isset($output[$key])) { - if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { - $references[$matches['ref']] = $matches['value']; - $value = $matches['value']; - } - - if (null !== $tag) { - $output[$key] = new TaggedValue($tag, $value); - } else { - $output[$key] = $value; - } - } elseif (isset($output[$key])) { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); - } - --$i; - } - ++$i; - - continue 2; - } - } - - throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); - } - - /** - * Evaluates scalars and replaces magic values. - * - * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved - */ - private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null): mixed - { - $isQuotedString = false; - $scalar = trim($scalar); - - if (str_starts_with($scalar, '*')) { - if (false !== $pos = strpos($scalar, '#')) { - $value = substr($scalar, 1, $pos - 2); - } else { - $value = substr($scalar, 1); - } - - // an unquoted * - if (false === $value || '' === $value) { - throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if (!\array_key_exists($value, $references)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - return $references[$value]; - } - - $scalarLower = strtolower($scalar); - - switch (true) { - case 'null' === $scalarLower: - case '' === $scalar: - case '~' === $scalar: - return null; - case 'true' === $scalarLower: - return true; - case 'false' === $scalarLower: - return false; - case '!' === $scalar[0]: - switch (true) { - case str_starts_with($scalar, '!!str '): - $s = (string) substr($scalar, 6); - - if (\in_array($s[0] ?? '', ['"', "'"], true)) { - $isQuotedString = true; - $s = self::parseQuotedScalar($s); - } - - return $s; - case str_starts_with($scalar, '! '): - return substr($scalar, 2); - case str_starts_with($scalar, '!php/object'): - if (self::$objectSupport) { - if (!isset($scalar[12])) { - throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return unserialize(self::parseScalar(substr($scalar, 12))); - } - - if (self::$exceptionOnInvalidType) { - throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return null; - case str_starts_with($scalar, '!php/const'): - if (self::$constantSupport) { - if (!isset($scalar[11])) { - throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - $i = 0; - if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { - return \constant($const); - } - - throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - if (self::$exceptionOnInvalidType) { - throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return null; - case str_starts_with($scalar, '!!float '): - return (float) substr($scalar, 8); - case str_starts_with($scalar, '!!binary '): - return self::evaluateBinaryScalar(substr($scalar, 9)); - } - - throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); - case preg_match('/^(?:\+|-)?0o(?P[0-7_]++)$/', $scalar, $matches): - $value = str_replace('_', '', $matches['value']); - - if ('-' === $scalar[0]) { - return -octdec($value); - } - - return octdec($value); - // Optimize for returning strings. - case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]): - if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { - $scalar = str_replace('_', '', $scalar); - } - - switch (true) { - case ctype_digit($scalar): - case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): - $cast = (int) $scalar; - - return ($scalar === (string) $cast) ? $cast : $scalar; - case is_numeric($scalar): - case Parser::preg_match(self::getHexRegex(), $scalar): - $scalar = str_replace('_', '', $scalar); - - return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; - case '.inf' === $scalarLower: - case '.nan' === $scalarLower: - return -log(0); - case '-.inf' === $scalarLower: - return log(0); - case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): - return (float) str_replace('_', '', $scalar); - case Parser::preg_match(self::getTimestampRegex(), $scalar): - // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. - $time = new \DateTime($scalar, new \DateTimeZone('UTC')); - - if (Yaml::PARSE_DATETIME & $flags) { - return $time; - } - - try { - if (false !== $scalar = $time->getTimestamp()) { - return $scalar; - } - } catch (\ValueError) { - // no-op - } - - return $time->format('U'); - } - } - - return (string) $scalar; - } - - private static function parseTag(string $value, int &$i, int $flags): ?string - { - if ('!' !== $value[$i]) { - return null; - } - - $tagLength = strcspn($value, " \t\n[]{},", $i + 1); - $tag = substr($value, $i + 1, $tagLength); - - $nextOffset = $i + $tagLength + 1; - $nextOffset += strspn($value, ' ', $nextOffset); - - if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { - throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - // Is followed by a scalar and is a built-in tag - if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) { - // Manage in {@link self::evaluateScalar()} - return null; - } - - $i = $nextOffset; - - // Built-in tags - if ('' !== $tag && '!' === $tag[0]) { - throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if ('' !== $tag && !isset($value[$i])) { - throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { - return $tag; - } - - throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); - } - - public static function evaluateBinaryScalar(string $scalar): string - { - $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); - - if (0 !== (\strlen($parsedBinaryData) % 4)) { - throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { - throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); - } - - return base64_decode($parsedBinaryData, true); - } - - private static function isBinaryString(string $value): bool - { - return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); - } - - /** - * Gets a regex that matches a YAML date. - * - * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 - */ - private static function getTimestampRegex(): string - { - return <<[0-9][0-9][0-9][0-9]) - -(?P[0-9][0-9]?) - -(?P[0-9][0-9]?) - (?:(?:[Tt]|[ \t]+) - (?P[0-9][0-9]?) - :(?P[0-9][0-9]) - :(?P[0-9][0-9]) - (?:\.(?P[0-9]*))? - (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) - (?::(?P[0-9][0-9]))?))?)? - $~x -EOF; - } - - /** - * Gets a regex that matches a YAML number in hexadecimal notation. - */ - private static function getHexRegex(): string - { - return '~^0x[0-9a-f_]++$~i'; - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/LICENSE b/vendor/passkit/vendor/symfony/yaml/LICENSE deleted file mode 100644 index 88bf75b..0000000 --- a/vendor/passkit/vendor/symfony/yaml/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2022 Fabien Potencier - -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/vendor/passkit/vendor/symfony/yaml/Parser.php b/vendor/passkit/vendor/symfony/yaml/Parser.php deleted file mode 100644 index 9a3741b..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Parser.php +++ /dev/null @@ -1,1255 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; -use Symfony\Component\Yaml\Tag\TaggedValue; - -/** - * Parser parses YAML strings to convert them to PHP arrays. - * - * @author Fabien Potencier - * - * @final - */ -class Parser -{ - public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; - public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; - public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; - - private ?string $filename = null; - private int $offset = 0; - private int $numberOfParsedLines = 0; - private ?int $totalNumberOfLines = null; - private array $lines = []; - private int $currentLineNb = -1; - private string $currentLine = ''; - private array $refs = []; - private array $skippedLineNumbers = []; - private array $locallySkippedLineNumbers = []; - private array $refsBeingParsed = []; - - /** - * Parses a YAML file into a PHP value. - * - * @param string $filename The path to the YAML file to be parsed - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the file could not be read or the YAML is not valid - */ - public function parseFile(string $filename, int $flags = 0): mixed - { - if (!is_file($filename)) { - throw new ParseException(sprintf('File "%s" does not exist.', $filename)); - } - - if (!is_readable($filename)) { - throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); - } - - $this->filename = $filename; - - try { - return $this->parse(file_get_contents($filename), $flags); - } finally { - $this->filename = null; - } - } - - /** - * Parses a YAML string to a PHP value. - * - * @param string $value A YAML string - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the YAML is not valid - */ - public function parse(string $value, int $flags = 0): mixed - { - if (false === preg_match('//u', $value)) { - throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); - } - - $this->refs = []; - - try { - $data = $this->doParse($value, $flags); - } finally { - $this->refsBeingParsed = []; - $this->offset = 0; - $this->lines = []; - $this->currentLine = ''; - $this->numberOfParsedLines = 0; - $this->refs = []; - $this->skippedLineNumbers = []; - $this->locallySkippedLineNumbers = []; - $this->totalNumberOfLines = null; - } - - return $data; - } - - private function doParse(string $value, int $flags) - { - $this->currentLineNb = -1; - $this->currentLine = ''; - $value = $this->cleanup($value); - $this->lines = explode("\n", $value); - $this->numberOfParsedLines = \count($this->lines); - $this->locallySkippedLineNumbers = []; - - if (null === $this->totalNumberOfLines) { - $this->totalNumberOfLines = $this->numberOfParsedLines; - } - - if (!$this->moveToNextLine()) { - return null; - } - - $data = []; - $context = null; - $allowOverwrite = false; - - while ($this->isCurrentLineEmpty()) { - if (!$this->moveToNextLine()) { - return null; - } - } - - // Resolves the tag and returns if end of the document - if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { - return new TaggedValue($tag, ''); - } - - do { - if ($this->isCurrentLineEmpty()) { - continue; - } - - // tab? - if ("\t" === $this->currentLine[0]) { - throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); - - $isRef = $mergeNode = false; - if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { - if ($context && 'mapping' == $context) { - throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - $context = 'sequence'; - - if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { - $isRef = $matches['ref']; - $this->refsBeingParsed[] = $isRef; - $values['value'] = $matches['value']; - } - - if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { - throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // array - if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) { - // Inline first child - $currentLineNumber = $this->getRealCurrentLineNb(); - - $sequenceIndentation = \strlen($values['leadspaces']) + 1; - $sequenceYaml = substr($this->currentLine, $sequenceIndentation); - $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true); - - $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags); - } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) { - $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); - } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { - $data[] = new TaggedValue( - $subTag, - $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) - ); - } else { - if ( - isset($values['leadspaces']) - && ( - '!' === $values['value'][0] - || self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) - ) - ) { - // this is a compact notation element, add to next block and parse - $block = $values['value']; - if ($this->isNextLineIndented()) { - $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); - } - - $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); - } else { - $data[] = $this->parseValue($values['value'], $flags, $context); - } - } - if ($isRef) { - $this->refs[$isRef] = end($data); - array_pop($this->refsBeingParsed); - } - } elseif ( - self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values) - && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) - ) { - if ($context && 'sequence' == $context) { - throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - $context = 'mapping'; - - try { - $key = Inline::parseScalar($values['key']); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - if (!\is_string($key) && !\is_int($key)) { - throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // Convert float keys to strings, to avoid being converted to integers by PHP - if (\is_float($key)) { - $key = (string) $key; - } - - if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { - $mergeNode = true; - $allowOverwrite = true; - if (isset($values['value'][0]) && '*' === $values['value'][0]) { - $refName = substr(rtrim($values['value']), 1); - if (!\array_key_exists($refName, $this->refs)) { - if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { - throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - $refValue = $this->refs[$refName]; - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { - $refValue = (array) $refValue; - } - - if (!\is_array($refValue)) { - throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - $data += $refValue; // array union - } else { - if (isset($values['value']) && '' !== $values['value']) { - $value = $values['value']; - } else { - $value = $this->getNextEmbedBlock(); - } - $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { - $parsed = (array) $parsed; - } - - if (!\is_array($parsed)) { - throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if (isset($parsed[0])) { - // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes - // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier - // in the sequence override keys specified in later mapping nodes. - foreach ($parsed as $parsedItem) { - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { - $parsedItem = (array) $parsedItem; - } - - if (!\is_array($parsedItem)) { - throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); - } - - $data += $parsedItem; // array union - } - } else { - // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the - // current mapping, unless the key already exists in it. - $data += $parsed; // array union - } - } - } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { - $isRef = $matches['ref']; - $this->refsBeingParsed[] = $isRef; - $values['value'] = $matches['value']; - } - - $subTag = null; - if ($mergeNode) { - // Merge keys - } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { - // hash - // if next line is less indented or equal, then it means that the current value is null - if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if ($allowOverwrite || !isset($data[$key])) { - if (null !== $subTag) { - $data[$key] = new TaggedValue($subTag, ''); - } else { - $data[$key] = null; - } - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } else { - // remember the parsed line number here in case we need it to provide some contexts in error messages below - $realCurrentLineNbKey = $this->getRealCurrentLineNb(); - $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); - if ('<<' === $key) { - $this->refs[$refMatches['ref']] = $value; - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { - $value = (array) $value; - } - - $data += $value; - } elseif ($allowOverwrite || !isset($data[$key])) { - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if (null !== $subTag) { - $data[$key] = new TaggedValue($subTag, $value); - } else { - $data[$key] = $value; - } - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); - } - } - } else { - $value = $this->parseValue(rtrim($values['value']), $flags, $context); - // Spec: Keys MUST be unique; first one wins. - // But overwriting is allowed when a merge node is used in current block. - if ($allowOverwrite || !isset($data[$key])) { - $data[$key] = $value; - } else { - throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - } - if ($isRef) { - $this->refs[$isRef] = $data[$key]; - array_pop($this->refsBeingParsed); - } - } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } elseif ('{' === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); - - while ($this->moveToNextLine()) { - if (!$this->isCurrentLineEmpty()) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return $parsedMapping; - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } elseif ('[' === $this->currentLine[0]) { - if (null !== $context) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - try { - $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); - - while ($this->moveToNextLine()) { - if (!$this->isCurrentLineEmpty()) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return $parsedSequence; - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } else { - // multiple documents are not supported - if ('---' === $this->currentLine) { - throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { - throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); - } - - // 1-liner optionally followed by newline(s) - if (\is_string($value) && $this->lines[0] === trim($value)) { - try { - $value = Inline::parse($this->lines[0], $flags, $this->refs); - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - - return $value; - } - - // try to parse the value as a multi-line string as a last resort - if (0 === $this->currentLineNb) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - $value = ''; - - foreach ($this->lines as $line) { - $trimmedLine = trim($line); - if ('#' === ($trimmedLine[0] ?? '')) { - continue; - } - // If the indentation is not consistent at offset 0, it is to be considered as a ParseError - if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if (str_contains($line, ': ')) { - throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - - if ('' === $trimmedLine) { - $value .= "\n"; - } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { - $value .= ' '; - } - - if ('' !== $trimmedLine && str_ends_with($line, '\\')) { - $value .= ltrim(substr($line, 0, -1)); - } elseif ('' !== $trimmedLine) { - $value .= $trimmedLine; - } - - if ('' === $trimmedLine) { - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - } elseif (str_ends_with($line, '\\')) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = true; - } else { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - } - } - - try { - return Inline::parse(trim($value)); - } catch (ParseException) { - // fall-through to the ParseException thrown below - } - } - - throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } while ($this->moveToNextLine()); - - if (null !== $tag) { - $data = new TaggedValue($tag, $data); - } - - if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) { - $object = new \stdClass(); - - foreach ($data as $key => $value) { - $object->$key = $value; - } - - $data = $object; - } - - return empty($data) ? null : $data; - } - - private function parseBlock(int $offset, string $yaml, int $flags) - { - $skippedLineNumbers = $this->skippedLineNumbers; - - foreach ($this->locallySkippedLineNumbers as $lineNumber) { - if ($lineNumber < $offset) { - continue; - } - - $skippedLineNumbers[] = $lineNumber; - } - - $parser = new self(); - $parser->offset = $offset; - $parser->totalNumberOfLines = $this->totalNumberOfLines; - $parser->skippedLineNumbers = $skippedLineNumbers; - $parser->refs = &$this->refs; - $parser->refsBeingParsed = $this->refsBeingParsed; - - return $parser->doParse($yaml, $flags); - } - - /** - * Returns the current line number (takes the offset into account). - * - * @internal - */ - public function getRealCurrentLineNb(): int - { - $realCurrentLineNumber = $this->currentLineNb + $this->offset; - - foreach ($this->skippedLineNumbers as $skippedLineNumber) { - if ($skippedLineNumber > $realCurrentLineNumber) { - break; - } - - ++$realCurrentLineNumber; - } - - return $realCurrentLineNumber; - } - - private function getCurrentLineIndentation(): int - { - if (' ' !== ($this->currentLine[0] ?? '')) { - return 0; - } - - return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); - } - - /** - * Returns the next embed block of YAML. - * - * @param int|null $indentation The indent level at which the block is to be read, or null for default - * @param bool $inSequence True if the enclosing data structure is a sequence - * - * @throws ParseException When indentation problem are detected - */ - private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string - { - $oldLineIndentation = $this->getCurrentLineIndentation(); - - if (!$this->moveToNextLine()) { - return ''; - } - - if (null === $indentation) { - $newIndent = null; - $movements = 0; - - do { - $EOF = false; - - // empty and comment-like lines do not influence the indentation depth - if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } else { - $newIndent = $this->getCurrentLineIndentation(); - } - } while (!$EOF && null === $newIndent); - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); - - if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } else { - $newIndent = $indentation; - } - - $data = []; - - if ($this->getCurrentLineIndentation() >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent ?? 0); - } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { - $data[] = $this->currentLine; - } else { - $this->moveToPreviousLine(); - - return ''; - } - - if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { - // the previous line contained a dash but no item content, this line is a sequence item with the same indentation - // and therefore no nested list or mapping - $this->moveToPreviousLine(); - - return ''; - } - - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); - $isItComment = $this->isCurrentLineComment(); - - while ($this->moveToNextLine()) { - if ($isItComment && !$isItUnindentedCollection) { - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); - $isItComment = $this->isCurrentLineComment(); - } - - $indent = $this->getCurrentLineIndentation(); - - if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { - $this->moveToPreviousLine(); - break; - } - - if ($this->isCurrentLineBlank()) { - $data[] = substr($this->currentLine, $newIndent); - continue; - } - - if ($indent >= $newIndent) { - $data[] = substr($this->currentLine, $newIndent); - } elseif ($this->isCurrentLineComment()) { - $data[] = $this->currentLine; - } elseif (0 == $indent) { - $this->moveToPreviousLine(); - - break; - } else { - throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); - } - } - - return implode("\n", $data); - } - - private function hasMoreLines(): bool - { - return (\count($this->lines) - 1) > $this->currentLineNb; - } - - /** - * Moves the parser to the next line. - */ - private function moveToNextLine(): bool - { - if ($this->currentLineNb >= $this->numberOfParsedLines - 1) { - return false; - } - - $this->currentLine = $this->lines[++$this->currentLineNb]; - - return true; - } - - /** - * Moves the parser to the previous line. - */ - private function moveToPreviousLine(): bool - { - if ($this->currentLineNb < 1) { - return false; - } - - $this->currentLine = $this->lines[--$this->currentLineNb]; - - return true; - } - - /** - * Parses a YAML value. - * - * @param string $value A YAML value - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * @param string $context The parser context (either sequence or mapping) - * - * @throws ParseException When reference does not exist - */ - private function parseValue(string $value, int $flags, string $context): mixed - { - if (str_starts_with($value, '*')) { - if (false !== $pos = strpos($value, '#')) { - $value = substr($value, 1, $pos - 2); - } else { - $value = substr($value, 1); - } - - if (!\array_key_exists($value, $this->refs)) { - if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { - throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); - } - - return $this->refs[$value]; - } - - if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { - $modifiers = $matches['modifiers'] ?? ''; - - $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers)); - - if ('' !== $matches['tag'] && '!' !== $matches['tag']) { - if ('!!binary' === $matches['tag']) { - return Inline::evaluateBinaryScalar($data); - } - - return new TaggedValue(substr($matches['tag'], 1), $data); - } - - return $data; - } - - try { - if ('' !== $value && '{' === $value[0]) { - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - - return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); - } elseif ('' !== $value && '[' === $value[0]) { - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - - return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); - } - - switch ($value[0] ?? '') { - case '"': - case "'": - $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); - - if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { - throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); - } - - return $parsedValue; - default: - $lines = []; - - while ($this->moveToNextLine()) { - // unquoted strings end before the first unindented line - if (0 === $this->getCurrentLineIndentation()) { - $this->moveToPreviousLine(); - - break; - } - - $lines[] = trim($this->currentLine); - } - - for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { - if ('' === $lines[$i]) { - $value .= "\n"; - $previousLineBlank = true; - } elseif ($previousLineBlank) { - $value .= $lines[$i]; - $previousLineBlank = false; - } else { - $value .= ' '.$lines[$i]; - $previousLineBlank = false; - } - } - - Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); - - $parsedValue = Inline::parse($value, $flags, $this->refs); - - if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { - throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - return $parsedValue; - } - } catch (ParseException $e) { - $e->setParsedLine($this->getRealCurrentLineNb() + 1); - $e->setSnippet($this->currentLine); - - throw $e; - } - } - - /** - * Parses a block scalar. - * - * @param string $style The style indicator that was used to begin this block scalar (| or >) - * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) - * @param int $indentation The indentation indicator that was used to begin this block scalar - */ - private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string - { - $notEOF = $this->moveToNextLine(); - if (!$notEOF) { - return ''; - } - - $isCurrentLineBlank = $this->isCurrentLineBlank(); - $blockLines = []; - - // leading blank lines are consumed before determining indentation - while ($notEOF && $isCurrentLineBlank) { - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $blockLines[] = ''; - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - - // determine indentation if not specified - if (0 === $indentation) { - $currentLineLength = \strlen($this->currentLine); - - for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { - ++$indentation; - } - } - - if ($indentation > 0) { - $pattern = sprintf('/^ {%d}(.*)$/', $indentation); - - while ( - $notEOF && ( - $isCurrentLineBlank || - self::preg_match($pattern, $this->currentLine, $matches) - ) - ) { - if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { - $blockLines[] = substr($this->currentLine, $indentation); - } elseif ($isCurrentLineBlank) { - $blockLines[] = ''; - } else { - $blockLines[] = $matches[1]; - } - - // newline only if not EOF - if ($notEOF = $this->moveToNextLine()) { - $isCurrentLineBlank = $this->isCurrentLineBlank(); - } - } - } elseif ($notEOF) { - $blockLines[] = ''; - } - - if ($notEOF) { - $blockLines[] = ''; - $this->moveToPreviousLine(); - } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { - $blockLines[] = ''; - } - - // folded style - if ('>' === $style) { - $text = ''; - $previousLineIndented = false; - $previousLineBlank = false; - - for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { - if ('' === $blockLines[$i]) { - $text .= "\n"; - $previousLineIndented = false; - $previousLineBlank = true; - } elseif (' ' === $blockLines[$i][0]) { - $text .= "\n".$blockLines[$i]; - $previousLineIndented = true; - $previousLineBlank = false; - } elseif ($previousLineIndented) { - $text .= "\n".$blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } elseif ($previousLineBlank || 0 === $i) { - $text .= $blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } else { - $text .= ' '.$blockLines[$i]; - $previousLineIndented = false; - $previousLineBlank = false; - } - } - } else { - $text = implode("\n", $blockLines); - } - - // deal with trailing newlines - if ('' === $chomping) { - $text = preg_replace('/\n+$/', "\n", $text); - } elseif ('-' === $chomping) { - $text = preg_replace('/\n+$/', '', $text); - } - - return $text; - } - - /** - * Returns true if the next line is indented. - */ - private function isNextLineIndented(): bool - { - $currentIndentation = $this->getCurrentLineIndentation(); - $movements = 0; - - do { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); - - if ($EOF) { - return false; - } - - $ret = $this->getCurrentLineIndentation() > $currentIndentation; - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - return $ret; - } - - private function isCurrentLineEmpty(): bool - { - return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); - } - - private function isCurrentLineBlank(): bool - { - return '' === $this->currentLine || '' === trim($this->currentLine, ' '); - } - - private function isCurrentLineComment(): bool - { - //checking explicitly the first char of the trim is faster than loops or strpos - $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine; - - return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; - } - - private function isCurrentLineLastLineInDocument(): bool - { - return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); - } - - private function cleanup(string $value): string - { - $value = str_replace(["\r\n", "\r"], "\n", $value); - - // strip YAML header - $count = 0; - $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); - $this->offset += $count; - - // remove leading comments - $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); - if (1 === $count) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - } - - // remove start of the document marker (---) - $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); - if (1 === $count) { - // items have been removed, update the offset - $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); - $value = $trimmedValue; - - // remove end of the document marker (...) - $value = preg_replace('#\.\.\.\s*$#', '', $value); - } - - return $value; - } - - private function isNextLineUnIndentedCollection(): bool - { - $currentIndentation = $this->getCurrentLineIndentation(); - $movements = 0; - - do { - $EOF = !$this->moveToNextLine(); - - if (!$EOF) { - ++$movements; - } - } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); - - if ($EOF) { - return false; - } - - $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); - - for ($i = 0; $i < $movements; ++$i) { - $this->moveToPreviousLine(); - } - - return $ret; - } - - private function isStringUnIndentedCollectionItem(): bool - { - return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- '); - } - - /** - * A local wrapper for "preg_match" which will throw a ParseException if there - * is an internal error in the PCRE engine. - * - * This avoids us needing to check for "false" every time PCRE is used - * in the YAML engine - * - * @throws ParseException on a PCRE internal error - * - * @see preg_last_error() - * - * @internal - */ - public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int - { - if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { - $error = match (preg_last_error()) { - \PREG_INTERNAL_ERROR => 'Internal PCRE error.', - \PREG_BACKTRACK_LIMIT_ERROR => 'pcre.backtrack_limit reached.', - \PREG_RECURSION_LIMIT_ERROR => 'pcre.recursion_limit reached.', - \PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data.', - \PREG_BAD_UTF8_OFFSET_ERROR => 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.', - default => 'Error.', - }; - - throw new ParseException($error); - } - - return $ret; - } - - /** - * Trim the tag on top of the value. - * - * Prevent values such as "!foo {quz: bar}" to be considered as - * a mapping block. - */ - private function trimTag(string $value): string - { - if ('!' === $value[0]) { - return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); - } - - return $value; - } - - private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string - { - if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { - return null; - } - - if ($nextLineCheck && !$this->isNextLineIndented()) { - return null; - } - - $tag = substr($matches['tag'], 1); - - // Built-in tags - if ($tag && '!' === $tag[0]) { - throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - if (Yaml::PARSE_CUSTOM_TAGS & $flags) { - return $tag; - } - - throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); - } - - private function lexInlineQuotedString(int &$cursor = 0): string - { - $quotation = $this->currentLine[$cursor]; - $value = $quotation; - ++$cursor; - - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - $lineNumber = 0; - - do { - if (++$lineNumber > 1) { - $cursor += strspn($this->currentLine, ' ', $cursor); - } - - if ($this->isCurrentLineBlank()) { - $value .= "\n"; - } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { - $value .= ' '; - } - - for (; \strlen($this->currentLine) > $cursor; ++$cursor) { - switch ($this->currentLine[$cursor]) { - case '\\': - if ("'" === $quotation) { - $value .= '\\'; - } elseif (isset($this->currentLine[++$cursor])) { - $value .= '\\'.$this->currentLine[$cursor]; - } - - break; - case $quotation: - ++$cursor; - - if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) { - $value .= "''"; - break; - } - - return $value.$quotation; - default: - $value .= $this->currentLine[$cursor]; - } - } - - if ($this->isCurrentLineBlank()) { - $previousLineWasNewline = true; - $previousLineWasTerminatedWithBackslash = false; - } elseif ('\\' === $this->currentLine[-1]) { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = true; - } else { - $previousLineWasNewline = false; - $previousLineWasTerminatedWithBackslash = false; - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - throw new ParseException('Malformed inline YAML string.'); - } - - private function lexUnquotedString(int &$cursor): string - { - $offset = $cursor; - $cursor += strcspn($this->currentLine, '[]{},: ', $cursor); - - if ($cursor === $offset) { - throw new ParseException('Malformed unquoted YAML string.'); - } - - return substr($this->currentLine, $offset, $cursor - $offset); - } - - private function lexInlineMapping(int &$cursor = 0): string - { - return $this->lexInlineStructure($cursor, '}'); - } - - private function lexInlineSequence(int &$cursor = 0): string - { - return $this->lexInlineStructure($cursor, ']'); - } - - private function lexInlineStructure(int &$cursor, string $closingTag): string - { - $value = $this->currentLine[$cursor]; - ++$cursor; - - do { - $this->consumeWhitespaces($cursor); - - while (isset($this->currentLine[$cursor])) { - switch ($this->currentLine[$cursor]) { - case '"': - case "'": - $value .= $this->lexInlineQuotedString($cursor); - break; - case ':': - case ',': - $value .= $this->currentLine[$cursor]; - ++$cursor; - break; - case '{': - $value .= $this->lexInlineMapping($cursor); - break; - case '[': - $value .= $this->lexInlineSequence($cursor); - break; - case $closingTag: - $value .= $this->currentLine[$cursor]; - ++$cursor; - - return $value; - case '#': - break 2; - default: - $value .= $this->lexUnquotedString($cursor); - } - - if ($this->consumeWhitespaces($cursor)) { - $value .= ' '; - } - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - throw new ParseException('Malformed inline YAML string.'); - } - - private function consumeWhitespaces(int &$cursor): bool - { - $whitespacesConsumed = 0; - - do { - $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor); - $whitespacesConsumed += $whitespaceOnlyTokenLength; - $cursor += $whitespaceOnlyTokenLength; - - if (isset($this->currentLine[$cursor])) { - return 0 < $whitespacesConsumed; - } - - if ($this->hasMoreLines()) { - $cursor = 0; - } - } while ($this->moveToNextLine()); - - return 0 < $whitespacesConsumed; - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/README.md b/vendor/passkit/vendor/symfony/yaml/README.md deleted file mode 100644 index ac25024..0000000 --- a/vendor/passkit/vendor/symfony/yaml/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Yaml Component -============== - -The Yaml component loads and dumps YAML files. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/yaml.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint b/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint deleted file mode 100755 index 0ad73d7..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Resources/bin/yaml-lint +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Runs the Yaml lint command. - * - * @author Jan Schädlich - */ - -use Symfony\Component\Console\Application; -use Symfony\Component\Yaml\Command\LintCommand; - -function includeIfExists(string $file): bool -{ - return file_exists($file) && include $file; -} - -if ( - !includeIfExists(__DIR__ . '/../../../../autoload.php') && - !includeIfExists(__DIR__ . '/../../vendor/autoload.php') && - !includeIfExists(__DIR__ . '/../../../../../../vendor/autoload.php') -) { - fwrite(STDERR, 'Install dependencies using Composer.'.PHP_EOL); - exit(1); -} - -if (!class_exists(Application::class)) { - fwrite(STDERR, 'You need the "symfony/console" component in order to run the Yaml linter.'.PHP_EOL); - exit(1); -} - -(new Application())->add($command = new LintCommand()) - ->getApplication() - ->setDefaultCommand($command->getName(), true) - ->run() -; diff --git a/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php b/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php deleted file mode 100644 index c7946c2..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Tag/TaggedValue.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml\Tag; - -/** - * @author Nicolas Grekas - * @author Guilhem N. - */ -final class TaggedValue -{ - private string $tag; - private mixed $value; - - public function __construct(string $tag, mixed $value) - { - $this->tag = $tag; - $this->value = $value; - } - - public function getTag(): string - { - return $this->tag; - } - - public function getValue() - { - return $this->value; - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Unescaper.php b/vendor/passkit/vendor/symfony/yaml/Unescaper.php deleted file mode 100644 index 2238210..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Unescaper.php +++ /dev/null @@ -1,110 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Unescaper encapsulates unescaping rules for single and double-quoted - * YAML strings. - * - * @author Matthew Lewinski - * - * @internal - */ -class Unescaper -{ - /** - * Regex fragment that matches an escaped character in a double quoted string. - */ - public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; - - /** - * Unescapes a single quoted string. - * - * @param string $value A single quoted string - */ - public function unescapeSingleQuotedString(string $value): string - { - return str_replace('\'\'', '\'', $value); - } - - /** - * Unescapes a double quoted string. - * - * @param string $value A double quoted string - */ - public function unescapeDoubleQuotedString(string $value): string - { - $callback = function ($match) { - return $this->unescapeCharacter($match[0]); - }; - - // evaluate the string - return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); - } - - /** - * Unescapes a character that was found in a double-quoted string. - * - * @param string $value An escaped character - */ - private function unescapeCharacter(string $value): string - { - return match ($value[1]) { - '0' => "\x0", - 'a' => "\x7", - 'b' => "\x8", - 't' => "\t", - "\t" => "\t", - 'n' => "\n", - 'v' => "\xB", - 'f' => "\xC", - 'r' => "\r", - 'e' => "\x1B", - ' ' => ' ', - '"' => '"', - '/' => '/', - '\\' => '\\', - // U+0085 NEXT LINE - 'N' => "\xC2\x85", - // U+00A0 NO-BREAK SPACE - '_' => "\xC2\xA0", - // U+2028 LINE SEPARATOR - 'L' => "\xE2\x80\xA8", - // U+2029 PARAGRAPH SEPARATOR - 'P' => "\xE2\x80\xA9", - 'x' => self::utf8chr(hexdec(substr($value, 2, 2))), - 'u' => self::utf8chr(hexdec(substr($value, 2, 4))), - 'U' => self::utf8chr(hexdec(substr($value, 2, 8))), - default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)), - }; - } - - /** - * Get the UTF-8 character for the given code point. - */ - private static function utf8chr(int $c): string - { - if (0x80 > $c %= 0x200000) { - return \chr($c); - } - if (0x800 > $c) { - return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); - } - if (0x10000 > $c) { - return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); - } - - return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/Yaml.php b/vendor/passkit/vendor/symfony/yaml/Yaml.php deleted file mode 100644 index 4978421..0000000 --- a/vendor/passkit/vendor/symfony/yaml/Yaml.php +++ /dev/null @@ -1,96 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Yaml; - -use Symfony\Component\Yaml\Exception\ParseException; - -/** - * Yaml offers convenience methods to load and dump YAML. - * - * @author Fabien Potencier - * - * @final - */ -class Yaml -{ - public const DUMP_OBJECT = 1; - public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; - public const PARSE_OBJECT = 4; - public const PARSE_OBJECT_FOR_MAP = 8; - public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; - public const PARSE_DATETIME = 32; - public const DUMP_OBJECT_AS_MAP = 64; - public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; - public const PARSE_CONSTANT = 256; - public const PARSE_CUSTOM_TAGS = 512; - public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; - public const DUMP_NULL_AS_TILDE = 2048; - - /** - * Parses a YAML file into a PHP value. - * - * Usage: - * - * $array = Yaml::parseFile('config.yml'); - * print_r($array); - * - * @param string $filename The path to the YAML file to be parsed - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the file could not be read or the YAML is not valid - */ - public static function parseFile(string $filename, int $flags = 0): mixed - { - $yaml = new Parser(); - - return $yaml->parseFile($filename, $flags); - } - - /** - * Parses YAML into a PHP value. - * - * Usage: - * - * $array = Yaml::parse(file_get_contents('config.yml')); - * print_r($array); - * - * - * @param string $input A string containing YAML - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior - * - * @throws ParseException If the YAML is not valid - */ - public static function parse(string $input, int $flags = 0): mixed - { - $yaml = new Parser(); - - return $yaml->parse($input, $flags); - } - - /** - * Dumps a PHP value to a YAML string. - * - * The dump method, when supplied with an array, will do its best - * to convert the array into friendly YAML. - * - * @param mixed $input The PHP value - * @param int $inline The level where you switch to inline YAML - * @param int $indent The amount of spaces to use for indentation of nested nodes - * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string - */ - public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string - { - $yaml = new Dumper($indent); - - return $yaml->dump($input, $inline, 0, $flags); - } -} diff --git a/vendor/passkit/vendor/symfony/yaml/composer.json b/vendor/passkit/vendor/symfony/yaml/composer.json deleted file mode 100644 index 839314b..0000000 --- a/vendor/passkit/vendor/symfony/yaml/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/yaml", - "type": "library", - "description": "Loads and dumps YAML files", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Yaml\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "minimum-stability": "dev" -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Changelog.md b/vendor/passkit/vendor/zircote/swagger-php/Changelog.md deleted file mode 100644 index 08943b3..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Changelog.md +++ /dev/null @@ -1,3 +0,0 @@ -# Changelog - -The changelog is moved to the [releases page](https://github.com/zircote/swagger-php/releases) diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md b/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md deleted file mode 100644 index d0c2790..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/Readme.md +++ /dev/null @@ -1,71 +0,0 @@ -## Code/Annotation examples - -Collection of code/annotation examples and their corresponding OpenAPI specs generated using swagger-php. - -* **petstore.swagger.io** - - The [swagger-ui](http://petstore.swagger.io/) petstore example using swagger-php annotations. - - * petstore.swagger.io: [source](petstore.swagger.io) / [spec](petstore.swagger.io/petstore.swagger.io.yaml) - - -* **swagger-spec** - - Some more examples based on the (now defunct) [swagger-api](https://github.com/swagger-api/) specs. - - * petstore: [source](swagger-spec/petstore) / [spec](swagger-spec/petstore/petstore.yaml) - * petstore-simple: [source](swagger-spec/petstore-simple) - / [spec](swagger-spec/petstore-simple/petstore-simple.yaml) - * petstore-with-external-docs: [source](swagger-spec/petstore-with-external-docs) - / [spec](swagger-spec/petstore-with-external-docs/petstore-with-external-docs.yaml) - * petstore-3.0 (includes oauth2 auth flow): [source](petstore-3.0) / [spec](openapi-spec/petstore-3.0.yaml) - - -* **Other** - - * using-links: [source](using-links) / [spec](using-links/using-links.yaml) - * using-links-php81: [source](using-links-php81) / [spec](using-links-php81/using-links-php81.yaml) - **requires PHP 8.1** - * simple response object: [source](example-object) / [spec](example-object/example-object.yaml) - * misc: [source](misc) / [spec](misc/misc.yaml) - * using interfaces: [source](using-interfaces) / [spec](using-interfaces/using-interfaces.yaml) - * using traits: [source](using-traits) / [spec](using-traits/using-traits.yaml) - * using refs: [source](using-refs) / [spec](using-refs/using-refs.yaml) - * nested schemas and class hierachies: [source](nesting) / [spec](nesting/nesting.yaml) - * polymorphism using `@OA\Discriminator`: [source](polymorphism) / [spec](polymorphism/polymorphism.yaml) - - -## Custom processors - -[Processors](../src/Processors) implement the various steps involved in converting annotations into an OpenAPI spec. - -Writing a custom processor is the recommended way to extend swagger-php in a clean way. - -Processors are expected to implement the `__invoke()` method expecting the current `Analysis` object as single parameter: - -```php - - */ -class Pet -{ - /** - * Add a new pet to the store. - * - * @OA\Post( - * path="/pet", - * tags={"pet"}, - * operationId="addPet", - * @OA\Response( - * response=405, - * description="Invalid input" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody(ref="#/components/requestBodies/Pet") - * ) - */ - public function addPet() - { - } - - /** - * Update an existing pet. - * - * @OA\Put( - * path="/pet", - * tags={"pet"}, - * operationId="updatePet", - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Pet not found" - * ), - * @OA\Response( - * response=405, - * description="Validation exception" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody(ref="#/components/requestBodies/Pet") - * ) - */ - public function updatePet() - { - } - - /** - * @OA\Get( - * path="/pet/findByStatus", - * tags={"pet"}, - * summary="Finds Pets by status", - * description="Multiple status values can be provided with comma separated string", - * operationId="findPetsByStatus", - * deprecated=true, - * @OA\Parameter( - * name="status", - * in="query", - * description="Status values that needed to be considered for filter", - * required=true, - * explode=true, - * @OA\Schema( - * default="available", - * type="string", - * enum={"available", "pending", "sold"}, - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ), - * @OA\XmlContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid status value" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * } - * ) - */ - public function findPetsByStatus() - { - } - - /** - * @OA\Get( - * path="/pet/findByTags", - * tags={"pet"}, - * summary="Finds Pets by tags", - * description="Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", - * operationId="findByTags", - * @OA\Parameter( - * name="tags", - * in="query", - * description="Tags to filter by", - * required=true, - * explode=true, - * @OA\Schema( - * type="array", - * @OA\Items( - * type="string", - * ) - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ), - * @OA\XmlContent( - * type="array", - * @OA\Items(ref="#/components/schemas/Pet") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid status value" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * } - * ) - */ - public function findByTags() - { - } - - /** - * @OA\Get( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Find pet by ID", - * description="Returns a single pet", - * operationId="getPetById", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet to return", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Pet"), - * @OA\XmlContent(ref="#/components/schemas/Pet"), - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplier" - * ), - * @OA\Response( - * response=404, - * description="Pet not found" - * ), - * security={ - * {"api_key": {}} - * } - * ) - * - * @param int $id - */ - public function getPetById($id) - { - } - - /** - * @OA\Post( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Updates a pet in the store with form data", - * operationId="updatePetWithForm", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet that needs to be updated", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ) - * ), - * @OA\Response( - * response=405, - * description="Invalid input" - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody( - * description="Input data format", - * @OA\MediaType( - * mediaType="application/x-www-form-urlencoded", - * @OA\Schema( - * type="object", - * @OA\Property( - * property="name", - * description="Updated name of the pet", - * type="string", - * ), - * @OA\Property( - * property="status", - * description="Updated status of the pet", - * type="string" - * ) - * ) - * ) - * ) - * ) - */ - public function updatePetWithForm() - { - } - - /** - * @OA\Delete( - * path="/pet/{petId}", - * tags={"pet"}, - * summary="Deletes a pet", - * operationId="deletePet", - * @OA\Parameter( - * name="api_key", - * in="header", - * required=false, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Parameter( - * name="petId", - * in="path", - * description="Pet id to delete", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64" - * ), - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied", - * ), - * @OA\Response( - * response=404, - * description="Pet not found", - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * ) - */ - public function deletePet() - { - } - - /** - * @OA\Post( - * path="/pet/{petId}/uploadImage", - * tags={"pet"}, - * summary="uploads an image", - * operationId="uploadFile", - * @OA\Parameter( - * name="petId", - * in="path", - * description="ID of pet to update", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * example=1 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/ApiResponse") - * ), - * security={ - * {"petstore_auth": {"write:pets", "read:pets"}} - * }, - * @OA\RequestBody( - * description="Upload images request body", - * @OA\MediaType( - * mediaType="application/octet-stream", - * @OA\Schema( - * type="string", - * format="binary" - * ) - * ) - * ) - * ) - */ - public function uploadFile() - { - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php deleted file mode 100644 index 937ab74..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/Store.php +++ /dev/null @@ -1,137 +0,0 @@ - - */ -class Store -{ - /** - * @OA\Get( - * path="/store", - * tags={"store"}, - * summary="Returns pet inventories by status", - * description="Returns a map of status codes to quantities", - * operationId="getInventory", - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent( - * @OA\AdditionalProperties( - * type="integer", - * format="int32" - * ) - * ) - * ), - * security={ - * {"api_key": {}} - * } - * ) - */ - public function getInventory() - { - } - - /** - * @OA\Post( - * path="/store/order", - * tags={"store"}, - * summary="Place an order for a pet", - * operationId="placeOrder", - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Order"), - * @OA\XmlContent(ref="#/components/schemas/Order") - * ), - * @OA\RequestBody( - * description="order placed for purchasing th pet", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/Order") - * ) - * ) - */ - public function placeOrder() - { - } - - /** - * @OA\Get( - * path="/store/order/{orderId}", - * tags={"store"}, - * description="For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", - * operationId="getOrderById", - * @OA\Parameter( - * name="orderId", - * in="path", - * description="ID of pet that needs to be fetched", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * maximum=10, - * minimum=1 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/Order"), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema(ref="#/components/schemas/Order") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Order not found" - * ) - * ) - */ - public function getOrderById() - { - } - - /** - * @OA\Delete( - * path="/store/order/{orderId}", - * tags={"store"}, - * summary="Delete purchase order by ID", - * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - * operationId="deleteOrder", - * @OA\Parameter( - * name="orderId", - * in="path", - * required=true, - * description="ID of the order that needs to be deleted", - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1 - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid ID supplied" - * ), - * @OA\Response( - * response=404, - * description="Order not found" - * ) - * ), - */ - public function deleteOrder() - { - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php deleted file mode 100644 index 52596be..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Controllers/User.php +++ /dev/null @@ -1,231 +0,0 @@ - - */ -class User -{ - /** - * @OA\Post( - * path="/user", - * tags={"user"}, - * summary="Create user", - * description="This can only be done by the logged in user.", - * operationId="createUser", - * @OA\Response( - * response="default", - * description="successful operation" - * ), - * @OA\RequestBody( - * description="Create user object", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/User") - * ) - * ) - */ - public function createUser() - { - } - - /** - * @OA\Post( - * path="/user/createWithArray", - * tags={"user"}, - * summary="Create list of users with given input array", - * operationId="createUsersWithListInput", - * @OA\Response( - * response="default", - * description="successful operation" - * ), - * @OA\RequestBody(ref="#/components/requestBodies/UserArray") - * ) - */ - public function createUsersWithListInput() - { - } - - /** - * @OA\Get( - * path="/user/login", - * tags={"user"}, - * summary="Logs user into system", - * operationId="loginUser", - * @OA\Parameter( - * name="username", - * in="query", - * description="The user name for login", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Parameter( - * name="password", - * in="query", - * required=true, - * @OA\Schema( - * type="string", - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\Header( - * header="X-Rate-Limit", - * description="calls per hour allowed by the user", - * @OA\Schema( - * type="integer", - * format="int32" - * ) - * ), - * @OA\Header( - * header="X-Expires-After", - * description="date in UTC when token expires", - * @OA\Schema( - * type="string", - * format="datetime" - * ) - * ), - * @OA\JsonContent( - * type="string" - * ), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema( - * type="string" - * ) - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username/password supplied" - * ) - * ) - */ - public function loginUser() - { - } - - /** - * @OA\Get( - * path="/user/logout", - * tags={"user"}, - * summary="Logs out current logged in user session", - * operationId="logoutUser", - * @OA\Response( - * response="default", - * description="successful operation" - * ) - * ) - */ - public function logoutUser() - { - } - - /** - * @OA\Get( - * path="/user/{username}", - * summary="Get user by user name", - * operationId="getUserByName", - * @OA\Parameter( - * name="username", - * in="path", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\JsonContent(ref="#/components/schemas/User"), - * @OA\MediaType( - * mediaType="application/xml", - * @OA\Schema(ref="#/components/schemas/User") - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username supplied" - * ), - * @OA\Response( - * response=404, - * description="User not found" - * ), - * ) - */ - public function getUserByName() - { - } - - /** - * @OA\Put( - * path="/user/{username}", - * summary="Updated user", - * description="This can pnly be done by the logged in user.", - * operationId="updateUser", - * @OA\Parameter( - * name="username", - * in="path", - * description="name that to be updated", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid user supplied" - * ), - * @OA\Response( - * response=404, - * description="User not found" - * ), - * @OA\RequestBody( - * description="Updated user object", - * required=true, - * @OA\JsonContent(ref="#/components/schemas/User") - * ) - * ) - */ - public function updateUser() - { - } - - /** - * @OA\Delete( - * path="/user/{username}", - * summary="Delete user", - * description="This can only be done by the logged in user.", - * operationId="deleteUser", - * @OA\Parameter( - * name="username", - * in="path", - * description="The name that needs to be deleted", - * required=true, - * @OA\Schema( - * type="string" - * ) - * ), - * @OA\Response( - * response=400, - * description="Invalid username supplied", - * ), - * @OA\Response( - * response=404, - * description="User not found", - * ) - * ) - */ - public function deleteUser() - { - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php deleted file mode 100644 index 29c8172..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/ApiResponse.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * @OA\Schema( - * description="Api response", - * title="Api response" - * ) - */ -class ApiResponse -{ - /** - * @OA\Property( - * description="Code", - * title="Code", - * format="int32" - * ) - * - * @var int - */ - private $code; - - /** - * OA\Property( - * description="Type", - * title="Type", - * ). - * - * @var string - */ - private $type; - - /** - * @OA\Property( - * description="Message", - * title="Message" - * ) - * - * @var string - */ - private $message; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php deleted file mode 100644 index c178845..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Category.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * @OA\Schema( - * title="Pets Category.", - * @OA\Xml( - * name="Category" - * ) - * ) - */ -class Category -{ - /** - * @OA\Property( - * title="ID", - * description="ID", - * format="int64", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * title="Category name", - * description="Category name" - * ) - * - * @var string - */ - private $name; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php deleted file mode 100644 index 36d46c7..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Order.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * @OA\Schema( - * title="Order model", - * description="Order model", - * ) - */ -class Order -{ - /** - * @OA\Property( - * format="int64", - * title="ID", - * default=1, - * description="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * default=1, - * format="int64", - * description="Pet ID", - * title="Pet ID", - * ) - * - * @var int - */ - private $petId; - - /** - * @OA\Property( - * default=12, - * format="in32", - * description="Quantity", - * title="Quantity", - * ) - * - * @var int - */ - private $quantity; - - /** - * @OA\Property( - * default="2017-02-02 18:31:45", - * format="datetime", - * description="Shipping date", - * title="Shipping date", - * type="string" - * ) - * - * @var \DateTime - */ - private $shipDate; - - /** - * @OA\Property( - * default="placed", - * title="Order status.", - * description="Order status.", - * enum={"placed", "approved", "delivered"}, - * ) - * - * @var string - */ - private $status; - - /** - * @OA\Property( - * default=false, - * format="int64", - * description="Complete status", - * title="Complete status", - * ) - * - * @var bool - */ - private $complete; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php deleted file mode 100644 index ade5557..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/Pet.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * @OA\Schema( - * description="Pet model", - * title="Pet model", - * required={"name", "photoUrls"}, - * @OA\Xml( - * name="Pet" - * ) - * ) - */ -class Pet -{ - - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * title="Category", - * ) - * - * @var Category - */ - private $category; - - /** - * @OA\Property( - * format="int64", - * description="Pet name", - * title="Pet name", - * ) - * - * @var int - */ - private $name; - - /** - * @OA\Property( - * description="Photo urls", - * title="Photo urls", - * @OA\Xml( - * name="photoUrl", - * wrapped=true - * ), - * @OA\Items( - * type="string", - * default="images/image-1.png" - * ) - * ) - * - * @var array - */ - private $photoUrls; - - /** - * @OA\Property( - * description="Pet tags", - * title="Pet tags", - * @OA\Xml( - * name="tag", - * wrapped=true - * ), - * ) - * - * @var Tag[] - */ - private $tags; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php deleted file mode 100644 index 97e2661..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/PetRequestBody.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * @OA\Schema( - * title="Tag", - * @OA\Xml( - * name="Tag" - * ) - * ) - */ -class Tag -{ - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID" - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * description="Name", - * title="Name" - * ) - * - * @var string - */ - private $name; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php deleted file mode 100644 index c9c32ad..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/User.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * @OA\Schema( - * title="User model", - * description="User model", - * ) - */ -class User -{ - /** - * @OA\Property( - * format="int64", - * description="ID", - * title="ID", - * ) - * - * @var int - */ - private $id; - - /** - * @OA\Property( - * description="Username", - * title="Username", - * ) - * - * @var string - */ - private $username; - - /** - * @OA\Property( - * description="First name", - * title="First name", - * ) - * - * @var string - */ - private $firstName; - - /** - * @OA\Property( - * description="Last name", - * title="Last name", - * ) - * - * @var string - */ - private $lastName; - - /** - * @OA\Property( - * format="email", - * description="Email", - * title="Email", - * ) - * - * @var string - */ - private $email; - - /** - * @OA\Property( - * format="int64", - * description="Password", - * title="Password", - * maximum=255 - * ) - * - * @var string - */ - private $password; - - /** - * @OA\Property( - * format="msisdn", - * description="Phone", - * title="Phone", - * ) - * - * @var string - */ - private $phone; - - /** - * @OA\Property( - * format="int32", - * description="User status", - * title="User status", - * ) - * - * @var int - */ - private $userStatus; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php deleted file mode 100644 index 79d0124..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore-3.0/Models/UserArrayRequestBody.php +++ /dev/null @@ -1,22 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions' - operationId: getOrderById - parameters: - - - name: orderId - in: path - description: 'ID of pet that needs to be fetched' - required: true - schema: - type: integer - format: int64 - maximum: 10 - minimum: 1 - responses: - '200': - description: 'successful operation' - content: - application/xml: - schema: - $ref: '#/components/schemas/Order' - application/json: - schema: - $ref: '#/components/schemas/Order' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - delete: - tags: - - store - summary: 'Delete purchase order by ID' - description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' - operationId: deleteOrder - parameters: - - - name: orderId - in: path - description: 'ID of the order that needs to be deleted' - required: true - schema: - type: integer - format: int64 - minimum: 1 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - /user: - post: - tags: - - user - summary: 'Create user' - description: 'This can only be done by the logged in user.' - operationId: createUser - requestBody: - description: 'Create user object' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithArray: - post: - tags: - - user - summary: 'Create list of users with given input array' - operationId: createUsersWithListInput - requestBody: - $ref: '#/components/requestBodies/UserArray' - responses: - default: - description: 'successful operation' - /user/login: - get: - tags: - - user - summary: 'Logs user into system' - operationId: loginUser - parameters: - - - name: username - in: query - description: 'The user name for login' - required: true - schema: - type: string - - - name: password - in: query - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - headers: - X-Rate-Limit: - description: 'calls per hour allowed by the user' - schema: - type: integer - format: int32 - X-Expires-After: - description: 'date in UTC when token expires' - schema: - type: string - format: datetime - content: - application/xml: - schema: - type: string - application/json: - schema: - type: string - '400': - description: 'Invalid username/password supplied' - /user/logout: - get: - tags: - - user - summary: 'Logs out current logged in user session' - operationId: logoutUser - responses: - default: - description: 'successful operation' - '/user/{username}': - get: - summary: 'Get user by user name' - operationId: getUserByName - parameters: - - - name: username - in: path - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - content: - application/xml: - schema: - $ref: '#/components/schemas/User' - application/json: - schema: - $ref: '#/components/schemas/User' - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' - put: - summary: 'Updated user' - description: 'This can pnly be done by the logged in user.' - operationId: updateUser - parameters: - - - name: username - in: path - description: 'name that to be updated' - required: true - schema: - type: string - requestBody: - description: 'Updated user object' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/User' - responses: - '400': - description: 'Invalid user supplied' - '404': - description: 'User not found' - delete: - summary: 'Delete user' - description: 'This can only be done by the logged in user.' - operationId: deleteUser - parameters: - - - name: username - in: path - description: 'The name that needs to be deleted' - required: true - schema: - type: string - responses: - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' -components: - schemas: - ApiResponse: - title: 'Api response' - description: 'Api response' - properties: - code: - title: Code - description: Code - type: integer - format: int32 - message: - title: Message - description: Message - type: string - type: object - Category: - title: 'Pets Category.' - description: 'Pets Category.' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - name: - title: 'Category name' - description: 'Category name' - type: string - type: object - xml: - name: Category - Order: - title: 'Order model' - description: 'Order model' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - default: 1 - petId: - title: 'Pet ID' - description: 'Pet ID' - type: integer - format: int64 - default: 1 - quantity: - title: Quantity - description: Quantity - type: integer - format: in32 - default: 12 - shipDate: - title: 'Shipping date' - description: 'Shipping date' - type: string - format: datetime - default: '2017-02-02 18:31:45' - status: - title: 'Order status.' - description: 'Order status.' - type: string - default: placed - enum: - - placed - - approved - - delivered - complete: - title: 'Complete status' - description: 'Complete status' - type: boolean - format: int64 - default: false - type: object - Pet: - title: 'Pet model' - description: 'Pet model' - required: - - name - - photoUrls - properties: - id: - title: ID - description: ID - type: integer - format: int64 - category: - $ref: '#/components/schemas/Category' - name: - title: 'Pet name' - description: 'Pet name' - type: integer - format: int64 - photoUrls: - title: 'Photo urls' - description: 'Photo urls' - type: array - items: - type: string - default: images/image-1.png - xml: - name: photoUrl - wrapped: true - tags: - title: 'Pet tags' - description: 'Pet tags' - type: array - items: - $ref: '#/components/schemas/Tag' - xml: - name: tag - wrapped: true - type: object - xml: - name: Pet - Tag: - title: Tag - description: Tag. - properties: - id: - title: ID - description: ID - type: integer - format: int64 - name: - title: Name - description: Name - type: string - type: object - xml: - name: Tag - User: - title: 'User model' - description: 'User model' - properties: - id: - title: ID - description: ID - type: integer - format: int64 - username: - title: Username - description: Username - type: string - firstName: - title: 'First name' - description: 'First name' - type: string - lastName: - title: 'Last name' - description: 'Last name' - type: string - email: - title: Email - description: Email - type: string - format: email - password: - title: Password - description: Password - type: string - format: int64 - maximum: 255 - phone: - title: Phone - description: Phone - type: string - format: msisdn - userStatus: - title: 'User status' - description: 'User status' - type: integer - format: int32 - type: object - requestBodies: - Pet: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - UserArray: - description: 'List of user object' - required: true - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/User' - securitySchemes: - petstore_auth: - type: oauth2 - flows: - implicit: - authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' - scopes: - 'write:pets': 'modify pets in your account' - 'read:pets': 'read your pets' - api_key: - type: apiKey - name: api_key - in: header -tags: - - - name: pet - description: 'Everything about your Pets' - externalDocs: - description: 'Find out more' - url: 'http://swagger.io' - - - name: store - description: 'Access to Petstore orders' - - - name: user - description: 'Operations about user' - externalDocs: - description: 'Find out more about store' - url: 'http://swagger.io' -externalDocs: - description: 'Find out more about Swagger' - url: 'http://swagger.io' diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php deleted file mode 100644 index 4653df6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/ApiResponse.php +++ /dev/null @@ -1,31 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions", - * operationId="getOrderById", - * @OA\Parameter( - * name="orderId", - * in="path", - * description="ID of pet that needs to be fetched", - * required=true, - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1.0, - * maximum=10.0 - * ) - * ), - * @OA\Response( - * response=200, - * description="successful operation", - * @OA\Schema(ref="#/components/schemas/Order") - * ), - * @OA\Response(response=400, description="Invalid ID supplied"), - * @OA\Response(response=404, description="Order not found") - * ) - */ - public function getOrderById() - { - } - - /** - * @OA\Delete(path="/store/order/{orderId}", - * tags={"store"}, - * summary="Delete purchase order by ID", - * description="For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - * operationId="deleteOrder", - * @OA\Parameter( - * name="orderId", - * in="path", - * required=true, - * description="ID of the order that needs to be deleted", - * @OA\Schema( - * type="integer", - * format="int64", - * minimum=1.0 - * ) - * ), - * @OA\Response(response=400, description="Invalid ID supplied"), - * @OA\Response(response=404, description="Order not found") - * ) - */ - public function deleteOrder() - { - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php deleted file mode 100644 index caf7e92..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/Controllers/UserController.php +++ /dev/null @@ -1,218 +0,0 @@ -= 1 and <= 10. Other values will generated exceptions", - "operationId": "getOrderById", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of pet that needs to be fetched", - "required": true, - "schema": { - "type": "integer", - "format": "int64", - "maximum": 10, - "minimum": 1 - } - } - ], - "responses": { - "200": { - "description": "successful operation" - }, - "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Order not found" - } - } - }, - "delete": { - "tags": [ - "store" - ], - "summary": "Delete purchase order by ID", - "description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", - "operationId": "deleteOrder", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of the order that needs to be deleted", - "required": true, - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1 - } - } - ], - "responses": { - "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Order not found" - } - } - } - }, - "/user": { - "post": { - "tags": [ - "user" - ], - "summary": "Create user", - "description": "This can only be done by the logged in user.", - "operationId": "createUser", - "requestBody": { - "description": "Created user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/createWithArray": { - "post": { - "tags": [ - "user" - ], - "summary": "Creates list of users with given input array", - "description": "", - "operationId": "createUsersWithArrayInput", - "requestBody": { - "description": "List of user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/createWithList": { - "post": { - "tags": [ - "user" - ], - "summary": "Creates list of users with given input array", - "description": "", - "operationId": "createUsersWithListInput", - "requestBody": { - "description": "List of user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - }, - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/login": { - "get": { - "tags": [ - "user" - ], - "summary": "Logs user into the system", - "description": "", - "operationId": "loginUser", - "parameters": [ - { - "name": "username", - "in": "query", - "description": "The user name for login", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "password", - "in": "query", - "description": "The password for login in clear text", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "headers": { - "X-Rate-Limit": { - "description": "calls per hour allowed by the user", - "schema": { - "type": "integer", - "format": "int32" - } - }, - "X-Expires-After": { - "description": "date in UTC when token expires", - "schema": { - "type": "string", - "format": "date-time" - } - } - } - }, - "400": { - "description": "Invalid username/password supplied" - } - } - } - }, - "/user/logout": { - "get": { - "tags": [ - "user" - ], - "summary": "Logs out current logged in user session", - "description": "", - "operationId": "logoutUser", - "parameters": [], - "responses": { - "default": { - "description": "successful operation" - } - } - } - }, - "/user/{username}": { - "get": { - "tags": [ - "user" - ], - "summary": "Get user by user name", - "description": "", - "operationId": "getUserByName", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be fetched. Use user1 for testing. ", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation" - }, - "400": { - "description": "Invalid username supplied" - }, - "404": { - "description": "User not found" - } - } - }, - "put": { - "tags": [ - "user" - ], - "summary": "Updated user", - "description": "This can only be done by the logged in user.", - "operationId": "updateUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "name that need to be updated", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "description": "Updated user object", - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "responses": { - "400": { - "description": "Invalid user supplied" - }, - "404": { - "description": "User not found" - } - } - }, - "delete": { - "tags": [ - "user" - ], - "summary": "Delete user", - "description": "This can only be done by the logged in user.", - "operationId": "deleteUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be deleted", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "400": { - "description": "Invalid username supplied" - }, - "404": { - "description": "User not found" - } - } - } - } - }, - "components": { - "schemas": { - "ApiResponse": { - "properties": { - "code": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "Category": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "xml": { - "name": "Category" - } - }, - "Order": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "petId": { - "type": "integer", - "format": "int64" - }, - "complete": { - "type": "boolean", - "default": false - }, - "quantity": { - "type": "integer", - "format": "int32" - }, - "shipDate": { - "type": "string", - "format": "date-time" - }, - "status": { - "description": "Order Status.", - "type": "string", - "enum": [ - "placed", - "approved", - "delivered" - ] - } - }, - "type": "object", - "xml": { - "name": "Order" - } - }, - "Pet": { - "required": [ - "name", - "photoUrls" - ], - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string", - "example": "doggie" - }, - "category": { - "$ref": "#/components/schemas/Category" - }, - "photoUrls": { - "type": "array", - "items": { - "type": "string" - }, - "xml": { - "name": "photoUrl", - "wrapped": true - } - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Tag" - }, - "xml": { - "name": "tag", - "wrapped": true - } - }, - "status": { - "description": "pet status in the store", - "type": "string", - "enum": [ - "available", - "pending", - "sold" - ] - } - }, - "type": "object", - "xml": { - "name": "Pet" - } - }, - "Tag": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "xml": { - "name": "Tag" - } - }, - "User": { - "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "username": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "email": { - "type": "string" - }, - "password": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "userStatus": { - "description": "User Status", - "type": "integer", - "format": "int32" - } - }, - "type": "object", - "xml": { - "name": "User" - } - } - }, - "securitySchemes": { - "api_key": { - "type": "apiKey", - "name": "api_key", - "in": "header" - }, - "petstore_auth": { - "type": "oauth2", - "flows": { - "implicit": { - "authorizationUrl": "http://petstore.swagger.io/oauth/dialog", - "scopes": { - "read:pets": "read your pets", - "write:pets": "modify pets in your account" - } - } - } - } - } - }, - "tags": [ - { - "name": "pet", - "description": "Everything about your Pets", - "externalDocs": { - "description": "Find out more", - "url": "http://swagger.io" - } - }, - { - "name": "store", - "description": "Access to Petstore orders" - }, - { - "name": "user", - "description": "Operations about user", - "externalDocs": { - "description": "Find out more about our store", - "url": "http://swagger.io" - } - } - ], - "externalDocs": { - "description": "Find out more about Swagger", - "url": "http://swagger.io" - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml b/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml deleted file mode 100644 index ec62cd3..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/petstore.swagger.io/petstore.swagger.io.yaml +++ /dev/null @@ -1,669 +0,0 @@ -openapi: 3.0.0 -info: - title: 'Swagger Petstore' - description: 'This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.' - termsOfService: 'http://swagger.io/terms/' - contact: - email: apiteam@swagger.io - license: - name: 'Apache 2.0' - url: 'http://www.apache.org/licenses/LICENSE-2.0.html' - version: 1.0.0 -servers: - - - url: 'https://petstore.swagger.io/v3' - description: 'OpenApi host' -paths: - /pet/findByTags: - get: - tags: - - pet - summary: 'Finds Pets by tags' - description: 'Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.' - operationId: findPetsByTags - parameters: - - - name: tags - in: query - description: 'Tags to filter by' - required: true - style: form - schema: - type: array - items: - type: string - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid tag value' - deprecated: true - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - /pet/findByStatus: - get: - tags: - - pet - summary: 'Finds Pets by status' - description: 'Multiple status values can be provided with comma separated strings' - operationId: findPetsByStatus - parameters: - - - name: status - in: query - description: 'Status values that need to be considered for filter' - required: true - style: form - schema: - type: array - items: - type: string - default: available - enum: - - available - - pending - - sold - responses: - '200': - description: 'successful operation' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Pet' - '400': - description: 'Invalid status value' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - '/pet/{petId}': - get: - tags: - - pet - summary: 'Find pet by ID' - description: 'Returns a single pet' - operationId: getPetById - parameters: - - - name: petId - in: path - description: 'ID of pet to return' - required: true - schema: - type: integer - format: int64 - responses: - '200': - description: 'successful operation' - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - security: - - - api_key: [] - post: - tags: - - pet - summary: 'Updates a pet in the store with form data' - description: '' - operationId: updatePetWithForm - parameters: - - - name: petId - in: path - description: 'ID of pet that needs to be updated' - required: true - schema: - type: integer - format: int64 - requestBody: - required: false - content: - application/x-www-form-urlencoded: - schema: - properties: - name: - description: 'Updated name of the pet' - type: string - status: - description: 'Updated status of the pet' - type: string - type: object - responses: - '405': - description: 'Invalid input' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - delete: - tags: - - pet - summary: 'Deletes a pet' - description: '' - operationId: deletePet - parameters: - - - name: petId - in: path - description: 'Pet id to delete' - required: true - schema: - type: integer - format: int64 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - /pet: - put: - tags: - - pet - summary: 'Update an existing pet.' - description: '' - operationId: updatePet - requestBody: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Pet not found' - '405': - description: 'Validation exception' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - post: - tags: - - pet - summary: 'Add a new pet to the store' - description: '' - operationId: addPet - requestBody: - description: 'Pet object that needs to be added to the store' - required: true - content: - application/xml: - schema: - $ref: '#/components/schemas/Pet' - application/json: - schema: - $ref: '#/components/schemas/Pet' - responses: - '405': - description: 'Invalid input' - security: - - - petstore_auth: - - 'write:pets' - - 'read:pets' - '/pet/{petId}/uploadImage': - post: - tags: - - pet - summary: 'uploads an image' - description: '' - operationId: uploadFile - parameters: - - - name: petId - in: path - description: 'ID of pet to update' - required: true - schema: - type: integer - format: int64 - requestBody: - required: true - content: - multipart/form-data: - schema: - required: - - file - properties: - additionalMetadata: - description: 'Additional data to pass to server' - type: string - file: - description: 'file to upload' - type: string - format: file - type: object - responses: - '200': - description: 'successful operation' - security: - - - petstore_auth: - - 'read:pets' - - 'write:pets' - /store/inventory: - get: - tags: - - store - summary: 'Returns pet inventories by status' - description: 'Returns a map of status codes to quantities' - operationId: getInventory - parameters: [] - responses: - '200': - description: 'successful operation' - security: - - - api_key: [] - /store/order: - post: - tags: - - store - summary: 'Place an order for a pet' - description: '' - operationId: placeOrder - requestBody: - description: 'order placed for purchasing the pet' - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Order' - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid Order' - '/store/order/{orderId}': - get: - tags: - - store - summary: 'Find purchase order by ID' - description: 'For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions' - operationId: getOrderById - parameters: - - - name: orderId - in: path - description: 'ID of pet that needs to be fetched' - required: true - schema: - type: integer - format: int64 - maximum: 10 - minimum: 1 - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - delete: - tags: - - store - summary: 'Delete purchase order by ID' - description: 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' - operationId: deleteOrder - parameters: - - - name: orderId - in: path - description: 'ID of the order that needs to be deleted' - required: true - schema: - type: integer - format: int64 - minimum: 1 - responses: - '400': - description: 'Invalid ID supplied' - '404': - description: 'Order not found' - /user: - post: - tags: - - user - summary: 'Create user' - description: 'This can only be done by the logged in user.' - operationId: createUser - requestBody: - description: 'Created user object' - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithArray: - post: - tags: - - user - summary: 'Creates list of users with given input array' - description: '' - operationId: createUsersWithArrayInput - requestBody: - description: 'List of user object' - required: true - content: - multipart/form-data: - schema: - type: array - items: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/createWithList: - post: - tags: - - user - summary: 'Creates list of users with given input array' - description: '' - operationId: createUsersWithListInput - requestBody: - description: 'List of user object' - required: true - content: - multipart/form-data: - schema: - type: array - items: - $ref: '#/components/schemas/User' - responses: - default: - description: 'successful operation' - /user/login: - get: - tags: - - user - summary: 'Logs user into the system' - description: '' - operationId: loginUser - parameters: - - - name: username - in: query - description: 'The user name for login' - required: true - schema: - type: string - - - name: password - in: query - description: 'The password for login in clear text' - schema: - type: string - responses: - '200': - description: 'successful operation' - headers: - X-Rate-Limit: - description: 'calls per hour allowed by the user' - schema: - type: integer - format: int32 - X-Expires-After: - description: 'date in UTC when token expires' - schema: - type: string - format: date-time - '400': - description: 'Invalid username/password supplied' - /user/logout: - get: - tags: - - user - summary: 'Logs out current logged in user session' - description: '' - operationId: logoutUser - parameters: [] - responses: - default: - description: 'successful operation' - '/user/{username}': - get: - tags: - - user - summary: 'Get user by user name' - description: '' - operationId: getUserByName - parameters: - - - name: username - in: path - description: 'The name that needs to be fetched. Use user1 for testing. ' - required: true - schema: - type: string - responses: - '200': - description: 'successful operation' - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' - put: - tags: - - user - summary: 'Updated user' - description: 'This can only be done by the logged in user.' - operationId: updateUser - parameters: - - - name: username - in: path - description: 'name that need to be updated' - required: true - schema: - type: string - requestBody: - description: 'Updated user object' - required: true - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/User' - responses: - '400': - description: 'Invalid user supplied' - '404': - description: 'User not found' - delete: - tags: - - user - summary: 'Delete user' - description: 'This can only be done by the logged in user.' - operationId: deleteUser - parameters: - - - name: username - in: path - description: 'The name that needs to be deleted' - required: true - schema: - type: string - responses: - '400': - description: 'Invalid username supplied' - '404': - description: 'User not found' -components: - schemas: - ApiResponse: - properties: - code: - type: integer - format: int32 - type: - type: string - message: - type: string - type: object - Category: - properties: - id: - type: integer - format: int64 - name: - type: string - type: object - xml: - name: Category - Order: - properties: - id: - type: integer - format: int64 - petId: - type: integer - format: int64 - complete: - type: boolean - default: false - quantity: - type: integer - format: int32 - shipDate: - type: string - format: date-time - status: - description: 'Order Status.' - type: string - enum: - - placed - - approved - - delivered - type: object - xml: - name: Order - Pet: - required: - - name - - photoUrls - properties: - id: - type: integer - format: int64 - name: - type: string - example: doggie - category: - $ref: '#/components/schemas/Category' - photoUrls: - type: array - items: - type: string - xml: - name: photoUrl - wrapped: true - tags: - type: array - items: - $ref: '#/components/schemas/Tag' - xml: - name: tag - wrapped: true - status: - description: 'pet status in the store.' - type: string - enum: - - available - - pending - - sold - type: object - xml: - name: Pet - Tag: - properties: - id: - type: integer - format: int64 - name: - type: string - type: object - xml: - name: Tag - User: - properties: - id: - type: integer - format: int64 - username: - type: string - firstName: - type: string - lastName: - type: string - email: - type: string - password: - type: string - phone: - type: string - userStatus: - description: 'User Status.' - type: integer - format: int32 - type: object - xml: - name: User - securitySchemes: - api_key: - type: apiKey - name: api_key - in: header - petstore_auth: - type: oauth2 - flows: - implicit: - authorizationUrl: 'http://petstore.swagger.io/oauth/dialog' - scopes: - 'read:pets': 'read your pets' - 'write:pets': 'modify pets in your account' -tags: - - - name: pet - description: 'Everything about your Pets' - externalDocs: - description: 'Find out more' - url: 'http://swagger.io' - - - name: store - description: 'Access to Petstore orders' - - - name: user - description: 'Operations about user' - externalDocs: - description: 'Find out more about our store' - url: 'http://swagger.io' -externalDocs: - description: 'Find out more about Swagger' - url: 'http://swagger.io' diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php deleted file mode 100644 index 79c309b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/AbstractResponsible.php +++ /dev/null @@ -1,38 +0,0 @@ -type = static::TYPE; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php deleted file mode 100644 index 914ef3c..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/polymorphism/Controller.php +++ /dev/null @@ -1,40 +0,0 @@ -getAnnotationsOfType(Schema::class, true); - /** @var Operation[] $operations */ - $operations = $analysis->getAnnotationsOfType(Operation::class); - - foreach ($operations as $operation) { - if ($operation->x !== Generator::UNDEFINED && array_key_exists(self::X_QUERY_AGS_REF, $operation->x)) { - if ($schema = $this->schemaForRef($schemas, $operation->x[self::X_QUERY_AGS_REF])) { - $this->expandQueryArgs($operation, $schema); - $this->cleanUp($operation); - } - } - } - } - - /** - * Find schema for the given ref. - */ - protected function schemaForRef(array $schemas, string $ref) - { - foreach ($schemas as $schema) { - if (Components::ref($schema) === $ref) { - return $schema; - } - } - - return null; - } - - /** - * Expand the given operation by injecting parameters for all properties of the given schema. - */ - protected function expandQueryArgs(Operation $operation, Schema $schema) - { - if ($schema->properties == Generator::UNDEFINED || !$schema->properties) { - return; - } - - $operation->parameters = $operation->parameters == Generator::UNDEFINED ? [] : $operation->parameters; - foreach ($schema->properties as $property) { - $parameter = new Parameter([ - 'name' => $property->property, - 'in' => 'query', - 'required' => false, - ]); - $operation->parameters[] = $parameter; - } - } - - /** - * Clean up. - */ - protected function cleanUp($operation) - { - unset($operation->x[self::X_QUERY_AGS_REF]); - if (!$operation->x) { - $operation->x = Generator::UNDEFINED; - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php deleted file mode 100644 index 1e78978..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/app/OpenApi.php +++ /dev/null @@ -1,17 +0,0 @@ -addPsr4('App\\', __DIR__ . '/app'); -// and our custom processor -$classLoader->addPsr4('SchemaQueryParameterProcessor\\', __DIR__); - -$generator = new Generator(); - -// merge our custom processor -$processors = []; -foreach ($generator->getProcessors() as $processor) { - $processors[] = $processor; - if ($processor instanceof BuildPaths) { - $processors[] = new SchemaQueryParameter(); - } -} - -$options = [ - 'processors' => $processors, -]; - -$openapi = $generator - ->setProcessors($processors) - ->generate([__DIR__ . '/app']); -//file_put_contents(__DIR__ . '/schema-query-parameter.yaml', $openapi->toYaml()); -echo $openapi->toYaml(); diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml deleted file mode 100644 index c6a86d3..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/schema-query-parameter/schema-query-parameter.yaml +++ /dev/null @@ -1,62 +0,0 @@ -openapi: 3.0.0 -info: - title: 'Example of using a custom processor in swagger-php' - version: 1.0.0 -paths: - '/products/{id}': - get: - tags: - - Products - operationId: 399b71a7672f0a46be1b5f4c120c355d - parameters: - - - name: id - in: path - required: true - responses: - '200': - description: 'A single product' - content: - application/json: - schema: - $ref: '#/components/schemas/Product' - /products/search: - get: - tags: - - Products - summary: 'Controller that takes all `Product` properties as query parameter.' - operationId: 178f74de3417eec20dee95709821e6ca - parameters: - - - name: id - in: query - required: false - - - name: name - in: query - required: false - responses: - '200': - description: 'A list of matching products' - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Product' -components: - schemas: - Product: - title: Product - description: 'A simple product model' - properties: - id: - description: 'The unique identifier of a product in our catalog.' - type: integer - format: int64 - example: 1 - name: - type: string - format: int64 - example: 1 - type: object diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php deleted file mode 100644 index 92fee26..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/processors/sort-components/SortComponents.php +++ /dev/null @@ -1,20 +0,0 @@ -openapi->components) && is_iterable($analysis->openapi->components->schemas)) { - usort($analysis->openapi->components->schemas, function ($a, $b) { - return strcmp($a->schema, $b->schema); - }); - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php deleted file mode 100644 index 8fa6f9b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/swagger-spec/petstore-simple/OpenApiSpec.php +++ /dev/null @@ -1,46 +0,0 @@ - '$response.body#/username'])] - public function getRepositoriesByOwner($username) - { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}', - operationId: 'getRepository', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response( - response: 200, - description: 'The repository', - content: new OAT\JsonContent(ref: '#/components/schemas/repository'), - links: [ - new OAT\Link(link: 'repositoryPullRequests', ref: '#/components/links/RepositoryPullRequests'), - ] - ), - ] - ) - ] - #[OAT\Link(link: 'UserRepository', operationId: 'getRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] - public function getRepository() - { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}/{state}/pullrequests', - operationId: 'getPullRequestsByRepository', - responses: [ - new OAT\Response(response: 200, description: 'An array of pull request objects', content: new OAT\JsonContent(type: 'array', items: new OAT\Items(ref: '#/components/schemas/pullrequest'))), - ] - ) - ] - #[OAT\Link(link: 'RepositoryPullRequests', operationId: 'getPullRequestsByRepository', parameters: ['username' => '$response.body#/owner/username', 'slug' => '$response.body#/slug'])] - public function getPullRequestsByRepository( - #[OAT\PathParameter()] string $username, - #[OAT\PathParameter()] string $slug, - #[OAT\PathParameter()] State $state - ) { - } - - #[OAT\Get( - path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}', - operationId: 'getPullRequestsById', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response(response: 200, description: 'A pull request object', content: new OAT\JsonContent(ref: '#/components/schemas/pullrequest'), links: [new OAT\Link(link: 'pullRequestMerge', ref: '#/components/links/PullRequestMerge')]), - ] - ) - ] - public function getPullRequestsById() - { - } - - #[OAT\Post( - path: '/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge', - operationId: 'mergePullRequest', - parameters: [ - new OAT\Parameter(name: 'username', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'slug', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - new OAT\Parameter(name: 'pid', in: 'path', required: true, schema: new OAT\Schema(type: 'string')), - ], - responses: [ - new OAT\Response(response: 204, description: 'The PR was successfully merged'), - ] - ) - ] - #[OAT\Link(link: 'PullRequestMerge', operationId: 'mergePullRequest', parameters: ['username' => '$response.body#/author/username', 'slug' => '$response.body#/repository/slug', 'pid' => '$response.body#/id'])] - public function mergePullRequest() - { - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php deleted file mode 100644 index 56e5a4f..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/Repository.php +++ /dev/null @@ -1,19 +0,0 @@ - 'pong'])] - public array $arrayShape; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php b/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php deleted file mode 100644 index 7b8f7d7..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/Examples/using-links-php81/UsersController.php +++ /dev/null @@ -1,16 +0,0 @@ -toYaml(); -``` -Documentation of how to use the `Generator` class can be found in the [Generator reference](https://zircote.github.io/swagger-php/reference/generator). - -### Usage from the Command Line Interface - -The `openapi` command line interface can be used to generate the documentation to a static yaml/json file. - -```bash -./vendor/bin/openapi --help -``` -Starting with version 4 the default analyser used on the command line is the new `ReflectionAnalyser`. - -Using the `--legacy` flag (`-l`) the legacy `TokenAnalyser` can still be used. - -### Usage from the Deserializer - -Generate the OpenApi annotation object from a json string, which makes it easier to manipulate objects programmatically. - -```php -deserialize($jsonString, 'OpenApi\Annotations\OpenApi'); -echo $openapi->toJson(); -``` - -### Usage from [docker](https://docker.com) - -Generate the swagger documentation to a static json file. - -``` -docker run -v "$PWD":/app -it tico/swagger-php --help -``` - -## More on OpenApi & Swagger - -- https://swagger.io -- https://www.openapis.org -- [OpenApi Documentation](https://swagger.io/docs/) -- [OpenApi Specification](http://swagger.io/specification/) -- [Related projects](docs/related-projects.md) - -## Contributing - -Feel free to submit [Github Issues](https://github.com/zircote/swagger-php/issues) -or pull requests. - -The documentation website is build from the [docs](docs/) folder with [vuepress](https://vuepress.vuejs.org). - -Make sure pull requests pass [PHPUnit](https://phpunit.de/) -and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PSR-2) tests. - -### To run both unit tests and linting execute: -```bash -composer test -``` - -### Running unit tests only: -```bash -./bin/phpunit -``` - -### Regenerate annotation/attribute reference markup docs -```bash -composer docs:refgen -``` - -### Running linting only: -```bash -composer lint -``` - -### To make `php-cs-fixer` fix linting errors: -```bash -composer cs -``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/bin/openapi b/vendor/passkit/vendor/zircote/swagger-php/bin/openapi deleted file mode 100755 index 6f78272..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/bin/openapi +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/env php - false, - 'output' => false, - 'format' => 'auto', - 'exclude' => [], - 'pattern' => '*.php', - 'bootstrap' => false, - 'help' => false, - 'debug' => false, - 'processor' => [], - 'version' => null, -]; -$aliases = [ - 'l' => 'legacy', - 'o' => 'output', - 'e' => 'exclude', - 'n' => 'pattern', - 'b' => 'bootstrap', - 'h' => 'help', - 'd' => 'debug', - 'p' => 'processor', - 'f' => 'format' -]; -$needsArgument = [ - 'output', - 'format', - 'exclude', - 'pattern', - 'bootstrap', - 'processor', - 'version', -]; -$paths = []; -$error = false; - -try { - // Parse cli arguments - for ($i = 1; $i < $argc; $i++) { - $arg = $argv[$i]; - if (substr($arg, 0, 2) === '--') { // longopt - $option = substr($arg, 2); - } elseif ($arg[0] === '-') { // shortopt - if (array_key_exists(substr($arg, 1), $aliases)) { - $option = $aliases[$arg[1]]; - } else { - throw new Exception('Unknown option: "' . $arg . '"'); - } - } else { - $paths[] = $arg; - continue; - } - if (array_key_exists($option, $options) === false) { - throw new Exception('Unknown option: "' . $arg . '"'); - } - if (in_array($option, $needsArgument)) { - if (empty($argv[$i + 1]) || $argv[$i + 1][0] === '-') { - throw new Exception('Missing argument for "' . $arg . '"'); - } - if (is_array($options[$option])) { - $options[$option][] = $argv[$i + 1]; - } else { - $options[$option] = $argv[$i + 1]; - } - $i++; - } else { - $options[$option] = true; - } - } -} catch (\Exception $e) { - $error = $e->getMessage(); -} - -if (!$error && $options['bootstrap']) { - if (is_readable($options['bootstrap']) === false) { - $error = 'Invalid `--bootstrap` value: "'.$options['bootstrap'].'"'; - } else { - require_once($options['bootstrap']); - } -} -if (count($paths) === 0) { - $error = 'Specify at least one path.'; -} - -$logger = new ConsoleLogger($options['debug']); - -if ($options['help'] === false && $error) { - $logger->error('', ['prefix' => '']); - $logger->error($error); - // Show help - $options['help'] = true; -} -$defaultVersion = OpenApi::DEFAULT_VERSION; -if ($options['help']) { - $help = <<info($help); - exit(1); -} - -$errorTypes = [ - E_ERROR => 'Error', - E_WARNING => 'Warning', - E_PARSE => 'Parser error', - E_NOTICE => 'Notice', - E_STRICT => 'Strict', - E_DEPRECATED => 'Deprecated', - E_CORE_ERROR => 'Error(Core)', - E_CORE_WARNING => 'Warning(Core)', - E_COMPILE_ERROR => 'Error(compile)', - E_COMPILE_WARNING => 'Warning(Compile)', - E_RECOVERABLE_ERROR => 'Error(Recoverable)', - E_USER_ERROR => 'Error', - E_USER_WARNING => 'Warning', - E_USER_NOTICE => 'Notice', - E_USER_DEPRECATED => 'Deprecated', -]; -set_error_handler(function ($errno, $errstr, $file, $line) use ($errorTypes, $options, $logger) { - if (!(error_reporting() & $errno)) { - // This error code is not included in error_reporting - return; - } - $type = array_key_exists($errno, $errorTypes) ? $errorTypes[$errno] : 'Error'; - if ($type === 'Deprecated') { - $logger->info($errstr, ['prefix' => $type . ': ']); - } else { - $logger->error($errstr, ['prefix' => $type . ': ']); - } - - if ($options['debug']) { - $logger->info(' in '.$file.' on line '.$line); - } - if (substr($type, 0, 5) === 'Error') { - exit($errno); - } -}); - -set_exception_handler(function ($exception) use ($logger) { - $logger->error($exception); - exit($exception->getCode() ?: 1); -}); - -$exclude = null; -if ($options['exclude']) { - $exclude = $options['exclude']; - if (strpos($exclude[0], ',') !== false) { - $exploded = explode(',', $exclude[0]); - $logger->error('Comma-separated exclude paths are deprecated, use multiple --exclude statements: --exclude '.$exploded[0].' --exclude '.$exploded[1]); - $exclude[0] = array_shift($exploded); - $exclude = array_merge($exclude, $exploded); - } -} - -$pattern = "*.php"; -if ($options['pattern']) { - $pattern = $options['pattern']; -} - -$generator = new Generator($logger); -foreach ($options["processor"] as $processor) { - $class = '\OpenApi\Processors\\'.$processor; - if (class_exists($class)) { - $processor = new $class(); - } elseif (class_exists($processor)) { - $processor = new $processor(); - } - $generator->addProcessor($processor); -} - -$analyser = $options['legacy'] - ? new TokenAnalyser() - : new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); - -$openapi = $generator - ->setVersion($options['version']) - ->setAnalyser($analyser) - ->generate(Util::finder($paths, $exclude, $pattern)); - -if ($options['output'] === false) { - if (strtolower($options['format']) === 'json') { - echo $openapi->toJson(); - } else { - echo $openapi->toYaml(); - } - echo "\n"; -} else { - if (is_dir($options['output'])) { - $options['output'] .= '/openapi.yaml'; - } - $openapi->saveAs($options['output'], $options['format']); -} -exit($logger->loggedMessageAboveNotice() ? 1 : 0); diff --git a/vendor/passkit/vendor/zircote/swagger-php/composer.json b/vendor/passkit/vendor/zircote/swagger-php/composer.json deleted file mode 100644 index 8728e63..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/composer.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "name": "zircote/swagger-php", - "type": "library", - "license": "Apache-2.0", - "bin": [ - "bin/openapi" - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "keywords": [ - "json", - "rest", - "api", - "service discovery" - ], - "homepage": "https://github.com/zircote/swagger-php/", - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "config": { - "bin-dir": "bin", - "optimize-autoloader": true, - "sort-packages": true, - "allow-plugins": { - "composer/package-versions-deprecated": true - } - }, - "minimum-stability": "stable", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "require": { - "php": ">=7.2", - "ext-json": "*", - "doctrine/annotations": "^1.7", - "psr/log": "^1.1 || ^2.0 || 3.0", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "autoload": { - "psr-4": { - "OpenApi\\": "src" - } - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", - "phpstan/phpstan": "^1.6", - "phpunit/phpunit": ">=8", - "vimeo/psalm": "^4.23" - }, - "autoload-dev": { - "exclude-from-classmap": [ - "/tests/Fixtures" - ], - "psr-4": { - "OpenApi\\Tools\\": "tools/src/", - "OpenApi\\Tests\\": "tests/", - "AnotherNamespace\\": "tests/Fixtures/AnotherNamespace" - } - }, - "scripts-descriptions": { - "cs": "Fix all codestyle issues", - "lint": "Test codestyle", - "test": "Run all non-legacy and codestyle tests", - "testlegacy": "Run tests using the legacy TokenAnalyser", - "testall": "Run all tests (test + testlegacy)", - "analyse": "Run static analysis (phpstan/psalm)", - "spectral": "Run spectral lint over all .yaml files in the Examples folder", - "docs:refgen": "Rebuild the annotations/attributes reference markup files", - "docs:dev": "Run dev server for local development of gh-pages", - "docs:build": "Re-build static gh-pages" - }, - "scripts": { - "cs": "php-cs-fixer fix --allow-risky=yes", - "lint": "@cs --dry-run", - "test": [ - "phpunit", - "@lint" - ], - "testlegacy": "export PHPUNIT_ANALYSER=legacy && phpunit", - "testall": [ - "@test", - "@testlegacy" - ], - "analyse": [ - "phpstan analyse --memory-limit=2G", - "psalm" - ], - "spectral": "for ff in `find Examples -name '*.yaml'`; do spectral lint $ff; done", - "docs:refgen": "php tools/refgen.php", - "docs:dev": "cd docs && npm run dev", - "docs:build": [ - "@docs:refgen", - "cd docs && npm run build" - ] - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js deleted file mode 100644 index 468749b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/config.js +++ /dev/null @@ -1,82 +0,0 @@ -function getGuideSidebar() { - return [ - { - text: 'Introduction', - children: [ - { text: 'What is Swagger-PHP?', link: '/guide/' }, - { text: 'Installation', link: '/guide/installation' }, - { text: 'Generating OpenAPI documents', link: '/guide/generating-openapi-documents' }, - ] - }, - { - text: 'Annotating your code', - children: [ - { text: 'Attributes', link: '/guide/attributes' }, - { text: 'Annotations', link: '/guide/annotations' }, - { text: 'Required elements', link: '/guide/required-elements' }, - { text: 'Common techniques', link: '/guide/common-techniques' }, - ] - }, - { - text: 'Upgrading', - children: [ - { text: 'Migration from 3.x to 4.x', link: '/guide/migrating-to-v4' }, - { text: 'Migration from 2.x to 3.x', link: '/guide/migrating-to-v3' }, - ] - }, - { - text: 'Other', - children: [ - { text: 'Cookbook', link: '/guide/cookbook' }, - { text: 'FAQ', link: '/guide/faq' }, - { text: 'Under the hood', link: '/guide/under-the-hood' }, - { text: 'Related Projects', link: '/related-projects' }, - ] - }, - ] -} - -function getReferenceSidebar() { - return [ - { - text: 'Reference', - children: [ - { text: 'Attributes', link: '/reference/attributes' }, - { text: 'Annotations', link: '/reference/annotations' }, - ] - }, - { - text: 'Api', - children: [ - { text: 'Generator', link: '/reference/generator' }, - { text: 'Processors', link: '/reference/processors' }, - ] - }, - ] -} - - -module.exports = { - title: "Swagger-PHP", - base: "/swagger-php/", - description: "Generate OpenAPI documentation for your RESTful API.", - themeConfig: { - repo: 'zircote/swagger-php', - docsDir: 'docs', - docsBranch: 'master', - editLinks: false, - editLinkText: 'Edit this page on GitHub', - - nav: [ - { text: "User Guide", link: "/guide/" }, - { text: "Reference", link: "/reference/" }, - { text: "OpenApi", link: "https://oai.github.io/Documentation/" }, - { text: "Releases", link: "https://github.com/zircote/swagger-php/releases" }, - ], - - sidebar: { - '/guide/': getGuideSidebar(), - '/reference/': getReferenceSidebar() - } - } -}; diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue deleted file mode 100644 index bec5d06..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/components/Codeblock.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css deleted file mode 100644 index 557687d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/custom.css +++ /dev/null @@ -1,30 +0,0 @@ -/* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css */ -:root { - --c-brand: #74a535; - --c-brand-light: #94c73d; - - --c-bg: #fefefe; -} - -.tabs-component { - margin: 2em 0; -} - -.tabs-component-panels { - padding: 0 0; - border: none; -} - -.tabs-component-tab-a { - padding: 0.5em; -} - -.tabs-component-tab { - transform: none; -} - -@media (min-width: 700px) { - .tabs-component-tab.is-active { - border-bottom: solid 1px #ddd; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js deleted file mode 100644 index 9d856a3..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import DefaultTheme from "vitepress/theme"; -import {Tabs, Tab} from 'vue3-tabs-component'; -import Codeblock from "./components/Codeblock.vue"; -import "./tabs.css"; -import "./custom.css"; - -export default { - ...DefaultTheme, - enhanceApp({ app, router, siteData }) { - app.component('tabs', Tabs); - app.component('tab', Tab); - app.component('codeblock', Codeblock); - }, -}; diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css b/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css deleted file mode 100644 index 9fa151d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/.vitepress/theme/tabs.css +++ /dev/null @@ -1,80 +0,0 @@ -.tabs-component { - margin: 2em 0; -} - -.tabs-component-tabs { - border: solid 1px #ddd; - border-radius: 6px; - margin-bottom: 5px; -} - -@media (min-width: 700px) { - .tabs-component-tabs { - border: 0; - align-items: stretch; - display: flex; - justify-content: flex-start; - margin-bottom: -1px; - } -} - -.tabs-component-tab { - color: #999; - font-size: 14px; - font-weight: 600; - margin-right: 0; - list-style: none; -} - -.tabs-component-tab:hover { - color: #666; -} - -.tabs-component-tab.is-active { - color: #000; -} - -.tabs-component-tab.is-disabled * { - color: #cdcdcd; - cursor: not-allowed !important; -} - -@media (min-width: 700px) { - .tabs-component-tab { - background-color: #fff; - border: solid 1px #ddd; - border-radius: 3px 3px 0 0; - margin-right: 0.5em; - transform: translateY(2px); - transition: transform 0.3s ease; - } - - .tabs-component-tab.is-active { - border-bottom: solid 1px #fff; - z-index: 2; - transform: translateY(0); - } -} - -.tabs-component-tab-a { - align-items: center; - color: inherit; - display: flex; - padding: 0.5em 1.25em; - text-decoration: none; -} - -.tabs-component-panels { - padding: 1em 0; -} - -@media (min-width: 700px) { - .tabs-component-panels { - background-color: #fff; - border: solid 1px #ddd; - border-radius: 6px; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); - padding: 1em 1em; - position: relative; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md deleted file mode 100644 index f73f609..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/annotations.md +++ /dev/null @@ -1,141 +0,0 @@ -# Annotations - -::: tip Namespace -Using a namespace alias simplifies typing and improves readability. - -All annotations are in the `OpenApi\Annotations` namespace. -::: - -Since Annotations are technically PHP comments, adding `use OpenApi\Annotations as OA;` is strictly speaking not necessary. -However, doctrine will be quite specific about whether an alias is valid or not. - -`swagger-php` will automatically register the `@OA` alias so all annotations can be used using the `@OA` shortcut without -any additional work. - -## Doctrine -Annotations are PHP comments (docblocks) containing [doctrine style annotations](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). - -::: info -All documentation related to doctrine applies to annotations only. -::: - -**Example:** -```php - openapi --bootstrap constants.php -``` -::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md deleted file mode 100644 index ce6b229..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/attributes.md +++ /dev/null @@ -1,41 +0,0 @@ -# Attributes - -::: tip Namespace -Using a namespace alias simplifies typing and improves readability. - -All attributes are in the `OpenApi\Attributes` namespace. -::: - -## Nesting - -Similar to annotations attributes can be top level or nested. However, attributes **may be put at the same level** if -there is no ambiguity. `swagger-php` will then merge attributes according to the defined rules about parent/child -relationships. - -**Example** - -Nested: -```php - #[OA\Get( - path: '/api/users', - responses: [ - new OA\Response(response: 200, description: 'AOK'), - new OA\Response(response: 401, description: 'Not allowed'), - ] - )] - public function users() { /* ... */ } -``` - -Not nested: -```php - #[OA\Get(path: '/api/users')] - #[OA\Response(response: 200, description: 'AOK')] - #[OA\Response(response: 401, description: 'Not allowed')] - public function users() { /* ... */ } -``` - -Depending on how much nesting there is this can make things a bit simpler and easier to read. - -::: warning Top level only -Automatic merging of attributes works only at the top level - in the example that would be the method `users()`. -::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md deleted file mode 100644 index dd3a19f..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/common-techniques.md +++ /dev/null @@ -1,190 +0,0 @@ -# Common techniques - -## Annotation placement - -You shouldn't place all annotations inside one big block, but scatter them throughout your codebase as close to the -relevant source code as appropriate. - -`swagger-php` will scan your project and merge all meta-data into one` @OA\OpenApi` annotation. - -::: warning -As of `swagger-php` v4 all annotations or attributes must be associated with -a structural element (`class`, `method`, `parameter` or `enum`) -::: - -## Context awareness - -`swagger-php` looks at the context of the annotation and will augment it with things like `property name`, -`data type` (doctype and native type hints) as well as a couple other things. - -This means in a lot of cases it is not necessary to explicitly document all details. - -**Example** -```php - new OA\Property(property: 'name', type: 'string'), - 'email' => new OA\Property(property: 'email', type: 'string'), - ] -)] -class User {} -``` - -## Using class name as type instead of references -Typically, when referencing schemas this is done using `$ref`'s - -```php -#[OAT\Schema(schema: 'user')] -class User -{ -} - -#[OAT\Schema()] -class Book -{ - /** - * @var User - */ - #[OAT\Property(ref: '#/components/schemas/user')] - public $author; -} -``` - -This works, but is not very convenient. - -First, when using custom schema names (`schema: 'user'`), this needs to be taken into account everywhere. -Secondly, having to write `ref: '#/components/schemas/user'` is tedious and error-prone. - -Using attributes all this changes as we can take advantage of PHP itself by referring to a schema by its (fully qualified) -class name. - -With the same `User` schema as before, the `Book::author` property could be written in a few different ways - -```php - #[OAT\Property()] - public User author; -``` - -**or** - -```php - /** - * @var User - */ - #[OAT\Property()] - public author; -``` - -**or** - -```php - #[OAT\Property(type: User::class)] - public author; -``` - -## Enums -As of PHP 8.1 there is native support for `enum`'s. - -`swagger-php` supports enums in much the same way as class names can be used to reference schemas. - -**Example** - -```php -#[Schema()] -enum State -{ - case OPEN; - case MERGED; - case DECLINED; -} - -#[Schema()] -class PullRequest - #[OAT\Property()] - public State $state -} -``` - -However, in this case the schema generated for `State` will be an enum: - -```yaml -components: - schemas: - PullRequest: - properties: - state: - $ref: '#/components/schemas/State' - type: object - State: - type: string - enum: - - OPEN - - MERGED - - DECLINED -``` - -## Multi value query parameter: `&q[]=1&q[]=1` - -PHP allows to have query parameters multiple times in the url and will combine the values to an array if the parameter -name uses trailing `[]`. In fact, it is possible to create nested arrays too by using more than one pair of `[]`. - -In terms of OpenAPI, the parameters can be considered a single parameter with a list of values. - -```php -/** - * @OA\Get( - * path="/api/endpoint", - * description="The endpoint", - * operationId="endpoint", - * tags={"endpoints"}, - * @OA\Parameter( - * name="things[]", - * in="query", - * description="A list of things.", - * required=false, - * @OA\Schema( - * type="array", - * @OA\Items(type="integer") - * ) - * ), - * @OA\Response(response="200", description="All good") - * ) - */ -``` - -The corresponding bit of the spec will look like this: - -```yaml - parameters: - - - name: 'things[]' - in: query - description: 'A list of things.' - required: false - schema: - type: array - items: - type: integer -``` - -`swagger-ui` will show a form that allows to add/remove items (`integer` values in this case) to/from a list -and post those values as something like ```?things[]=1&things[]=2&things[]=0``` - -## Custom response classes - -Even with using refs there is a bit of overhead in sharing responses. One way around that is to write -your own response classes. -The beauty is that in your custom `__construct()` method you can prefill as much as you need. - -Best of all, this works for both annotations and attributes. - -Example: -```php -use OpenApi\Attributes as OA; - -/** - * @Annotation - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] -class BadRequest extends OA\Response -{ - public function __construct() - { - parent::__construct(response: 400, description: 'Bad request'); - } -} - -class Controller -{ - - #[OA\Get(path: '/foo', responses: [new BadRequest()])] - public function get() - { - } - - #[OA\Post(path: '/foo')] - #[BadRequest] - public function post() - { - } - - /** - * @OA\Delete( - * path="/foo", - * @BadRequest() - * ) - */ - public function delete() - { - } -} -``` - -::: tip Annotations only? -If you are only interested in annotations you canleave out the attribute setup line (`#[\Attribute...`) for `BadRequest`. - -Furthermore, your custom annotations should extend from the `OpenApi\Annotations` namespace. -::: - -## Annotating class constants -```php -use OpenApi\Attributes as OA; - -#[OA\Schema()] -class Airport -{ - #[OA\Property(property='kind')] - public const KIND = 'Airport'; -} -``` -The `const` property is supported in OpenApi 3.1.0. -```yaml -components: - schemas: - Airport: - properties: - kind: - type: string - const: Airport -``` -For 3.0.0 this is serialized into a single value `enum`. -```yaml -components: - schemas: - Airport: - properties: - kind: - type: string - enum: - - Airport -``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md deleted file mode 100644 index ee16686..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/faq.md +++ /dev/null @@ -1,80 +0,0 @@ -# FAQ - -## Warning: Required `@OA\Info()` not found - -With adding support for [PHP attributes](https://www.php.net/manual/en/language.attributes.php) in version 4, some -architectural changes had to be made. - -One of those changes is that placing annotations in your source files is now subject to the same limitations as attributes. -These limits are dictated by the PHP reflection API, specifically where it provides access to attributes and doc comments. - -This means stand-alone annotations are no longer supported and ignored as `swagger-php` cannot 'see' them any more. - -Supported locations: -* class -* interface -* trait -* method -* property -* class/interface const - -Most commonly this manifests with a warning about the required `@OA\Info` not being found. While most annotations have specific -related code, the info annotation (and a few more) is kind of global. - -The simplest solution to avoid this issue is to add a 'dummy' class to the docblock and add -all 'global' annotations (e.g. `Tag`, `Server`, `SecurityScheme`, etc.) **in a single docblock** to that class. - -```php -/** - * @OA\Tag( - * name="user", - * description="User related operations" - * ) - * @OA\Info( - * version="1.0", - * title="Example API", - * description="Example info", - * @OA\Contact(name="Swagger API Team") - * ) - * @OA\Server( - * url="https://example.localhost", - * description="API server" - * ) - */ -class OpenApiSpec -{ -} -``` - -## Skipping unknown `\SomeClass` - -This message means that `swagger-php` has tried to use reflection to inspect `\SomeClass` and that PHP could not find/load -that class. Effectively, this means that `class_exists("\SomeClass")` returns `false`. - -### Using the `-b` `--bootstrap` option - -There are a number of reasons why this could happen. If you are using the `openapi` command line tool from a global -installation typically the application classloader (composer) is not active. -With you application root being `myapp` you could try: - -```shell -openapi -b myapp/vendor/autoload.php myapp/src -``` - -The `-b` allows to execute some extra PHP code to load whatever is needed to register your apps classloader with PHP. - -### Namespace mismatch - -Another reason for this error could be that your class actually has the wrong namespace (or no namespace at all!). - -Depending on your framework this might still work in the context of your app, but the composer autoloader -alone might not be able to load your class (assuming you are using composer). - -## No output from `openapi` command line tool - -Depending on your PHP configuration, running the `openapi` command line tool might result in no output at all. - -The reason for this is that `openapi` currently uses the [`error_log`](https://www.php.net/manual/en/function.error-log.php) -function for all output. - -So if this is configured to write to a file, then it will seem like the command is broken. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md deleted file mode 100644 index c2eabcd..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/generating-openapi-documents.md +++ /dev/null @@ -1,60 +0,0 @@ -# Generating OpenAPI documents - -## `./bin/openapi` - -`swagger-php` includes a command line tool `./bin/openapi`. This can be used to generate OpenAPI documents. - -```shell -> ./vendor/bin/openapi app -o openapi.yaml -``` - -::: tip Output Format -By default the output format is YAML. If a filename is given (via `--output` or `-o`) -the tool will use the file extension to determine the format. - -The `--format` option can be used to force a specific format. -::: - -For a list of all available options use the `-h` option - -```shell -> ./bin/openapi -h - -Usage: openapi [--option value] [/path/to/project ...] - -Options: - --legacy (-l) Use legacy TokenAnalyser; default is the new ReflectionAnalyser - --output (-o) Path to store the generated documentation. - ex: --output openapi.yaml - --exclude (-e) Exclude path(s). - ex: --exclude vendor,library/Zend - --pattern (-n) Pattern of files to scan. - ex: --pattern "*.php" or --pattern "/\.(phps|php)$/" - --bootstrap (-b) Bootstrap a php file for defining constants, etc. - ex: --bootstrap config/constants.php - --processor Register an additional processor. - --format Force yaml or json. - --debug Show additional error information. - --version The OpenAPI version; defaults to 3.0.0. - --help (-h) Display this help message. -``` - -## Using PHP - -Depending on your use case PHP code can also be used to generate OpenAPI documents in a more dynamic way. - -In its simplest form this may look something like - -```php -toYaml(); -``` - -::: tip Programming API -Details about the `swagger-php` API can be found in the [reference](../reference/index.md). -::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md deleted file mode 100644 index e8c555b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# What is Swagger-PHP? - -`swagger-php` is a library that extracts API metadata from your PHP source code files. - -The idea is to add `swagger-php` [annotations](annotations.md) or [attributes](attributes.md) -next to the relevant PHP code in your application. These will contain the details about your API and -`swagger-php` will convert those into machine-readable [OpenAPI documentation](https://oai.github.io/Documentation/specification.html). - -By adding your API documentation next to the corresponding source code (same file!) makes it easy to keep it up-to-date -as all details can be modified in one place. - -::: tip Annotating vs. Annotations -When talking about annotating your code we mean the act of adding meta-data to your codebase. This can be done by -either adding [`Annotations`](annotations.md) or [`Attributes`](attributes.md). -::: - -::: warning Requirements -Using `swagger-php` requires a minimum of **PHP 7.2** for using annotations and -at least **PHP 8.1** to use attributes. -::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md deleted file mode 100644 index ba07e5b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/installation.md +++ /dev/null @@ -1,20 +0,0 @@ -# Installation - -## Per project - -We recommend adding `swagger-php` to your project using [Composer](https://getcomposer.org) - -```shell -> composer require zircote/swagger-php -``` - -## Globally - -Alternatively, use the composer `global` argument to install `swagger-php` globally. - -```shell -> composer global require zircote/swagger-php -``` -::: warning PATH variables -Remember to add the `~/.composer/vendor/bin` directory to the PATH in your environment. -::: diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md deleted file mode 100644 index 641e72d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v3.md +++ /dev/null @@ -1,58 +0,0 @@ -# Migrating to v3 - -Swagger-PHP 3.x generates an openapi.json file that follows the [OpenAPI Version 3.0.x Specification](https://github.com/OAI/OpenAPI-Specification). - -If you need to output the older 2.x specification use OpenApi-php 2.x - -## The default output changed from json to yaml - -This aligns better with the direction of the swagger documentation and examples. -Annotations can't be used as string anymore, you'll need to call `toYaml()` or `toJson()` if you prefer the json format. - -## Updated CLI - -- Added colors -- No output for successful execution (Removed summary) -- non-zero exit when an error occurred. -- Defaults to yaml -- Defaults to stdout. To save to openapi.yaml use `-o` or `>` - -## Changed annotations - -### SWG is renamed to OA - -The namespace is renamed from SWG (Swagger) to OA (OpenApi) - -### @SWG\Swagger() is renamed to @OA\OpenApi() - -### @SWG\Path() is renamed to @OA\PathItem() - -The specification uses the term "Path Item Object", updated the annotation to reflect that. - -### @SWG\Definition() is removed - -Use @OA\Schema() instead of @OA\Definition() and update the references from "#/definitions/something" to "#/components/schemas/something". - -### @SWG\Path is removed - -Use @OA\PathItem instead of @SWG\Path and update references. - -### Consumes, produces field is removed from OpenAPI specification - -Use @OA\MediaType to set data format. - -### Rename parameter references - -Rename `#/parameters/{parameter_name}` to `#/components/parameters/{parameter_name}` - -### Rename response references - -Rename `#/responses/{response}` to `#/components/responses/{response}` - -### Renamed cli - -Renamed swagger to openapi - -### More details about differences: - -[A Visual Guide to What's New in Swagger 3.0](https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/) diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md deleted file mode 100644 index 3e619a6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/migrating-to-v4.md +++ /dev/null @@ -1,138 +0,0 @@ -# Migrating to v4 - -## Overview -* As of PHP 8.1 annotations may be used as - [PHP attributes](https://www.php.net/manual/en/language.attributes.overview.php) instead. - That means all references to annotations in this document also apply to attributes. -* Annotations now **must be** associated with a structural element (class, trait, interface), a method, property or const. -* A new annotation `PathParameter` was added for improved framework support. -* A new annotation `Attachable` was added to simplify custom processing. - `Attachable` can be used to attach arbitrary data to any given annotation. -* Deprecated elements have been removed - * `\Openapi\Analysis::processors()` - * `\Openapi\Analyser::$whitelist` - * `\Openapi\Analyser::$defaultImports` - * `\Openapi\Logger` -* Legacy support is available via the previous `TokenAnalyser` -* Improvements to the `Generator` class - -## Annotations as PHP attributes -While PHP attributes have been around since PHP 8.0 they were lacking the ability to be nested. -This changes with PHP 8.1 which allows to use `new` in initializers. - -Swagger-php attributes also make use of named arguments, so attribute parameters can be (mostly) typed. -There are some limitations to type hints which can only be resolved once support for PHP 7.x is dropped. - -### Using annotations -```php - -use OpenApi\Annotations as OA; - -/** - * @OA\Info( - * version="1.0.0", - * title="My API", - * @OA\License(name="MIT"), - * @OA\Attachable() - * ) - */ -class OpenApiSpec -{ -} -``` -### Using attributes -```php - -use OpenApi\Attributes as OA; - -#[OA\Info( - version: '1.0.0', - title: 'My API', - attachables: [new OA\Attachable()] -)] -#[OA\License(name: 'MIT')] -class OpenApiSpec -{ -} -``` - -## Optional nesting -One of the few differences between annotations and attributes visible in the above example is that the `OA\License` attribute -is not nested within `OA\Info`. Nesting of attributes is possible and required in certain cases however, **in cases where there -is no ambiguity attributes may be all written on the top level** and swagger-php will do the rest. - -## Annotations must be associated with a structural element -The (now legacy) way of parsing PHP files meant that docblocks could live in a file without a single line -of actual PHP code. - -PHP Attributes cannot exist in isolation; they need code to be associated with and then are available -via reflection on the associated structural element. -In order to allow to keep supporting annotations and the code simple it made sense to treat annotations and attributes -the same in this respect. - -## The `PathParameter` annotation -As annotation this is just a short form for -```php - @OA\Parameter(in='body') -``` - -Things get more interesting when it comes to using it as attribute, though. In the context of -a controller you can now do something like -```php -class MyController -{ - #[OA\Get(path: '/products/{product_id}')] - public function getProduct( - #[OA\PathParameter] string $product_id) - { - } -} -``` -Here it avoids having to duplicate details about the `$product_id` parameter and the simple use of the attribute -will pick up typehints automatically. - -## The `Attachable` annotation -Technically these were added in version 3.3.0, however they become really useful only with version 4. - -The attachable annotation is similar to the OpenApi vendor extension `x=`. The main difference are that -1. Attachables allow complex structures and strong typing -2. **Attachables are not added to the generated spec.** - -Their main purpose is to make customizing swagger-php easier by allowing to add arbitrary data to any annotation. - -One possible use case could be custom annotations. Classes extending `Attachable` are allowed to limit -the allowed parent annotations. This means it would be easy to create a new attribute to flag certain endpoints -as private and exclude them under certain conditions from the spec (via a custom processor). - -## Removed deprecated elements -### `\Openapi\Analysis::processors()` -Processors have been moved into the `Generator` class incl. some new convenience methods. -### `\Openapi\Analyser::$whitelist` -This has been replaced with the `Generator` `namespaces` property. -### `\Openapi\Analyser::$defaultImports` -This has been replaced with the `Generator` `aliases` property. -### `\Openapi\Logger` -This class has been removed completely. Instead, you may configure a [PSR-3 logger](https://www.php-fig.org/psr/psr-3/). - -## Improvements to the `Generator` class -The removal of deprecated static config options means that the `Generator` class now is -the main entry point into swagger-php when used programmatically. - -To make the migration as simple as possible a new `Generator::withContext(callable)` has been added. -This allows to use parts of the library (an `Analyser` instance, for example) within the context of a `Generator` instance. - -Example: -```php -$analyser = createMyAnalyser(); - -$analysis = (new Generator()) - ->addAlias('fo', 'My\\Attribute\\Namespace') - ->addNamespace('Other\\Annotations\\') - ->withContext(function (Generator $generator, Analysis $analysis, Context $context) use ($analyser) { - $analyser->setGenerator($generator); - $analysis = $analyser->fromFile('my_code.php', $context); - $analysis->process($generator->getProcessors()); - - return $analysis; - }); -``` diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md deleted file mode 100644 index b14f5a6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/required-elements.md +++ /dev/null @@ -1,41 +0,0 @@ -# Required elements - -The OpenAPI specification defines a minimum set of information for a valid document. - -For the most part that consists of some general information about the API like `name`, `version` -and at least one endpoint. - -The endpoint, in turn, needs to have a path and at least one response. - -## Minimum required annotations - -With the above in mind a minimal API with a single endpoint could look like this - - - - - - -with the resulting OpenAPI document like this - -<<< @/snippets/minimal_api.yaml - -::: warning Code locations -Attributes and annotations can be added anywhere on declarations in code as defined by the PHP docs. -These are limited to the extent of what the PHP Reflection APIs supports. -::: - -## Optional elements - -Looking at the generated document you will notice that there are some elements that `swagger-php` adds automatically -when they are missing. - -For the most part those are `@OA\OpenApi`, `@OA\Components` and `@OA\PathItem`. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md b/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md deleted file mode 100644 index 7ee2dbb..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/guide/under-the-hood.md +++ /dev/null @@ -1,50 +0,0 @@ -# Under the hood - -## Processing flow - -- The `Generator` iterates over the given sources (Symfony `Finder`, file/directory list, etc) -- The configured analyser (`AnalyserInterface`) reads the files and builds an `Analysis` object. - Default (as of v4) is the `ReflectionAnalyser`. Alternatively, there is the `TokenAnalyser` which was the default in v3. -- The `Analysis` object and its annotations are then processed by the configured processors. -- If enabled, the analysis/annotations are validated. -- The root `OpenApi` annotation then contains all annotations and is serialized into YAML/JSON. - -## `Context` - -Each annotation is associated with a unique `Context` instance. This contains details, collected by the parser/analyser, -about the PHP context where the annotation was found. - -Typically, there will be a processor that uses the data to augment/enrich the annotation. - -**Examples of the data collected:** - - class/interface/trait/enum names - - property names - - doctype or native type hints - - file name and line number - -## Analysis - -Contains all detected annotations and other relevant meta-data. - -It uses a `SplObjectStorage` instance to store the parsed annotations. - -## Documentation - -This documentation is generated with [VitePress](https://vitepress.vuejs.org/) - -### Installation -```shell -cd docs -npm install vitepress -``` - -### Workflow - -* Edit `.md` files in the `docs` folder -* Update annotation / attribute PHP docblocks.
These will be extracted during publishing into the [reference](../reference/) section. -* Run 'composer docs:build' to check for any errors -* Run 'composer docs:dev' to test the generated documentation locally (`localhost:3000`) -* Create PR and update `master` -* Manually trigger the `gh-pages` workflow to update the online docs. - -The last step requires commit rights on `zircote/swagger-php`. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/index.md deleted file mode 100644 index b862797..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -home: true -actionText: User Guide → -actionLink: /guide/ -features: - - title: OpenAPI conformant - details: Generate OpenAPI documents in version 3.0 or 3.1. - - title: Document your API inside PHP source code - details: Using swagger-php lets you write the API documentation inside the PHP source files - which helps keeping the documentation up-to-date. - - title: Annotation and Attribute support - details: Annotations can be either docblocks or PHP 8.1 attributes. ---- - -### 1. Install with composer: - -```shell -> composer require zircote/swagger-php -``` - -### 2. Update your code - -Add `swagger-php` annotations or attributes to your source code. - - - - - - -### 3. Generate OpenAPI documentation - -```shell -> ./bin/openapi src -o openapi.yaml -``` - -### 4. Explore and interact with your API - -Use an OpenAPI tool like [Swagger UI ](https://swagger.io/tools/swagger-ui/) to explore and interact with your API. - -## Links - -- [User Guide](guide/index.md) -- [Reference](reference/index.md) -- [OpenApi Documentation](https://oai.github.io/Documentation/) -- [OpenApi Specification](https://spec.openapis.org/oas/v3.1.0.html) -- [Learn by example](https://github.com/zircote/swagger-php/tree/master/Examples) -- [Related projects](related-projects.md) -- [Swagger-php 2.x documentation](https://github.com/zircote/swagger-php/tree/2.x/docs) diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/package.json b/vendor/passkit/vendor/zircote/swagger-php/docs/package.json deleted file mode 100644 index 1663db1..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "swagger-php-docs", - "version": "4.0.0", - "license": "Apache-2.0", - "scripts": { - "dev": "vitepress dev .", - "build": "vitepress build .", - "deploy": "npm run build && git-directory-deploy --branch gh-pages --directory .vitepress/dist/" - }, - "devDependencies": { - "vitepress": "^0.22", - "vue3-tabs-component": "^1.0.8" - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md deleted file mode 100644 index 5f83e69..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/annotations.md +++ /dev/null @@ -1,1212 +0,0 @@ -# Annotations - -This page is generated automatically from the `swagger-php` sources. - -For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) - -In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. - - -## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Annotations/AdditionalProperties.php) - - - -#### Allowed in ---- -Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Attachable.php) - -A container for custom data to be attached to an annotation. - -These will be ignored by `swagger-php` but can be used for custom processing. - -#### Allowed in ---- -AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent - -## [Components](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Components.php) - -Holds a set of reusable objects for different aspects of the OA. - -All objects defined within the components object will have no effect on the API unless they are explicitly -referenced from properties outside the components object. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable - -#### Properties ---- -
-
callbacks : callable[]
-

Reusable Callbacks.

-
- -#### Reference ---- -- [OAI Components Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#components-object) - -## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Contact.php) - -Contact information for the exposed API. - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

The identifying name of the contact person/organization.

-
url : string
-

The URL pointing to the contact information.

-
email : string
-

The email address of the contact person/organization.

-
- -#### Reference ---- -- [OAI Contact Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#contact-object) - -## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Delete.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Discriminator.php) - -The discriminator is a specific object in a schema which is used to inform the consumer of -the specification of an alternative schema based on the value associated with it. - -This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. -On top of this subset, there are extensions provided by this specification to allow for more complete documentation. - -#### Allowed in ---- -Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
propertyName : string
-

The name of the property in the payload that will hold the discriminator value.

-
mapping : string[]
-

An object to hold mappings between payload values and schema names or references.

-
- -#### Reference ---- -- [OAI Discriminator Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminatorObject) -- [JSON Schema](http://json-schema.org/) - -## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Examples.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
example : string
-

The key into `#/components/examples`.

-
summary : string
-

Short description for the example.

-
description : string
-

Embedded literal example.
-
-The value field and externalValue field are mutually exclusive.
-
-To represent examples of media types that cannot naturally be represented
-in JSON or YAML, use a string value to contain the example, escaping where necessary.

-
value : int|string|array
-

Embedded literal example.
-
-The value field and externalValue field are mutually exclusive.
-
-To represent examples of media types that cannot naturally be represented
-in JSON or YAML, use a string value to contain the example, escaping where necessary.

-
externalValue : string
-

An URL that points to the literal example.
-
-This provides the capability to reference examples that cannot easily be included
-in JSON or YAML documents.
-
-The value field and externalValue field are mutually exclusive.

-
- -## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ExternalDocumentation.php) - -Allows referencing an external resource for extended documentation. - -#### Allowed in ---- -OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
description : string
-

A short description of the target documentation. GFM syntax can be used for rich text representation.

-
url : string
-

The URL for the target documentation.

-
- -#### Reference ---- -- [OAI External Documentation Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#external-documentation-object) - -## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Flow.php) - -Configuration details for a supported OAuth Flow. - -#### Allowed in ---- -SecurityScheme - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
authorizationUrl : string
-

The authorization url to be used for this flow.
-
-This must be in the form of an url.

-
tokenUrl : string
-

The token URL to be used for this flow.
-
-This must be in the form of an url.

-
refreshUrl : string
-

The URL to be used for obtaining refresh tokens.
-
-This must be in the form of an url.

-
flow : string
-

Flow name.
-
-One of ['implicit', 'password', 'authorizationCode', 'clientCredentials'].

-
scopes : array
-

The available scopes for the OAuth2 security scheme.
-
-A map between the scope name and a short description for it.

-
- -#### Reference ---- -- [OAI OAuth Flow Object](https://swagger.io/specification/#oauthFlowObject) - -## [Get](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Get.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Head](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Head.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Header](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Header.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Schema, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
header : string
-

No details available.

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-CommonMark syntax MAY be used for rich text representation.

-
required : bool
-

No details available.

-
deprecated : bool
-

Specifies that a parameter is deprecated and SHOULD be transitioned out of usage.

-
allowEmptyValue : bool
-

Sets the ability to pass empty-valued parameters.
-
-This is valid only for query parameters and allows sending a parameter with an empty value.
-
-Default value is false.
-
-If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue SHALL be ignored.

-
- -#### Reference ---- -- [OAI Header Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#headerObject). - -## [Info](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Info.php) - -The object provides metadata about the API. - -The metadata may be used by the clients if needed and may be presented in editing or documentation generation tools for convenience. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Contact, License, Attachable - -#### Properties ---- -
-
title : string
-

The title of the application.

-
description : string
-

A short description of the application.
-
-CommonMark syntax may be used for rich text representation.

-
termsOfService : string
-

An URL to the Terms of Service for the API.
-
-Must be in the format of an url.

-
version : string
-

The version of the OpenAPI document (which is distinct from the OpenAPI Specification version or the API implementation version).

-
- -#### Reference ---- -- [OAI Info Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#info-object) - -## [Items](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Items.php) - -The description of an item in a Schema with type `array`. - -#### Allowed in ---- -Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/JsonContent.php) - -Shorthand for a json response. - -Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/json'` will be generated. - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable - -## [License](https://github.com/zircote/swagger-php/tree/master/src/Annotations/License.php) - -License information for the exposed API. - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

The license name used for the API.

-
identifier : string
-

An SPDX license expression for the API. The `identifier` field is mutually exclusive of the `url` field.

-
url : string
-

An URL to the license used for the API. This MUST be in the form of an URL.
-
-The `url` field is mutually exclusive of the `identifier` field.

-
- -#### Reference ---- -- [OAI License Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#license-object) - -## [Link](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Link.php) - -The Link object represents a possible design-time link for a response. - -The presence of a link does not guarantee the caller's ability to successfully invoke it, rather it provides a known -relationship and traversal mechanism between responses and other operations. - -Unlike dynamic links (i.e. links provided in the response payload), the OA linking mechanism does not require -link information in the runtime response. - -For computing links, and providing instructions to execute them, a runtime expression is used for -accessing values in an operation and using them as parameters while invoking the linked operation. - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Server, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
link : string
-

The key into MediaType->links array.

-
operationRef : string
-

A relative or absolute reference to an OA operation.
-
-This field is mutually exclusive of the operationId field, and must point to an Operation object.
-
-Relative values may be used to locate an existing Operation object in the OpenAPI definition.

-
operationId : string
-

The name of an existing, resolvable OA operation, as defined with a unique operationId.
-
-This field is mutually exclusive of the operationRef field.

-
parameters : array<string,mixed>
-

A map representing parameters to pass to an operation as specified with operationId or identified via
-operationRef.
-
-The key is the parameter name to be used, whereas the value can be a constant or an expression to
-be evaluated and passed to the linked operation.
-The parameter name can be qualified using the parameter location [{in}.]{name} for operations
-that use the same parameter name in different locations (e.g. path.id).

-
requestBody
-

A literal value or {expression} to use as a request body when calling the target operation.

-
description : string
-

A description of the link.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Link Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object) - -## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Annotations/MediaType.php) - -Each Media Type object provides schema and examples for the media type identified by its key. - -#### Allowed in ---- -Response, RequestBody - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
mediaType : string
-

The key into Operation->content array.

-
example
-

Example of the media type.
-
-The example object should be in the correct format as specified by the media type.
-The example object is mutually exclusive of the examples object.
-
-Furthermore, if referencing a schema which contains an example,
-the example value shall override the example provided by the schema.

-
encoding : array<string,mixed>
-

A map between a property name and its encoding information.
-
-The key, being the property name, must exist in the schema as a property.
-
-The encoding object shall only apply to requestBody objects when the media type is multipart or
-application/x-www-form-urlencoded.

-
- -#### Reference ---- -- [OAI Media Type Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) - -## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Annotations/OpenApi.php) - -This is the root document object for the API specification. - -#### Nested elements ---- -Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable - -#### Properties ---- -
-
openapi : string
-

The semantic version number of the OpenAPI Specification version that the OpenAPI document uses.
-
-The openapi field should be used by tooling specifications and clients to interpret the OpenAPI document.
-
-A version specified via `Generator::setVersion()` will overwrite this value.
-
-This is not related to the API info::version string.

-
security : array
-

Lists the required security schemes to execute this operation.
-
-The name used for each property must correspond to a security scheme declared
-in the Security Schemes under the Components Object.
-Security Requirement Objects that contain multiple schemes require that
-all schemes must be satisfied for a request to be authorized.
-This enables support for scenarios where multiple query parameters or
-HTTP headers are required to convey security information.
-When a list of Security Requirement Objects is defined on the Open API object or
-Operation Object, only one of Security Requirement Objects in the list needs to
-be satisfied to authorize the request.

-
- -#### Reference ---- -- [OAI OpenApi Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#openapi-object) - -## [Options](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Options.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Parameter.php) - -Describes a single operation parameter. - -A unique parameter is defined by a combination of a name and location. - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
parameter : string
-

The key into Components::parameters or PathItem::parameters array.

-
name : string
-

The (case-sensitive) name of the parameter.
-
-If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object.
-
-If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored.
-For all other cases, the name corresponds to the parameter name used by the in property.

-
in : string
-

The location of the parameter.
-
-Possible values are "query", "header", "path" or "cookie".

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-
-CommonMark syntax may be used for rich text representation.

-
required : bool
-

Determines whether this parameter is mandatory.
-
-If the parameter location is "path", this property is required and its value must be true.
-Otherwise, the property may be included and its default value is false.

-
deprecated : bool
-

Specifies that a parameter is deprecated and should be transitioned out of usage.

-
allowEmptyValue : bool
-

Sets the ability to pass empty-valued parameters.
-
-This is valid only for query parameters and allows sending a parameter with an empty value.
-
-Default value is false.
-
-If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored.

-
style : string
-

Describes how the parameter value will be serialized depending on the type of the parameter value.
-
-Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form.

-
explode : bool
-

When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map.
-
-For other types of parameters this property has no effect.
-
-When style is form, the default value is true.
-For all other styles, the default value is false.

-
allowReserved : bool
-

Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding.
-
-This property only applies to parameters with an in value of query.
-
-The default value is false.

-
example
-

Example of the media type.
-
-The example should match the specified schema and encoding properties if present.
-The example object is mutually exclusive of the examples object.
-Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema.
-To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary.

-
content : MediaType[]
-

A map containing the representations for the parameter.
-
-The key is the media type and the value describes it.
-The map must only contain one entry.

-
matrix
-

Path-style parameters defined by RFC6570.

See: RFC6570

-
label
-

Label style parameters defined by RFC6570.

See: RFC6570

-
form
-

Form style parameters defined by RFC6570.
-
-This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0.

See: RFC6570

-
simple : array
-

Simple style parameters defined by RFC6570.
-
-This option replaces collectionFormat with a csv value from OpenAPI 2.0.

See: RFC6570

-
spaceDelimited : array
-

Space separated array values.
-
-This option replaces collectionFormat equal to ssv from OpenAPI 2.0.

-
pipeDelimited : array
-

Pipe separated array values.
-
-This option replaces collectionFormat equal to pipes from OpenAPI 2.0.

-
deepObject
-

Provides a simple way of rendering nested objects using form parameters.

-
- -#### Reference ---- -- [OAA Parameter Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) - -## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Patch.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathItem.php) - -Describes the operations available on a single path. - -A Path Item may be empty, due to ACL constraints. -The path itself is still exposed to the documentation viewer, but they will not know which operations and parameters are available. - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
path : string
-

Key for the Path Object (OpenApi->paths array).

-
summary : string
-

An optional, string summary, intended to apply to all operations in this path.

-
- -#### Reference ---- -- [OAI Path Item Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object) - -## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Annotations/PathParameter.php) - -A `@OA\Request` path parameter. - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Properties ---- -
-
in
-

No details available.

-
required
-

No details available.

-
- -## [Post](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Post.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Property](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Property.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Properties ---- -
-
property : string
-

The key into Schema->properties array.

-
- -## [Put](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Put.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Annotations/RequestBody.php) - -Describes a single request body. - -#### Allowed in ---- -Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put - -#### Nested elements ---- -MediaType, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
request : string
-

Request body model name.

-
description : string
-

A brief description of the parameter.
-
-This could contain examples of use.
-
-CommonMark syntax may be used for rich text representation.

-
required : bool
-

Determines whether this parameter is mandatory.
-
-If the parameter location is "path", this property is required and its value must be true.
-Otherwise, the property may be included and its default value is false.

-
- -#### Reference ---- -- [OAI Request Body Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#requestBodyObject) - -## [Response](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Response.php) - -Describes a single response from an API Operation, including design-time, -static links to operations based on the response. - -#### Allowed in ---- -Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace - -#### Nested elements ---- -MediaType, Header, Link, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
response : string|int
-

The key into Operations->responses array.
-
-A HTTP status code or default.

-
description : string
-

A short description of the response.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object) - -## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Schema.php) - -The definition of input and output data types. - -These types can be objects, but also primitives and arrays. - -This object is based on the [JSON Schema Specification](http://json-schema.org) and uses a predefined subset of it. -On top of this subset, there are extensions provided by this specification to allow for more complete documentation. - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, Header - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
schema : string
-

The key into Components->schemas array.

-
title : string
-

Can be used to decorate a user interface with information about the data produced by this user interface.
-
-Preferably short; use description for more details.

-
description : string
-

A description will provide explanation about the purpose of the instance described by this schema.

-
maxProperties : int
-

An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the
-value of this property.

-
minProperties : int
-

An object instance is valid against "minProperties" if its number of properties is greater than, or equal to,
-the value of this property.

-
required : string[]
-

An object instance is valid against this property if its property set contains all elements in this property's
-array value.

-
type : string
-

The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or
-"object".

-
format : string
-

The extending format for the previously mentioned type. See Data Type Formats for further details.

-
collectionFormat : string
-

Determines the format of the array if type array is used.
-Possible values are:
-- csv: comma separated values foo,bar.
-- ssv: space separated values foo bar.
-- tsv: tab separated values foo\tbar.
-- pipes: pipe separated values foo|bar.
-- multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz.
-This is valid only for parameters of type query or formData.
-Default value is csv.

-
default
-

Sets a default value to the parameter. The type of the value depends on the defined type.

See: JSON schema validation

-
maximum : int|float
-

No details available.

See: JSON schema validation

-
exclusiveMaximum : bool
-

No details available.

See: JSON schema validation

-
minimum : int|float
-

No details available.

See: JSON schema validation

-
exclusiveMinimum : bool
-

No details available.

See: JSON schema validation

-
maxLength : int
-

No details available.

See: JSON schema validation

-
minLength : int
-

No details available.

See: JSON schema validation

-
pattern : string
-

A string instance is considered valid if the regular expression matches the instance successfully.

-
maxItems : int
-

No details available.

See: JSON schema validation

-
minItems : int
-

No details available.

See: JSON schema validation

-
uniqueItems : bool
-

No details available.

See: JSON schema validation

-
enum : string[]|int[]|float[]
-

No details available.

See: JSON schema validation

-
multipleOf : int|float
-

A numeric instance is valid against "multipleOf" if the result of the division of the instance by this
-property's value is an integer.

-
readOnly : bool
-

Declares the property as "read only".
-
-Relevant only for Schema "properties" definitions.
-
-This means that it may be sent as part of a response but should not be sent as part of the request.
-If the property is marked as readOnly being true and is in the required list, the required will take effect on
-the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is
-false.

-
writeOnly : bool
-

Declares the property as "write only".
-
-Relevant only for Schema "properties" definitions.
-Therefore, it may be sent as part of a request but should not be sent as part of the response.
-If the property is marked as writeOnly being true and is in the required list, the required will take effect on
-the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is
-false.

-
example
-

A free-form property to include an example of an instance for this schema.
-
-To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to
-contain the example with escaping where necessary.

-
nullable : bool
-

Allows sending a null value for the defined schema.
-Default value is false.

-
deprecated : bool
-

Specifies that a schema is deprecated and should be transitioned out of usage.
-Default value is false.

-
allOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against all schemas
-defined by this property's value.

-
anyOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against at least one
-schema defined by this property's value.

-
oneOf : Schema[]
-

An instance validates successfully against this property if it validates successfully against exactly one schema
-defined by this property's value.

-
not
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29.

-
additionalItems
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10.

-
contains
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14.

-
patternProperties
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19.

-
dependencies
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21.

-
propertyNames
-

http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22.

-
const : mixed
-

http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3.

-
- -#### Reference ---- -- [OAI Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schemaObject) -- [JSON Schema](http://json-schema.org/) - -## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Annotations/SecurityScheme.php) - - - -#### Allowed in ---- -Components - -#### Nested elements ---- -Flow, Attachable - -#### Properties ---- -
-
ref : string|object
-

No details available.

See: Using refs

-
securityScheme : string
-

The key into OpenApi->security array.

-
type : string
-

The type of the security scheme.

-
description : string
-

A short description for security scheme.

-
name : string
-

The name of the header or query parameter to be used.

-
in : string
-

Required The location of the API key.

-
bearerFormat : string
-

A hint to the client to identify how the bearer token is formatted.
-
-Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes.

-
scheme : string
-

The name of the HTTP Authorization scheme.

See: RFC7235

-
openIdConnectUrl : string
-

OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL.

-
- -#### Reference ---- -- [OAI Security Scheme Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#securitySchemeObject). - -## [Server](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Server.php) - -An object representing a server. - -#### Allowed in ---- -OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link - -#### Nested elements ---- -ServerVariable, Attachable - -#### Properties ---- -
-
url : string
-

An URL to the target host.
-
-This URL supports Server Variables and may be relative,
-to indicate that the host location is relative to the location where the OpenAPI document is being served.
-Variable substitutions will be made when a variable is named in {brackets}.

-
description : string
-

An optional string describing the host designated by the URL.
-
-CommonMark syntax may be used for rich text representation.

-
- -#### Reference ---- -- [OAI Server Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-object) - -## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Annotations/ServerVariable.php) - -An object representing a server variable for server URL template substitution. - -#### Allowed in ---- -Server - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
serverVariable : string
-

The key into Server->variables array.

-
enum : string[]|int[]|float[]
-

An enumeration of values to be used if the substitution options are from a limited set.

-
default : string
-

The default value to use for substitution, and to send, if an alternate value is not supplied.
-
-Unlike the Schema Object's default, this value must be provided by the consumer.

-
variables : array
-

A map between a variable name and its value.
-
-The value is used for substitution in the server's URL template.

-
description : string
-

An optional description for the server variable.
-
-CommonMark syntax MAY be used for rich text representation.

-
- -#### Reference ---- -- [OAI Server Variable Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object) - -## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Tag.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -ExternalDocumentation, Attachable - -#### Properties ---- -
-
name : string
-

The name of the tag.

-
description : string
-

A short description for the tag. GFM syntax can be used for rich text representation.

-
- -#### Reference ---- -- [OAI Tag Object]( https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#tagObject). - -## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Trace.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Properties ---- -
-
method
-

No details available.

-
- -## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Annotations/Xml.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, Property, Schema, Items, XmlContent - -#### Nested elements ---- -Attachable - -#### Properties ---- -
-
name : string
-

Replaces the name of the element/attribute used for the described schema property.
-
-When defined within the Items Object (items), it will affect the name of the individual XML elements within the list.
-When defined alongside type being array (outside the items), it will affect the wrapping element
-and only if wrapped is true.
-
-If wrapped is false, it will be ignored.

-
namespace : string
-

The URL of the namespace definition. Value SHOULD be in the form of an URL.

-
prefix : string
-

The prefix to be used for the name.

-
attribute : bool
-

Declares whether the property definition translates to an attribute instead of an element.
-
-Default value is false.

-
wrapped : bool
-

MAY be used only for an array definition.
-
-Signifies whether the array is wrapped (for example <books><book/><book/></books>)
-or unwrapped (<book/><book/>).
-
-Default value is false. The definition takes effect only when defined alongside type being array (outside the items).

-
- -#### Reference ---- -- [OAI XML Object](https://github.com/OAI/OpenAPI-Specification/blob/OpenAPI.next/versions/3.0.md#xmlObject). - -## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Annotations/XmlContent.php) - -Shorthand for a xml response. - -Use as `@OA\Schema` inside a `Response` and `MediaType`->`'application/xml'` will be generated. - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable - diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md deleted file mode 100644 index 55dfd66..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/attributes.md +++ /dev/null @@ -1,1664 +0,0 @@ -# Attributes - -This page is generated automatically from the `swagger-php` sources. - -For improvements head over to [GitHub](https://github.com/zircote/swagger-php) and create a PR ;) - -In addition to this page, there are also a number of [examples](https://github.com/zircote/swagger-php/tree/master/Examples#readme) which might help you out. - - -## [AdditionalProperties](https://github.com/zircote/swagger-php/tree/master/src/Attributes/AdditionalProperties.php) - - - -#### Allowed in ---- -Schema, Property, Items, JsonContent, XmlContent, AdditionalProperties - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Attachable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Attachable.php) - - - -#### Allowed in ---- -AdditionalProperties, Components, Contact, Delete, Discriminator, Examples, ExternalDocumentation, Flow, Get, Head, Header, Info, Items, JsonContent, License, Link, MediaType, OpenApi, Operation, Options, Parameter, Patch, PathItem, PathParameter, Post, Property, Put, RequestBody, Response, Schema, SecurityScheme, Server, ServerVariable, Tag, Trace, Xml, XmlContent - -#### Parameters ---- -
-
properties : array
-

No details available.

-
- -## [Components](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Components.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Response, Parameter, PathParameter, RequestBody, Examples, Header, SecurityScheme, Link, Schema, Attachable - -#### Parameters ---- -
-
schemas : Schema[]|null
-

No details available.

-
responses : Response[]|null
-

No details available.

-
parameters : Parameter[]|null
-

No details available.

-
requestBodies : RequestBody[]|null
-

No details available.

-
examples : Examples[]|null
-

No details available.

-
headers : Header[]|null
-

No details available.

-
securitySchemes : SecurityScheme[]|null
-

No details available.

-
links : Link[]|null
-

No details available.

-
callbacks : callable[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Contact](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Contact.php) - - - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
url : string|null
-

No details available.

-
email : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Delete](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Delete.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Discriminator](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Discriminator.php) - - - -#### Allowed in ---- -Schema, Property, AdditionalProperties, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
propertyName : string|null
-

No details available.

-
mapping : string[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Examples](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Examples.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
example : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
description : string|null
-

No details available.

-
value : array|string|int|null
-

No details available.

-
externalValue : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [ExternalDocumentation](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ExternalDocumentation.php) - - - -#### Allowed in ---- -OpenApi, Tag, Schema, AdditionalProperties, Property, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Items, JsonContent, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
description : string|null
-

No details available.

-
url : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Flow](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Flow.php) - - - -#### Allowed in ---- -SecurityScheme - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
authorizationUrl : string|null
-

No details available.

-
tokenUrl : string|null
-

No details available.

-
refreshUrl : string|null
-

No details available.

-
flow : string|null
-

No details available.

-
scopes : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Get](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Get.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Head](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Head.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Header](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Header.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Schema, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
header : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Info](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Info.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Contact, License, Attachable - -#### Parameters ---- -
-
version : string|null
-

No details available.

-
description : string|null
-

No details available.

-
title : string|null
-

No details available.

-
termsOfService : string|null
-

No details available.

-
contact : OpenApi\Attributes\Contact|null
-

No details available.

-
license : OpenApi\Attributes\License|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Items](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Items.php) - - - -#### Allowed in ---- -Property, AdditionalProperties, Schema, JsonContent, XmlContent, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [JsonContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/JsonContent.php) - - - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, AdditionalProperties, Examples, Attachable - -#### Parameters ---- -
-
examples : array<string,Examples>
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [License](https://github.com/zircote/swagger-php/tree/master/src/Attributes/License.php) - - - -#### Allowed in ---- -Info - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
identifier : string|null
-

No details available.

-
url : string|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Link](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Link.php) - - - -#### Allowed in ---- -Components, Response - -#### Nested elements ---- -Server, Attachable - -#### Parameters ---- -
-
link : string|null
-

No details available.

-
operationRef : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
parameters : array<string,mixed>
-

No details available.

-
requestBody
-

No details available.

-
description : string|null
-

No details available.

-
server : OpenApi\Attributes\Server|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [MediaType](https://github.com/zircote/swagger-php/tree/master/src/Attributes/MediaType.php) - - - -#### Allowed in ---- -Response, RequestBody - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
mediaType : string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
encoding : array<string,mixed>
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [OpenApi](https://github.com/zircote/swagger-php/tree/master/src/Attributes/OpenApi.php) - - - -#### Nested elements ---- -Info, Server, PathItem, Components, Tag, ExternalDocumentation, Attachable - -#### Parameters ---- -
-
openapi : string
-

No details available.

-
info : OpenApi\Attributes\Info|null
-

No details available.

-
servers : Server[]|null
-

No details available.

-
security : array|null
-

No details available.

-
tags : Tag[]|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
paths : PathItem[]|null
-

No details available.

-
components : OpenApi\Attributes\Components|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Options](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Options.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Parameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Parameter.php) - - - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
parameter : string|null
-

No details available.

-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
in : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
style : string|null
-

No details available.

-
explode : bool|null
-

No details available.

-
allowReserved : bool|null
-

No details available.

-
spaceDelimited : array|null
-

No details available.

-
pipeDelimited : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Patch](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Patch.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [PathItem](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathItem.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -Get, Post, Put, Delete, Patch, Trace, Head, Options, Parameter, PathParameter, Server, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
servers : Server[]|null
-

No details available.

-
parameters : Parameter[]|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [PathParameter](https://github.com/zircote/swagger-php/tree/master/src/Attributes/PathParameter.php) - - - -#### Allowed in ---- -Components, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace - -#### Nested elements ---- -Schema, Examples, Attachable - -#### Parameters ---- -
-
parameter : string|null
-

No details available.

-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
in : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allowEmptyValue : bool|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : OpenApi\Attributes\Schema|null
-

No details available.

-
example
-

No details available.

-
examples : array<string,Examples>
-

No details available.

-
style : string|null
-

No details available.

-
explode : bool|null
-

No details available.

-
allowReserved : bool|null
-

No details available.

-
spaceDelimited : array|null
-

No details available.

-
pipeDelimited : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Post](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Post.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Property](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Property.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, JsonContent, XmlContent, Property, Items - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
property : string|null
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Put](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Put.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [RequestBody](https://github.com/zircote/swagger-php/tree/master/src/Attributes/RequestBody.php) - - - -#### Allowed in ---- -Components, Delete, Get, Head, Operation, Options, Patch, Post, Trace, Put - -#### Nested elements ---- -MediaType, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
request : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : bool|null
-

No details available.

-
content : array<MediaType>|JsonContent|XmlContent|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Response](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Response.php) - - - -#### Allowed in ---- -Components, Operation, Get, Post, Put, Patch, Delete, Head, Options, Trace - -#### Nested elements ---- -MediaType, Header, Link, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
response : string|int|null
-

No details available.

-
description : string|null
-

No details available.

-
headers : Header[]
-

No details available.

-
content : MediaType|JsonContent|XmlContent|array<MediaType|XmlContent>
-

No details available.

-
links : Link[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Schema](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Schema.php) - - - -#### Allowed in ---- -Components, Parameter, PathParameter, MediaType, Header - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
const : mixed
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [SecurityScheme](https://github.com/zircote/swagger-php/tree/master/src/Attributes/SecurityScheme.php) - - - -#### Allowed in ---- -Components - -#### Nested elements ---- -Flow, Attachable - -#### Parameters ---- -
-
ref : object|string|null
-

No details available.

-
securityScheme : string|null
-

No details available.

-
type : string|null
-

No details available.

-
description : string|null
-

No details available.

-
name : string|null
-

No details available.

-
in : string|null
-

No details available.

-
bearerFormat : string|null
-

No details available.

-
scheme : string|null
-

No details available.

-
openIdConnectUrl : string|null
-

No details available.

-
flows : Flow[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Server](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Server.php) - - - -#### Allowed in ---- -OpenApi, PathItem, Operation, Get, Post, Put, Delete, Patch, Head, Options, Trace, Link - -#### Nested elements ---- -ServerVariable, Attachable - -#### Parameters ---- -
-
url : string|null
-

No details available.

-
description : string|null
-

No details available.

-
variables : ServerVariable[]
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [ServerVariable](https://github.com/zircote/swagger-php/tree/master/src/Attributes/ServerVariable.php) - - - -#### Allowed in ---- -Server - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
serverVariable : string|null
-

No details available.

-
description : string|null
-

No details available.

-
default : string|null
-

No details available.

-
enum : string[]|int[]|float[]|null
-

No details available.

-
variables : array|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Tag](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Tag.php) - - - -#### Allowed in ---- -OpenApi - -#### Nested elements ---- -ExternalDocumentation, Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
description : string|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Trace](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Trace.php) - - - -#### Allowed in ---- -PathItem - -#### Nested elements ---- -Parameter, PathParameter, Response, ExternalDocumentation, Server, RequestBody, Attachable - -#### Parameters ---- -
-
path : string|null
-

No details available.

-
operationId : string|null
-

No details available.

-
description : string|null
-

No details available.

-
summary : string|null
-

No details available.

-
security : array
-

No details available.

-
servers : Server[]
-

No details available.

-
requestBody : OpenApi\Attributes\RequestBody|null
-

No details available.

-
tags : string[]
-

No details available.

-
parameters : Parameter[]
-

No details available.

-
responses : Response[]
-

No details available.

-
callbacks : callable[]
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [Xml](https://github.com/zircote/swagger-php/tree/master/src/Attributes/Xml.php) - - - -#### Allowed in ---- -AdditionalProperties, Schema, Property, Schema, Items, XmlContent - -#### Nested elements ---- -Attachable - -#### Parameters ---- -
-
name : string|null
-

No details available.

-
namespace : string|null
-

No details available.

-
prefix : string|null
-

No details available.

-
attribute : bool|null
-

No details available.

-
wrapped : bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- -## [XmlContent](https://github.com/zircote/swagger-php/tree/master/src/Attributes/XmlContent.php) - - - -#### Nested elements ---- -Discriminator, Items, Property, ExternalDocumentation, Xml, AdditionalProperties, Examples, Attachable - -#### Parameters ---- -
-
examples : array<string,Examples>
-

No details available.

-
ref : object|string|null
-

No details available.

-
schema : string|null
-

No details available.

-
title : string|null
-

No details available.

-
description : string|null
-

No details available.

-
required : string[]
-

No details available.

-
properties : Property[]
-

No details available.

-
type : string|null
-

No details available.

-
format : string|null
-

No details available.

-
items : OpenApi\Attributes\Items|null
-

No details available.

-
collectionFormat : string|null
-

No details available.

-
default
-

No details available.

-
maximum : int|float
-

No details available.

-
exclusiveMaximum : bool|null
-

No details available.

-
minimum : int|float
-

No details available.

-
exclusiveMinimum : bool|null
-

No details available.

-
maxLength : int|null
-

No details available.

-
minLength : int|null
-

No details available.

-
maxItems : int|null
-

No details available.

-
minItems : int|null
-

No details available.

-
uniqueItems : bool|null
-

No details available.

-
pattern : string|null
-

No details available.

-
enum : string[]|int[]|float[]
-

No details available.

-
discriminator : OpenApi\Attributes\Discriminator|null
-

No details available.

-
readOnly : bool|null
-

No details available.

-
writeOnly : bool|null
-

No details available.

-
xml : OpenApi\Attributes\Xml|null
-

No details available.

-
externalDocs : OpenApi\Attributes\ExternalDocumentation|null
-

No details available.

-
example
-

No details available.

-
nullable : bool|null
-

No details available.

-
deprecated : bool|null
-

No details available.

-
allOf : Schema[]
-

No details available.

-
anyOf : Schema[]
-

No details available.

-
oneOf : Schema[]
-

No details available.

-
additionalProperties : OpenApi\Attributes\AdditionalProperties|bool|null
-

No details available.

-
x : array<string,string>|null
-

No details available.

-
attachables : Attachable[]|null
-

No details available.

-
- diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md deleted file mode 100644 index a8f9c99..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/generator.md +++ /dev/null @@ -1,161 +0,0 @@ -# Using the `Generator` - -## Introduction -The `Generator` class provides an object-oriented way to use `swagger-php` and all its aspects in a single place. - -## The `\OpenApi\scan()` function - -For a long time the `\OpenApi\scan()` function was the main entry point into using swagger-php from PHP code. - -```php -/** - * Scan the filesystem for OpenAPI annotations and build openapi-documentation. - * - * @param array|Finder|string $directory The directory(s) or filename(s) - * @param array $options - * exclude: string|array $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) - * pattern: string $pattern File pattern(s) to scan (default: *.php) - * analyser: defaults to StaticAnalyser - * analysis: defaults to a new Analysis - * processors: defaults to the registered processors in Analysis - * - * @return OpenApi - */ - function scan($directory, $options = []) { /* ... */ } -``` - -Using it looked typically something like this: -```php -require("vendor/autoload.php"); - -$openapi = \OpenApi\scan(__DIR__, ['exclude' => ['tests'], 'pattern' => '*.php']); -``` - -The two configuration options for the underlying Doctrine doc-block parser `aliases` and `namespaces` -are not part of this function and need to be set separately. - -Being static this means setting them back is the callers responsibility and there is also the fact that -some Doctrine configuration currently can not be reverted easily. - -Therefore, having a single side effect free way of using swagger-php seemed like a good idea... - -## The `\OpenApi\Generator` class - -The `Generator` class can be used in object-oriented (and fluent) style which allows for easy customization -if needed. - -In that case to actually process the given input files the **non-static** method `generate()` is to be used. - -Full example of using the `Generator` class to generate OpenApi specs. - -```php -require("vendor/autoload.php"); - -$validate = true; -$logger = new \Psr\Log\NullLogger(); -$processors = [/* my processors */]; -$finder = \Symfony\Component\Finder\Finder::create()->files()->name('*.php')->in(__DIR__); - -$openapi = (new \OpenApi\Generator($logger)) - ->setProcessors($processors) - ->setAliases(['MY' => 'My\Annotations']) - ->setNamespaces(['My\\Annotations\\']) - ->setAnalyser(new \OpenApi\Analysers\TokenAnalyser()) - ->setVersion(\OpenApi\Annotations\OpenApi::VERSION_3_0_0) - ->generate(['/path1/to/project', $finder], new \OpenApi\Analysis(), $validate); -``` - -`Aliases` and `namespaces` are additional options that allow to customize the parsing of docblocks. - -Defaults: -* **aliases**: `['oa' => 'OpenApi\\Annotations']` - - Aliases help the underlying `doctrine annotations library` to parse annotations. Effectively they avoid having - to write `use OpenApi\Annotations as OA;` in your code and make `@OA\property(..)` annotations still work. - -* **namespaces**: `['OpenApi\\Annotations\\']` - - Namespaces control which annotation namespaces can be autoloaded automatically. Under the hood this - is handled by registering a custom loader with the `doctrine annotation library`. - -Advantages: -* The `Generator` code will handle configuring things as before in a single place -* Static settings will be reverted to the default once finished -* The get/set methods allow for using type hints -* Static configuration is deprecated and can be removed at some point without code changes -* Build in support for PSR logger -* Support for [Symfony Finder](https://symfony.com/doc/current/components/finder.html), `\SplInfo` and file/directory names (`string) as source. - -The minimum code required, using the `generate()` method, looks quite similar to the old `scan()` code: - -```php - /** - * Generate OpenAPI spec by scanning the given source files. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - file / directory name - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param null|Analysis $analysis custom analysis instance - * @param bool $validate flag to enable/disable validation of the returned spec - */ - public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): \OpenApi\OpenApi { /* ... */ } -``` - -```php -require("vendor/autoload.php"); - -$openapi = (new \OpenApi\Generator())->generate(['/path1/to/project']); -``` - -For those that want to type even less and keep using a plain array to configure `swagger-php` there is also a static version: - -```php -toYaml(); -``` - -**Note:** While using the same name as the old `scan()` function, the `Generator::scan` method is not -100% backwards compatible. - -```php - /** - * Static wrapper around `Generator::generate()`. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param array $options - * aliases: null|array Defaults to `['oa' => 'OpenApi\\Annotations']`. - * namespaces: null|array Defaults to `['OpenApi\\Annotations\\']`. - * analyser: null|AnalyserInterface Defaults to a new `ReflectionAnalyser` supporting both docblocks and attributes. - * analysis: null|Analysis Defaults to a new `Analysis`. - * processors: null|array Defaults to `Analysis::processors()`. - * logger: null|\Psr\Log\LoggerInterface If not set logging will use \OpenApi\Logger as before. - * validate: bool Defaults to `true`. - */ - public static function scan(iterable $sources, array $options = []): OpenApi { /* ... */ } -``` - -Most notably the `exclude` and `pattern` keys are no longer supported. Instead, a Symfony `Finder` instance can be passed in -as source directly (same as with `Generator::generate()`). - -If needed, the `\OpenApi\Util` class provides a builder method that allows to keep the status-quo - -```php -$exclude = ['tests']; -$pattern = '*.php'; - -$openapi = \OpenApi\Generator::scan(\OpenApi\Util::finder(__DIR__, $exclude, $pattern)); - -// same as - -$openapi = \OpenApi\scan(__DIR__, ['exclude' => $exclude, 'pattern' => $pattern]); diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md deleted file mode 100644 index 6ec960a..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/index.md +++ /dev/null @@ -1,23 +0,0 @@ -# Reference - -In total there are a number of different aspects to using `swagger-php`. Depending on how custom your requirements are this might be limited to just annotating your code and using the command line tool. - -However, `swagger-php` offers more. - -* [Attributes](attributes.md) - - The new way of adding meta-data to your codebase. Requires PHP 8.1 - -* [Docblock annotations](annotations.md) - - The 'traditional' way of documenting your API. - -* The [`Generator`](generator.md) - - The `\OpenAPI\Generator` class is the main entry point to programmatically generate OpenAPI documents from your code. - -* [Processors](processors.md) - - `swagger-php` comes with a list of pre-defined processors that convert the raw data to a - complete OpenAPI document. - Custom processors can be added or existing removed to tweak swagger-php` to your requirements. diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md b/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md deleted file mode 100644 index 5010a6a..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/reference/processors.md +++ /dev/null @@ -1,6 +0,0 @@ -# Processors - -## Adding/removing processors - -## Processors -### OperationId diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md b/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md deleted file mode 100644 index 2f20ef7..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/related-projects.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -sidebar: false ---- - -# Related projects - -| Project | Description | -| ----------------------------- | --------------------------------------------------------- | -| [Swagger UI][1] | The webinterface for reading the generated documentation | -| [Swagger Explained][2] | Browse the spec by using an swagger.json. | -| [silex2swagger][3] | Generate swagger documentation from Silex Annotations | -| [yii2-swagger][4] | swagger-php intergation with yii2 | -| [Lumen swagger][5] | swagger-php integration with lumen/laravel | -| [NelmioApiDocBundle][6] | Symfony bundle on top of swagger-php | -| [auto-swagger-ui][7] | Automatically add swagger ui and json to your application | -| [openapi-router][8] | Configure framework routes from OpenApi annotations | -| [openapi-verifier][9] | Verify response against OpenAPI specification in PHPUnit | -| [openapi-filter][10] | Filter internal paths, operations, parameters, etc | -| [OpenAPI-Symfony-Routing][11] | Load routes in Symfony based on OpenAPI annotations | -| [Swag It PHP][12] | Convert JSON to PHP Swagger annotations | - -Is a related project missing? Create a pull request! - -[1]: https://swagger.io/tools/swagger-ui/ -[2]: https://bfanger.nl/swagger-explained/ -[3]: https://github.com/DerManoMann/silex2swagger -[4]: https://github.com/lichunqiang/yii2-swagger -[5]: https://github.com/DarkaOnLine/SwaggerLumen -[6]: https://github.com/nelmio/NelmioApiDocBundle -[7]: https://github.com/kevupton/auto-swagger-ui -[8]: https://github.com/DerManoMann/openapi-router -[9]: https://github.com/DerManoMann/openapi-verifier -[10]: https://github.com/Mermade/openapi-filter -[11]: https://github.com/Tobion/OpenAPI-Symfony-Routing -[12]: https://kizu514.com/swagit.php diff --git a/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php b/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php deleted file mode 100644 index 2772d36..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/docs/snippets/example_annotations.php +++ /dev/null @@ -1,21 +0,0 @@ - top level annotations - */ - public function build(\Reflector $reflector, Context $context): array; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php deleted file mode 100644 index 0db5bdb..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php +++ /dev/null @@ -1,132 +0,0 @@ -generator = $generator; - } - - public function build(\Reflector $reflector, Context $context): array - { - if (\PHP_VERSION_ID < 80100 || !method_exists($reflector, 'getAttributes')) { - return []; - } - - if ($reflector instanceof \ReflectionProperty && method_exists($reflector, 'isPromoted') && $reflector->isPromoted()) { - // handled via __construct() parameter - return []; - } - - // no proper way to inject - Generator::$context = $context; - - /** @var AbstractAnnotation[] $annotations */ - $annotations = []; - try { - foreach ($reflector->getAttributes() as $attribute) { - try { - $instance = $attribute->newInstance(); - if ($instance instanceof AbstractAnnotation) { - $annotations[] = $instance; - } - } catch (\Error $e) { - $context->logger->debug('Could not instantiate attribute: ' . $e->getMessage(), ['exception' => $e]); - } - } - - if ($reflector instanceof \ReflectionMethod) { - // also look at parameter attributes - foreach ($reflector->getParameters() as $rp) { - foreach ([Property::class, Parameter::class, PathParameter::class] as $attributeName) { - foreach ($rp->getAttributes($attributeName) as $attribute) { - $instance = $attribute->newInstance(); - $type = (($rnt = $rp->getType()) && $rnt instanceof \ReflectionNamedType) ? $rnt->getName() : Generator::UNDEFINED; - $nullable = $rnt ? $rnt->allowsNull() : true; - - if ($instance instanceof Property) { - $instance->property = $rp->getName(); - if (Generator::isDefault($instance->type)) { - $instance->type = $type; - } - $instance->nullable = $nullable; - } else { - $instance->name = $rp->getName(); - $instance->required = !$nullable; - $context = new Context(['nested' => $this], $context); - $context->comment = null; - $instance->merge([new Schema(['type' => $type, '_context' => $context])]); - } - $annotations[] = $instance; - } - } - } - } - } finally { - Generator::$context = null; - } - - $annotations = array_values(array_filter($annotations, function ($a) { - return $a !== null && $a instanceof AbstractAnnotation; - })); - - // merge backwards into parents... - $isParent = function (AbstractAnnotation $annotation, AbstractAnnotation $possibleParent): bool { - // regular annotation hierarchy - $explicitParent = null !== $possibleParent::matchNested(get_class($annotation)); - - $isParentAllowed = false; - // support Attachable subclasses - if ($isAttachable = $annotation instanceof Attachable) { - if (!$isParentAllowed = (null === $annotation->allowedParents())) { - // check for allowed parents - foreach ($annotation->allowedParents() as $allowedParent) { - if ($possibleParent instanceof $allowedParent) { - $isParentAllowed = true; - break; - } - } - } - } - - // Property can be nested... - return get_class($annotation) != get_class($possibleParent) - && ($explicitParent || ($isAttachable && $isParentAllowed)); - }; - foreach ($annotations as $index => $annotation) { - for ($ii = 0; $ii < count($annotations); ++$ii) { - if ($ii === $index) { - continue; - } - $possibleParent = $annotations[$ii]; - if ($isParent($annotation, $possibleParent)) { - $possibleParent->merge([$annotation]); - } - } - } - - $annotations = array_filter($annotations, function ($a) { - return !$a instanceof Attachable; - }); - - return $annotations; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php deleted file mode 100644 index d604f56..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php +++ /dev/null @@ -1,49 +0,0 @@ -getComposerAutoloader()) { - foreach (array_keys($autoloader->getClassMap()) as $unit) { - foreach ($namespaces as $namespace) { - if (0 === strpos($unit, $namespace)) { - $units[] = $unit; - break; - } - } - } - } - - return $units; - } - - public static function getComposerAutoloader(): ?ClassLoader - { - foreach (spl_autoload_functions() as $fkt) { - if (is_array($fkt) && $fkt[0] instanceof ClassLoader) { - return $fkt[0]; - } - } - - return null; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php deleted file mode 100644 index 21d1768..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php +++ /dev/null @@ -1,58 +0,0 @@ -docBlockParser = $docBlockParser ?: new DocBlockParser(); - } - - public function setGenerator(Generator $generator): void - { - $this->generator = $generator; - - $this->docBlockParser->setAliases($generator->getAliases()); - } - - public function build(\Reflector $reflector, Context $context): array - { - $aliases = $this->generator ? $this->generator->getAliases() : []; - - if (method_exists($reflector, 'getShortName') && method_exists($reflector, 'getName')) { - $aliases[strtolower($reflector->getShortName())] = $reflector->getName(); - } - - if ($context->with('scanned')) { - $details = $context->scanned; - foreach ($details['uses'] as $alias => $name) { - $aliasKey = strtolower($alias); - if ($name != $alias && !array_key_exists($aliasKey, $aliases)) { - // real aliases only - $aliases[strtolower($alias)] = $name; - } - } - } - $this->docBlockParser->setAliases($aliases); - - if (method_exists($reflector, 'getDocComment') && ($comment = $reflector->getDocComment())) { - return $this->docBlockParser->fromComment($comment, $context); - } - - return []; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php deleted file mode 100644 index 407dd39..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php +++ /dev/null @@ -1,76 +0,0 @@ -setIgnoreNotImportedAnnotations(true); - $docParser->setImports($aliases); - $this->docParser = $docParser; - } - - public function setAliases(array $aliases): void - { - $this->docParser->setImports($aliases); - } - - /** - * Use doctrine to parse the comment block and return the detected annotations. - * - * @param string $comment a T_DOC_COMMENT - * @param Context $context - * - * @return array Annotations - */ - public function fromComment(string $comment, Context $context): array - { - $context->comment = $comment; - - try { - Generator::$context = $context; - if ($context->is('annotations') === false) { - $context->annotations = []; - } - - return $this->docParser->parse($comment, $context->getDebugLocation()); - } catch (\Exception $e) { - if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote((string) $context, '/') . '\.$/', $e->getMessage(), $matches)) { - $errorMessage = $matches[1]; - $errorPos = (int) $matches[2]; - $atPos = strpos($comment, '@'); - $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos); - $lines = explode("\n", substr($comment, $atPos, $errorPos)); - $context->character = strlen(array_pop($lines)) + 1; // position starts at 0 character starts at 1 - $context->logger->error($errorMessage . ' in ' . $context, ['exception' => $e]); - } else { - $context->logger->error( - $e->getMessage() . ($context->filename ? ('; file=' . $context->filename) : ''), - ['exception' => $e] - ); - } - - return []; - } finally { - Generator::$context = null; - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php deleted file mode 100644 index a8f3a58..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php +++ /dev/null @@ -1,186 +0,0 @@ -annotationFactories = $annotationFactories; - if (!$this->annotationFactories) { - throw new \InvalidArgumentException('Need at least one annotation factory'); - } - } - - public function setGenerator(Generator $generator): void - { - $this->generator = $generator; - - foreach ($this->annotationFactories as $annotationFactory) { - $annotationFactory->setGenerator($generator); - } - } - - public function fromFile(string $filename, Context $context): Analysis - { - $scanner = new TokenScanner(); - $fileDetails = $scanner->scanFile($filename); - - $analysis = new Analysis([], $context); - foreach ($fileDetails as $fqdn => $details) { - $this->analyzeFqdn($fqdn, $analysis, $details); - } - - return $analysis; - } - - public function fromFqdn(string $fqdn, Analysis $analysis): Analysis - { - $fqdn = ltrim($fqdn, '\\'); - - $rc = new \ReflectionClass($fqdn); - if (!$filename = $rc->getFileName()) { - return $analysis; - } - - $scanner = new TokenScanner(); - $fileDetails = $scanner->scanFile($filename); - - $this->analyzeFqdn($fqdn, $analysis, $fileDetails[$fqdn]); - - return $analysis; - } - - protected function analyzeFqdn(string $fqdn, Analysis $analysis, array $details): Analysis - { - if (!class_exists($fqdn) && !interface_exists($fqdn) && !trait_exists($fqdn) && (!function_exists('enum_exists') || !enum_exists($fqdn))) { - $analysis->context->logger->warning('Skipping unknown ' . $fqdn); - - return $analysis; - } - - $rc = new \ReflectionClass($fqdn); - $contextType = $rc->isInterface() ? 'interface' : ($rc->isTrait() ? 'trait' : ((method_exists($rc, 'isEnum') && $rc->isEnum()) ? 'enum' : 'class')); - $context = new Context([ - $contextType => $rc->getShortName(), - 'namespace' => $rc->getNamespaceName() ?: null, - 'comment' => $rc->getDocComment() ?: null, - 'filename' => $rc->getFileName() ?: null, - 'line' => $rc->getStartLine(), - 'annotations' => [], - 'scanned' => $details, - ], $analysis->context); - - $definition = [ - $contextType => $rc->getShortName(), - 'extends' => null, - 'implements' => [], - 'traits' => [], - 'properties' => [], - 'methods' => [], - 'context' => $context, - ]; - $normaliseClass = function (string $name): string { - return '\\' . $name; - }; - if ($parentClass = $rc->getParentClass()) { - $definition['extends'] = $normaliseClass($parentClass->getName()); - } - $definition[$contextType == 'class' ? 'implements' : 'extends'] = array_map($normaliseClass, $details['interfaces']); - $definition['traits'] = array_map($normaliseClass, $details['traits']); - - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($rc, $context), $context); - } - - foreach ($rc->getMethods() as $method) { - if (in_array($method->name, $details['methods'])) { - $definition['methods'][$method->getName()] = $ctx = new Context([ - 'method' => $method->getName(), - 'comment' => $method->getDocComment() ?: null, - 'filename' => $method->getFileName() ?: null, - 'line' => $method->getStartLine(), - 'annotations' => [], - ], $context); - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($method, $ctx), $ctx); - } - } - } - - foreach ($rc->getProperties() as $property) { - if (in_array($property->name, $details['properties'])) { - $definition['properties'][$property->getName()] = $ctx = new Context([ - 'property' => $property->getName(), - 'comment' => $property->getDocComment() ?: null, - 'annotations' => [], - ], $context); - if ($property->isStatic()) { - $ctx->static = true; - } - if (\PHP_VERSION_ID >= 70400 && ($type = $property->getType())) { - $ctx->nullable = $type->allowsNull(); - if ($type instanceof \ReflectionNamedType) { - $ctx->type = $type->getName(); - // Context::fullyQualifiedName(...) expects this - if (class_exists($absFqn = '\\' . $ctx->type)) { - $ctx->type = $absFqn; - } - } - } - foreach ($this->annotationFactories as $annotationFactory) { - $analysis->addAnnotations($annotationFactory->build($property, $ctx), $ctx); - } - } - } - - foreach ($rc->getReflectionConstants() as $constant) { - foreach ($this->annotationFactories as $annotationFactory) { - $definition['constants'][$constant->getName()] = $ctx = new Context([ - 'constant' => $constant->getName(), - 'comment' => $constant->getDocComment() ?: null, - 'annotations' => [], - ], $context); - foreach ($annotationFactory->build($constant, $ctx) as $annotation) { - if ($annotation instanceof Property) { - if (Generator::isDefault($annotation->property)) { - $annotation->property = $constant->getName(); - } - if (Generator::isDefault($annotation->const)) { - $annotation->const = $constant->getValue(); - } - $analysis->addAnnotation($annotation, $ctx); - } - } - } - } - - $addDefinition = 'add' . ucfirst($contextType) . 'Definition'; - $analysis->{$addDefinition}($definition); - - return $analysis; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php deleted file mode 100644 index 2a3916d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php +++ /dev/null @@ -1,639 +0,0 @@ -generator = $generator; - } - - /** - * Extract and process all doc-comments from a file. - * - * @param string $filename path to a php file - */ - public function fromFile(string $filename, Context $context): Analysis - { - if (function_exists('opcache_get_status') && function_exists('opcache_get_configuration')) { - if (empty($GLOBALS['openapi_opcache_warning'])) { - $GLOBALS['openapi_opcache_warning'] = true; - $status = opcache_get_status(); - $config = opcache_get_configuration(); - if (is_array($status) && $status['opcache_enabled'] && $config['directives']['opcache.save_comments'] == false) { - $context->logger->error("php.ini \"opcache.save_comments = 0\" interferes with extracting annotations.\n[LINK] https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments"); - } - } - } - $tokens = token_get_all(file_get_contents($filename)); - - return $this->fromTokens($tokens, new Context(['filename' => $filename], $context)); - } - - /** - * Extract and process all doc-comments from the contents. - * - * @param string $code PHP code. (including fromTokens($tokens, $context); - } - - /** - * Shared implementation for parseFile() & parseContents(). - * - * @param array $tokens The result of a token_get_all() - */ - protected function fromTokens(array $tokens, Context $parseContext): Analysis - { - $generator = $this->generator ?: new Generator(); - $analysis = new Analysis([], $parseContext); - $docBlockParser = new DocBlockParser($generator->getAliases()); - - reset($tokens); - $token = ''; - - $aliases = $generator->getAliases(); - - $parseContext->uses = []; - // default to parse context to start with - $schemaContext = $parseContext; - - $classDefinition = false; - $interfaceDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - $comment = false; - - $line = 0; - $lineOffset = $parseContext->line ?: 0; - - while ($token !== false) { - $previousToken = $token; - $token = $this->nextToken($tokens, $parseContext); - - if (is_array($token) === false) { - // Ignore tokens like "{", "}", etc - continue; - } - - if (defined('T_ATTRIBUTE') && $token[0] === T_ATTRIBUTE) { - // consume - $this->parseAttribute($tokens, $token, $parseContext); - continue; - } - - if ($token[0] === T_DOC_COMMENT) { - if ($comment) { - // 2 Doc-comments in succession? - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - } - $comment = $token[1]; - $line = $token[2] + $lineOffset; - continue; - } - - if (in_array($token[0], [T_ABSTRACT, T_FINAL])) { - // skip - $token = $this->nextToken($tokens, $parseContext); - } - - if ($token[0] === T_CLASS) { - // Doc-comment before a class? - if (is_array($previousToken) && $previousToken[0] === T_DOUBLE_COLON) { - //php 5.5 class name resolution (i.e. ClassName::class) - continue; - } - - $token = $this->nextToken($tokens, $parseContext); - - if (is_string($token) && ($token === '(' || $token === '{')) { - // php7 anonymous classes (i.e. new class() { public function foo() {} };) - continue; - } - - if (is_array($token) && ($token[1] === 'extends' || $token[1] === 'implements')) { - // php7 anonymous classes with extends (i.e. new class() extends { public function foo() {} };) - continue; - } - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $interfaceDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - - $schemaContext = new Context(['class' => $token[1], 'line' => $token[2]], $parseContext); - if ($classDefinition) { - $analysis->addClassDefinition($classDefinition); - } - $classDefinition = [ - 'class' => $token[1], - 'extends' => null, - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_EXTENDS) { - $schemaContext->extends = $this->parseNamespace($tokens, $token, $parseContext); - $classDefinition['extends'] = $schemaContext->fullyQualifiedName($schemaContext->extends); - } - - if ($token[0] === T_IMPLEMENTS) { - $schemaContext->implements = $this->parseNamespaceList($tokens, $token, $parseContext); - $classDefinition['implements'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->implements); - } - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-class and reset $schemaContext - } - - if ($token[0] === T_INTERFACE) { // Doc-comment before an interface? - $classDefinition = false; - $traitDefinition = false; - $enumDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['interface' => $token[1], 'line' => $token[2]], $parseContext); - if ($interfaceDefinition) { - $analysis->addInterfaceDefinition($interfaceDefinition); - } - $interfaceDefinition = [ - 'interface' => $token[1], - 'extends' => null, - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_EXTENDS) { - $schemaContext->extends = $this->parseNamespaceList($tokens, $token, $parseContext); - $interfaceDefinition['extends'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->extends); - } - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-interface and reset $schemaContext - } - - if ($token[0] === T_TRAIT) { - $classDefinition = false; - $interfaceDefinition = false; - $enumDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['trait' => $token[1], 'line' => $token[2]], $parseContext); - if ($traitDefinition) { - $analysis->addTraitDefinition($traitDefinition); - } - $traitDefinition = [ - 'trait' => $token[1], - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-trait and reset $schemaContext - } - - if (defined('T_ENUM') && $token[0] === T_ENUM) { - $classDefinition = false; - $interfaceDefinition = false; - $traitDefinition = false; - - $token = $this->nextToken($tokens, $parseContext); - - if (!is_array($token)) { - // PHP 8 named argument - continue; - } - - $schemaContext = new Context(['enum' => $token[1], 'line' => $token[2]], $parseContext); - if ($enumDefinition) { - $analysis->addEnumDefinition($enumDefinition); - } - $enumDefinition = [ - 'enum' => $token[1], - 'properties' => [], - 'methods' => [], - 'context' => $schemaContext, - ]; - - if ($comment) { - $schemaContext->line = $line; - $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); - $comment = false; - continue; - } - - // @todo detect end-of-trait and reset $schemaContext - } - - if ($token[0] === T_STATIC) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_VARIABLE) { - // static property - $propertyContext = new Context( - [ - 'property' => substr($token[1], 1), - 'static' => true, - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($traitDefinition) { - $traitDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); - $comment = false; - } - continue; - } - } - - if (in_array($token[0], [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR])) { // Scope - [$type, $nullable, $token] = $this->parseTypeAndNextToken($tokens, $parseContext); - if ($token[0] === T_VARIABLE) { - // instance property - $propertyContext = new Context( - [ - 'property' => substr($token[1], 1), - 'type' => $type, - 'nullable' => $nullable, - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($traitDefinition) { - $traitDefinition['properties'][$propertyContext->property] = $propertyContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); - $comment = false; - } - } elseif ($token[0] === T_FUNCTION) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_STRING) { - $methodContext = new Context( - [ - 'method' => $token[1], - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['methods'][$token[1]] = $methodContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['methods'][$token[1]] = $methodContext; - } - if ($traitDefinition) { - $traitDefinition['methods'][$token[1]] = $methodContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); - $comment = false; - } - } - } - continue; - } elseif ($token[0] === T_FUNCTION) { - $token = $this->nextToken($tokens, $parseContext); - if ($token[0] === T_STRING) { - $methodContext = new Context( - [ - 'method' => $token[1], - 'line' => $line, - ], - $schemaContext - ); - - if ($classDefinition) { - $classDefinition['methods'][$token[1]] = $methodContext; - } - if ($interfaceDefinition) { - $interfaceDefinition['methods'][$token[1]] = $methodContext; - } - if ($traitDefinition) { - $traitDefinition['methods'][$token[1]] = $methodContext; - } - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); - $comment = false; - } - } - } - - if (in_array($token[0], [T_NAMESPACE, T_USE]) === false) { - // Skip "use" & "namespace" to prevent "never imported" warnings) - if ($comment) { - // Not a doc-comment for a class, property or method? - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - $comment = false; - } - } - - if ($token[0] === T_NAMESPACE) { - $parseContext->namespace = $this->parseNamespace($tokens, $token, $parseContext); - $aliases['__NAMESPACE__'] = $parseContext->namespace; - $docBlockParser->setAliases($aliases); - continue; - } - - if ($token[0] === T_USE) { - $statements = $this->parseUseStatement($tokens, $token, $parseContext); - foreach ($statements as $alias => $target) { - if ($classDefinition) { - // class traits - $classDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); - } elseif ($traitDefinition) { - // trait traits - $traitDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); - } else { - // not a trait use - $parseContext->uses[$alias] = $target; - - $namespaces = $generator->getNamespaces(); - if (null === $namespaces) { - $aliases[strtolower($alias)] = $target; - } else { - foreach ($namespaces as $namespace) { - if (strcasecmp(substr($target . '\\', 0, strlen($namespace)), $namespace) === 0) { - $aliases[strtolower($alias)] = $target; - break; - } - } - } - $docBlockParser->setAliases($aliases); - } - } - } - } - - // cleanup final comment and definition - if ($comment) { - $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); - } - if ($classDefinition) { - $analysis->addClassDefinition($classDefinition); - } - if ($interfaceDefinition) { - $analysis->addInterfaceDefinition($interfaceDefinition); - } - if ($traitDefinition) { - $analysis->addTraitDefinition($traitDefinition); - } - if ($enumDefinition) { - $analysis->addEnumDefinition($enumDefinition); - } - - return $analysis; - } - - /** - * Parse comment and add annotations to analysis. - */ - private function analyseComment(Analysis $analysis, DocBlockParser $docBlockParser, string $comment, Context $context): void - { - $analysis->addAnnotations($docBlockParser->fromComment($comment, $context), $context); - } - - /** - * The next non-whitespace, non-comment token. - * - * - * @return array|string The next token (or false) - */ - private function nextToken(array &$tokens, Context $context) - { - while (true) { - $token = next($tokens); - if (is_array($token)) { - if ($token[0] === T_WHITESPACE) { - continue; - } - if ($token[0] === T_COMMENT) { - $pos = strpos($token[1], '@OA\\'); - if ($pos) { - $line = $context->line ? $context->line + $token[2] : $token[2]; - $commentContext = new Context(['line' => $line], $context); - $context->logger->warning('Annotations are only parsed inside `/**` DocBlocks, skipping ' . $commentContext); - } - continue; - } - } - - return $token; - } - } - - private function parseAttribute(array &$tokens, &$token, Context $parseContext): void - { - $nesting = 1; - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - if (!is_array($token) && '[' === $token) { - ++$nesting; - continue; - } - - if (!is_array($token) && ']' === $token) { - --$nesting; - if (!$nesting) { - break; - } - } - } - } - - /** - * @return int[] - */ - private function php8NamespaceToken(): array - { - return defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; - } - - /** - * Parse namespaced string. - * - * @param array|string $token - */ - private function parseNamespace(array &$tokens, &$token, Context $parseContext): string - { - $namespace = ''; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - if (!in_array($token[0], $nsToken)) { - break; - } - $namespace .= $token[1]; - } - - return $namespace; - } - - /** - * Parse comma separated list of namespaced strings. - * - * @param array|string $token - */ - private function parseNamespaceList(array &$tokens, &$token, Context $parseContext): array - { - $namespaces = []; - while ($namespace = $this->parseNamespace($tokens, $token, $parseContext)) { - $namespaces[] = $namespace; - if ($token != ',') { - break; - } - } - - return $namespaces; - } - - /** - * Parse a use statement. - */ - private function parseUseStatement(array &$tokens, &$token, Context $parseContext): array - { - $normalizeAlias = function ($alias): string { - $alias = ltrim($alias, '\\'); - $elements = explode('\\', $alias); - - return array_pop($elements); - }; - - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); - while ($token !== false) { - $token = $this->nextToken($tokens, $parseContext); - $isNameToken = in_array($token[0], $nsToken); - if (!$explicitAlias && $isNameToken) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $isNameToken) { - $alias .= $token[1]; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token === ',') { - $statements[$normalizeAlias($alias)] = $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[$normalizeAlias($alias)] = $class; - break; - } else { - break; - } - } - - return $statements; - } - - /** - * Parse type of variable (if it exists). - */ - private function parseTypeAndNextToken(array &$tokens, Context $parseContext): array - { - $type = Generator::UNDEFINED; - $nullable = false; - $token = $this->nextToken($tokens, $parseContext); - - if ($token[0] === T_STATIC) { - $token = $this->nextToken($tokens, $parseContext); - } - - if ($token === '?') { // nullable type - $nullable = true; - $token = $this->nextToken($tokens, $parseContext); - } - - $qualifiedToken = array_merge([T_NS_SEPARATOR, T_STRING, T_ARRAY], $this->php8NamespaceToken()); - $typeToken = array_merge([T_STRING], $this->php8NamespaceToken()); - // drill down namespace segments to basename property type declaration - while (in_array($token[0], $qualifiedToken)) { - if (in_array($token[0], $typeToken)) { - $type = $token[1]; - } - $token = $this->nextToken($tokens, $parseContext); - } - - return [$type, $nullable, $token]; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php deleted file mode 100644 index 8d916e2..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php +++ /dev/null @@ -1,356 +0,0 @@ -scanTokens(token_get_all(file_get_contents($filename))); - } - - /** - * Scan file for all classes, interfaces and traits. - * - * @return array> File details - */ - protected function scanTokens(array $tokens): array - { - $units = []; - $uses = []; - $isInterface = false; - $namespace = ''; - $currentName = null; - $unitLevel = 0; - $lastToken = null; - $stack = []; - - $initUnit = function ($uses): array { - return [ - 'uses' => $uses, - 'interfaces' => [], - 'traits' => [], - 'enums' => [], - 'methods' => [], - 'properties' => [], - ]; - }; - - while (false !== ($token = $this->nextToken($tokens))) { - if (!is_array($token)) { - switch ($token) { - case '{': - $stack[] = $token; - break; - case '}': - array_pop($stack); - if (count($stack) == $unitLevel) { - $currentName = null; - } - break; - } - continue; - } - - switch ($token[0]) { - case T_CURLY_OPEN: - case T_DOLLAR_OPEN_CURLY_BRACES: - $stack[] = $token[1]; - break; - - case T_NAMESPACE: - $namespace = $this->nextWord($tokens); - break; - - case T_USE: - if (!$stack) { - $uses = array_merge($uses, $this->parseFQNStatement($tokens, $token)); - } elseif ($currentName) { - $traits = $this->resolveFQN($this->parseFQNStatement($tokens, $token), $namespace, $uses); - $units[$currentName]['traits'] = array_merge($units[$currentName]['traits'], $traits); - } - break; - - case T_CLASS: - if ($currentName) { - break; - } - - if ($lastToken && is_array($lastToken) && $lastToken[0] === T_DOUBLE_COLON) { - // ::class - break; - } - - // class name - $token = $this->nextToken($tokens); - - // unless ... - if (is_string($token) && ($token === '(' || $token === '{')) { - // new class[()] { ... } - if ('{' == $token) { - prev($tokens); - } - break; - } elseif (is_array($token) && in_array($token[1], ['extends', 'implements'])) { - // new class[()] extends { ... } - break; - } - - $isInterface = false; - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $units[$currentName] = $initUnit($uses); - break; - - case T_INTERFACE: - if ($currentName) { - break; - } - - $isInterface = true; - $token = $this->nextToken($tokens); - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $units[$currentName] = $initUnit($uses); - break; - - case T_EXTENDS: - $fqns = $this->parseFQNStatement($tokens, $token); - if ($isInterface && $currentName) { - $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); - } - if (!is_array($token) || T_IMPLEMENTS !== $token[0]) { - break; - } - // no break - case T_IMPLEMENTS: - $fqns = $this->parseFQNStatement($tokens, $token); - if ($currentName) { - $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); - } - break; - - case T_FUNCTION: - $token = $this->nextToken($tokens); - - if (($unitLevel + 1) == count($stack) && $currentName) { - $units[$currentName]['methods'][] = $token[1]; - if (!$isInterface) { - // more nesting - $units[$currentName]['properties'] = array_merge( - $units[$currentName]['properties'], - $this->parsePromotedProperties($tokens) - ); - $this->skipTo($tokens, '{', true); - } else { - // no function body - $this->skipTo($tokens, ';'); - } - } - break; - - case T_VARIABLE: - if (($unitLevel + 1) == count($stack) && $currentName) { - $units[$currentName]['properties'][] = substr($token[1], 1); - } - break; - default: - // handle trait here too to avoid duplication - if (T_TRAIT === $token[0] || (defined('T_ENUM') && T_ENUM === $token[0])) { - if ($currentName) { - break; - } - - $isInterface = false; - $token = $this->nextToken($tokens); - $currentName = $namespace . '\\' . $token[1]; - $unitLevel = count($stack); - $this->skipTo($tokens, '{', true); - $units[$currentName] = $initUnit($uses); - } - break; - - } - $lastToken = $token; - } - - return $units; - } - - /** - * Get the next token that is not whitespace or comment. - */ - protected function nextToken(array &$tokens) - { - $token = true; - while ($token) { - $token = next($tokens); - if (is_array($token)) { - if (in_array($token[0], [T_WHITESPACE, T_COMMENT])) { - continue; - } - } - - return $token; - } - - return $token; - } - - protected function resolveFQN(array $names, string $namespace, array $uses): array - { - $resolve = function ($name) use ($namespace, $uses) { - if ('\\' == $name[0]) { - return substr($name, 1); - } - - if (array_key_exists($name, $uses)) { - return $uses[$name]; - } - - return $namespace . '\\' . $name; - }; - - return array_values(array_map($resolve, $names)); - } - - protected function skipTo(array &$tokens, string $char, bool $prev = false): void - { - while (false !== ($token = next($tokens))) { - if (is_string($token) && $token == $char) { - if ($prev) { - prev($tokens); - } - - break; - } - } - } - - /** - * Read next word. - * - * Skips leading whitespace. - */ - protected function nextWord(array &$tokens): string - { - $word = ''; - while (false !== ($token = next($tokens))) { - if (is_array($token)) { - if ($token[0] === T_WHITESPACE) { - if ($word) { - break; - } - continue; - } - $word .= $token[1]; - } - } - - return $word; - } - - /** - * Parse a use statement. - */ - protected function parseFQNStatement(array &$tokens, array &$token): array - { - $normalizeAlias = function ($alias): string { - $alias = ltrim($alias, '\\'); - $elements = explode('\\', $alias); - - return array_pop($elements); - }; - - $class = ''; - $alias = ''; - $statements = []; - $explicitAlias = false; - $php8NSToken = defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; - $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $php8NSToken); - while ($token !== false) { - $token = $this->nextToken($tokens); - $isNameToken = in_array($token[0], $nsToken); - if (!$explicitAlias && $isNameToken) { - $class .= $token[1]; - $alias = $token[1]; - } elseif ($explicitAlias && $isNameToken) { - $alias .= $token[1]; - } elseif ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } elseif ($token[0] === T_IMPLEMENTS) { - $statements[$normalizeAlias($alias)] = $class; - break; - } elseif ($token === ',') { - $statements[$normalizeAlias($alias)] = $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } elseif ($token === ';') { - $statements[$normalizeAlias($alias)] = $class; - break; - } elseif ($token === '{') { - $statements[$normalizeAlias($alias)] = $class; - prev($tokens); - break; - } else { - break; - } - } - - return $statements; - } - - protected function parsePromotedProperties(array &$tokens): array - { - $properties = []; - - $this->skipTo($tokens, '('); - $round = 1; - $promoted = false; - while (false !== ($token = $this->nextToken($tokens))) { - if (is_string($token)) { - switch ($token) { - case '(': - ++$round; - break; - case ')': - --$round; - if (0 == $round) { - return $properties; - } - } - } - if (is_array($token)) { - switch ($token[0]) { - case T_PUBLIC: - case T_PROTECTED: - case T_PRIVATE: - $promoted = true; - break; - case T_VARIABLE: - if ($promoted) { - $properties[] = ltrim($token[1], '$'); - $promoted = false; - } - break; - } - } - } - - return $properties; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php b/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php deleted file mode 100644 index eec1071..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Analysis.php +++ /dev/null @@ -1,440 +0,0 @@ -annotations = new \SplObjectStorage(); - $this->context = $context; - - $this->addAnnotations($annotations, $context); - } - - public function addAnnotation(object $annotation, Context $context): void - { - if ($this->annotations->contains($annotation)) { - return; - } - - if ($annotation instanceof OpenApi) { - $this->openapi = $this->openapi ?: $annotation; - } else { - if ($context->is('annotations') === false) { - $context->annotations = []; - } - - if (in_array($annotation, $context->annotations, true) === false) { - $context->annotations[] = $annotation; - } - } - $this->annotations->attach($annotation, $context); - $blacklist = property_exists($annotation, '_blacklist') ? $annotation::$_blacklist : []; - foreach ($annotation as $property => $value) { - if (in_array($property, $blacklist)) { - if ($property === '_unmerged') { - foreach ($value as $item) { - $this->addAnnotation($item, $context); - } - } - continue; - } elseif (is_array($value)) { - foreach ($value as $item) { - if ($item instanceof AbstractAnnotation) { - $this->addAnnotation($item, $context); - } - } - } elseif ($value instanceof AbstractAnnotation) { - $this->addAnnotation($value, $context); - } - } - } - - public function addAnnotations(array $annotations, Context $context): void - { - foreach ($annotations as $annotation) { - $this->addAnnotation($annotation, $context); - } - } - - public function addClassDefinition(array $definition): void - { - $class = $definition['context']->fullyQualifiedName($definition['class']); - $this->classes[$class] = $definition; - } - - public function addInterfaceDefinition(array $definition): void - { - $interface = $definition['context']->fullyQualifiedName($definition['interface']); - $this->interfaces[$interface] = $definition; - } - - public function addTraitDefinition(array $definition): void - { - $trait = $definition['context']->fullyQualifiedName($definition['trait']); - $this->traits[$trait] = $definition; - } - - public function addEnumDefinition(array $definition): void - { - $enum = $definition['context']->fullyQualifiedName($definition['enum']); - $this->enums[$enum] = $definition; - } - - public function addAnalysis(Analysis $analysis): void - { - foreach ($analysis->annotations as $annotation) { - $this->addAnnotation($annotation, $analysis->annotations[$annotation]); - } - $this->classes = array_merge($this->classes, $analysis->classes); - $this->interfaces = array_merge($this->interfaces, $analysis->interfaces); - $this->traits = array_merge($this->traits, $analysis->traits); - $this->enums = array_merge($this->enums, $analysis->enums); - if ($this->openapi === null && $analysis->openapi !== null) { - $this->openapi = $analysis->openapi; - } - } - - /** - * Get all subclasses of the given parent class. - * - * @param string $parent the parent class - * - * @return array map of class => definition pairs of sub-classes - */ - public function getSubClasses(string $parent): array - { - $definitions = []; - foreach ($this->classes as $class => $classDefinition) { - if ($classDefinition['extends'] === $parent) { - $definitions[$class] = $classDefinition; - $definitions = array_merge($definitions, $this->getSubClasses($class)); - } - } - - return $definitions; - } - - /** - * Get a list of all super classes for the given class. - * - * @param string $class the class name - * @param bool $direct flag to find only the actual class parents - * - * @return array map of class => definition pairs of parent classes - */ - public function getSuperClasses(string $class, bool $direct = false): array - { - $classDefinition = isset($this->classes[$class]) ? $this->classes[$class] : null; - if (!$classDefinition || empty($classDefinition['extends'])) { - // unknown class, or no inheritance - return []; - } - - $extends = $classDefinition['extends']; - $extendsDefinition = isset($this->classes[$extends]) ? $this->classes[$extends] : null; - if (!$extendsDefinition) { - return []; - } - - $parentDetails = [$extends => $extendsDefinition]; - - if ($direct) { - return $parentDetails; - } - - return array_merge($parentDetails, $this->getSuperClasses($extends)); - } - - /** - * Get the list of interfaces used by the given class or by classes which it extends. - * - * @param string $class the class name - * @param bool $direct flag to find only the actual class interfaces - * - * @return array map of class => definition pairs of interfaces - */ - public function getInterfacesOfClass(string $class, bool $direct = false): array - { - $classes = $direct ? [] : array_keys($this->getSuperClasses($class)); - // add self - $classes[] = $class; - - $definitions = []; - foreach ($classes as $clazz) { - if (isset($this->classes[$clazz])) { - $definition = $this->classes[$clazz]; - if (isset($definition['implements'])) { - foreach ($definition['implements'] as $interface) { - if (array_key_exists($interface, $this->interfaces)) { - $definitions[$interface] = $this->interfaces[$interface]; - } - } - } - } - } - - if (!$direct) { - // expand recursively for interfaces extending other interfaces - $collect = function ($interfaces, $cb) use (&$definitions): void { - foreach ($interfaces as $interface) { - if (isset($this->interfaces[$interface]['extends'])) { - $cb($this->interfaces[$interface]['extends'], $cb); - foreach ($this->interfaces[$interface]['extends'] as $fqdn) { - $definitions[$fqdn] = $this->interfaces[$fqdn]; - } - } - } - }; - $collect(array_keys($definitions), $collect); - } - - return $definitions; - } - - /** - * Get the list of traits used by the given class/trait or by classes which it extends. - * - * @param string $source the source name - * @param bool $direct flag to find only the actual class traits - * - * @return array map of class => definition pairs of traits - */ - public function getTraitsOfClass(string $source, bool $direct = false): array - { - $sources = $direct ? [] : array_keys($this->getSuperClasses($source)); - // add self - $sources[] = $source; - - $definitions = []; - foreach ($sources as $sourze) { - if (isset($this->classes[$sourze]) || isset($this->traits[$sourze])) { - $definition = isset($this->classes[$sourze]) ? $this->classes[$sourze] : $this->traits[$sourze]; - if (isset($definition['traits'])) { - foreach ($definition['traits'] as $trait) { - if (array_key_exists($trait, $this->traits)) { - $definitions[$trait] = $this->traits[$trait]; - } - } - } - } - } - - if (!$direct) { - // expand recursively for traits using other traits - $collect = function ($traits, $cb) use (&$definitions): void { - foreach ($traits as $trait) { - if (isset($this->traits[$trait]['traits'])) { - $cb($this->traits[$trait]['traits'], $cb); - foreach ($this->traits[$trait]['traits'] as $fqdn) { - $definitions[$fqdn] = $this->traits[$fqdn]; - } - } - } - }; - $collect(array_keys($definitions), $collect); - } - - return $definitions; - } - - /** - * @param string|array $classes One ore more class names - * @param bool $strict in non-strict mode child classes are also detected - * - * @return AbstractAnnotation[] - */ - public function getAnnotationsOfType($classes, bool $strict = false): array - { - $annotations = []; - if ($strict) { - foreach ((array) $classes as $class) { - foreach ($this->annotations as $annotation) { - if (get_class($annotation) === $class) { - $annotations[] = $annotation; - } - } - } - } else { - foreach ((array) $classes as $class) { - foreach ($this->annotations as $annotation) { - if ($annotation instanceof $class) { - $annotations[] = $annotation; - } - } - } - } - - return $annotations; - } - - /** - * @param string $fqdn the source class/interface/trait - */ - public function getSchemaForSource(string $fqdn): ?AnnotationSchema - { - $fqdn = '\\' . ltrim($fqdn, '\\'); - - foreach ([$this->classes, $this->interfaces, $this->traits, $this->enums] as $definitions) { - if (array_key_exists($fqdn, $definitions)) { - $definition = $definitions[$fqdn]; - if (is_iterable($definition['context']->annotations)) { - foreach (array_reverse($definition['context']->annotations) as $annotation) { - if (in_array(get_class($annotation), [AnnotationSchema::class, AttributeSchema::class]) && !$annotation->_aux) { - return $annotation; - } - } - } - } - } - - return null; - } - - public function getContext(object $annotation): ?Context - { - if ($annotation instanceof AbstractAnnotation) { - return $annotation->_context; - } - if ($this->annotations->contains($annotation) === false) { - throw new \Exception('Annotation not found'); - } - $context = $this->annotations[$annotation]; - if ($context instanceof Context) { - return $context; - } - // Weird, did you use the addAnnotation/addAnnotations methods? - throw new \Exception('Annotation has no context'); - } - - /** - * Build an analysis with only the annotations that are merged into the OpenAPI annotation. - */ - public function merged(): Analysis - { - if ($this->openapi === null) { - throw new \Exception('No openapi target set. Run the MergeIntoOpenApi processor'); - } - $unmerged = $this->openapi->_unmerged; - $this->openapi->_unmerged = []; - $analysis = new Analysis([$this->openapi], $this->context); - $this->openapi->_unmerged = $unmerged; - - return $analysis; - } - - /** - * Analysis with only the annotations that not merged. - */ - public function unmerged(): Analysis - { - return $this->split()->unmerged; - } - - /** - * Split the annotation into two analysis. - * One with annotations that are merged and one with annotations that are not merged. - * - * @return object {merged: Analysis, unmerged: Analysis} - */ - public function split() - { - $result = new \stdClass(); - $result->merged = $this->merged(); - $result->unmerged = new Analysis([], $this->context); - foreach ($this->annotations as $annotation) { - if ($result->merged->annotations->contains($annotation) === false) { - $result->unmerged->annotations->attach($annotation, $this->annotations[$annotation]); - } - } - - return $result; - } - - /** - * Apply the processor(s). - * - * @param callable|callable[] $processors One or more processors - */ - public function process($processors = null): void - { - if (is_array($processors) === false && is_callable($processors)) { - $processors = [$processors]; - } - foreach ($processors as $processor) { - $processor($this); - } - } - - public function validate(): bool - { - if ($this->openapi !== null) { - return $this->openapi->validate(); - } - - $this->context->logger->warning('No openapi target set. Run the MergeIntoOpenApi processor before validate()'); - - return false; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php deleted file mode 100644 index b4469be..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php +++ /dev/null @@ -1,714 +0,0 @@ - - */ - public $x = Generator::UNDEFINED; - - /** - * Arbitrary attachables for this annotation. - * These will be ignored but can be used for custom processing. - * - * @var array - */ - public $attachables = Generator::UNDEFINED; - - /** - * @var bool - */ - public $_aux = false; - - /** - * @var Context|null - */ - public $_context = null; - - /** - * Annotations that couldn't be merged by mapping or postprocessing. - * - * @var array - */ - public $_unmerged = []; - - /** - * The properties which are required by [the spec](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). - * - * @var array - */ - public static $_required = []; - - /** - * Specify the type of the property. - * - * Examples: - * 'name' => 'string' // a string - * 'required' => 'boolean', // true or false - * 'tags' => '[string]', // array containing strings - * 'in' => ["query", "header", "path", "formData", "body"] // must be one on these - * 'oneOf' => [Schema::class] // array of schema objects. - * - * @var array> - */ - public static $_types = []; - - /** - * Declarative mapping of Annotation types to properties. - * Examples: - * Info::clas => 'info', // Set @OA\Info annotation as the info property. - * Parameter::clas => ['parameters'], // Append @OA\Parameter annotations the parameters array. - * PathItem::clas => ['paths', 'path'], // Append @OA\PathItem annotations the paths array and use path as key. - * - * @var array,string|array> - */ - public static $_nested = []; - - /** - * Reverse mapping of $_nested with the allowed parent annotations. - * - * @var array> - */ - public static $_parents = []; - - /** - * List of properties are blacklisted from the JSON output. - * - * @var array - */ - public static $_blacklist = ['_context', '_unmerged', '_analysis', '_aux', 'attachables']; - - public function __construct(array $properties) - { - if (isset($properties['_context'])) { - $this->_context = $properties['_context']; - unset($properties['_context']); - } elseif (Generator::$context) { - $this->_context = Generator::$context; - } else { - $this->_context = Context::detect(1); - } - - if ($this->_context->is('annotations') === false) { - $this->_context->annotations = []; - } - - $this->_context->annotations[] = $this; - $nestedContext = new Context(['nested' => $this], $this->_context); - foreach ($properties as $property => $value) { - if (property_exists($this, $property)) { - $this->$property = $value; - if (is_array($value)) { - foreach ($value as $key => $annotation) { - if (is_object($annotation) && $annotation instanceof AbstractAnnotation) { - $this->$property[$key] = $this->nested($annotation, $nestedContext); - } - } - } - } elseif ($property !== 'value') { - $this->$property = $value; - } elseif (is_array($value)) { - $annotations = []; - foreach ($value as $annotation) { - if ($annotation instanceof AbstractAnnotation) { - $annotations[] = $annotation; - } else { - $this->_context->logger->warning('Unexpected field in ' . $this->identity() . ' in ' . $this->_context); - } - } - $this->merge($annotations); - } elseif (is_object($value)) { - $this->merge([$value]); - } else { - if ($value !== Generator::UNDEFINED) { - $this->_context->logger->warning('Unexpected parameter "' . $property . '" in ' . $this->identity()); - } - } - } - - if ($this instanceof OpenApi) { - if ($this->_context->root()->version) { - // override via `Generator::setVersion()` - $this->openapi = $this->_context->root()->version; - } else { - $this->_context->root()->version = $this->openapi; - } - } - } - - public function __get($property) - { - $properties = get_object_vars($this); - $this->_context->logger->warning('Property "' . $property . '" doesn\'t exist in a ' . $this->identity() . ', existing properties: "' . implode('", "', array_keys($properties)) . '" in ' . $this->_context); - } - - public function __set($property, $value) - { - $fields = get_object_vars($this); - foreach (static::$_blacklist as $_property) { - unset($fields[$_property]); - } - $this->_context->logger->warning('Unexpected field "' . $property . '" for ' . $this->identity() . ', expecting "' . implode('", "', array_keys($fields)) . '" in ' . $this->_context); - $this->$property = $value; - } - - /** - * Merge given annotations to their mapped properties configured in static::$_nested. - * - * Annotations that couldn't be merged are added to the _unmerged array. - * - * @param AbstractAnnotation[] $annotations - * @param bool $ignore Ignore unmerged annotations - * - * @return AbstractAnnotation[] The unmerged annotations - */ - public function merge(array $annotations, bool $ignore = false): array - { - $unmerged = []; - $nestedContext = new Context(['nested' => $this], $this->_context); - - foreach ($annotations as $annotation) { - $mapped = false; - if ($details = static::matchNested(get_class($annotation))) { - $property = $details->value; - if (is_array($property)) { - $property = $property[0]; - if (Generator::isDefault($this->$property)) { - $this->$property = []; - } - $this->$property[] = $this->nested($annotation, $nestedContext); - $mapped = true; - } elseif (Generator::isDefault($this->$property)) { - // ignore duplicate nested if only one expected - $this->$property = $this->nested($annotation, $nestedContext); - $mapped = true; - } - } - if (!$mapped) { - $unmerged[] = $annotation; - } - } - if (!$ignore) { - foreach ($unmerged as $annotation) { - $this->_unmerged[] = $this->nested($annotation, $nestedContext); - } - } - - return $unmerged; - } - - /** - * Merge the properties from the given object into this annotation. - * Prevents overwriting properties that are already configured. - * - * @param object $object - */ - public function mergeProperties($object): void - { - $defaultValues = get_class_vars(get_class($this)); - $currentValues = get_object_vars($this); - foreach ($object as $property => $value) { - if ($property === '_context') { - continue; - } - if ($currentValues[$property] === $defaultValues[$property]) { // Overwrite default values - $this->$property = $value; - continue; - } - if ($property === '_unmerged') { - $this->_unmerged = array_merge($this->_unmerged, $value); - continue; - } - if ($currentValues[$property] !== $value) { // New value is not the same? - if ($defaultValues[$property] === $value) { // but is the same as the default? - continue; // Keep current, no notice - } - $identity = method_exists($object, 'identity') ? $object->identity() : get_class($object); - $context1 = $this->_context; - $context2 = property_exists($object, '_context') ? $object->_context : 'unknown'; - if (is_object($this->$property) && $this->{$property} instanceof AbstractAnnotation) { - $context1 = $this->$property->_context; - } - $this->_context->logger->error('Multiple definitions for ' . $identity . '->' . $property . "\n Using: " . $context1 . "\n Skipping: " . $context2); - } - } - } - - /** - * Generate the documentation in YAML format. - */ - public function toYaml($flags = null): string - { - if ($flags === null) { - $flags = Yaml::DUMP_OBJECT_AS_MAP ^ Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE; - } - - return Yaml::dump(json_decode($this->toJson(JSON_INVALID_UTF8_IGNORE)), 10, 2, $flags); - } - - /** - * Generate the documentation in JSON format. - */ - public function toJson(?int $flags = null): string - { - if ($flags === null) { - $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE; - } - - return json_encode($this, $flags); - } - - public function __debugInfo() - { - $properties = []; - foreach (get_object_vars($this) as $property => $value) { - if (!Generator::isDefault($value)) { - $properties[$property] = $value; - } - } - - return $properties; - } - - /** - * @return mixed - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = new \stdClass(); - - // Strip undefined values. - foreach (get_object_vars($this) as $property => $value) { - if (!Generator::isDefault($value)) { - $data->$property = $value; - } - } - - // Strip properties that are for internal (swagger-php) use. - foreach (static::$_blacklist as $property) { - unset($data->$property); - } - - // Correct empty array to empty objects. - foreach (static::$_types as $property => $type) { - if ($type === 'object' && is_array($data->$property) && empty($data->$property)) { - $data->$property = new \stdClass(); - } - } - - // Inject vendor properties. - unset($data->x); - if (is_array($this->x)) { - foreach ($this->x as $property => $value) { - $prefixed = 'x-' . $property; - $data->$prefixed = $value; - } - } - - // Map nested keys - foreach (static::$_nested as $nested) { - if (is_string($nested) || count($nested) === 1) { - continue; - } - $property = $nested[0]; - if (Generator::isDefault($this->$property)) { - continue; - } - $keyField = $nested[1]; - $object = new \stdClass(); - foreach ($this->$property as $key => $item) { - if (is_numeric($key) === false && is_array($item)) { - $object->$key = $item; - } else { - $key = $item->$keyField; - if (!Generator::isDefault($key) && empty($object->$key)) { - if ($item instanceof \JsonSerializable) { - $object->$key = $item->jsonSerialize(); - } else { - $object->$key = $item; - } - unset($object->$key->$keyField); - } - } - } - $data->$property = $object; - } - - // $ref - if (isset($data->ref)) { - // Only specific https://github.com/OAI/OpenAPI-Specification/blob/3.1.0/versions/3.1.0.md#reference-object - $ref = ['$ref' => $data->ref]; - if ($this->_context->version == OpenApi::VERSION_3_1_0) { - $defaultValues = get_class_vars(get_class($this)); - foreach (['summary', 'description'] as $prop) { - if (property_exists($this, $prop)) { - if ($this->$prop !== $defaultValues[$prop]) { - $ref[$prop] = $data->$prop; - } - } - } - } - $data = (object) $ref; - } - - if ($this->_context->version == OpenApi::VERSION_3_1_0) { - if (isset($data->nullable)) { - if (true === $data->nullable) { - $data->type = (array) $data->type; - $data->type[] = 'null'; - } - unset($data->nullable); - } - } - - return $data; - } - - /** - * Validate annotation tree, and log notices & warnings. - * - * @param array $stack the path of annotations above this annotation in the tree - * @param array $skip (prevent stack overflow, when traversing an infinite dependency graph) - * @param string $ref Current ref path? - * @param object $context a free-form context contains - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = true; - - // Report orphaned annotations - foreach ($this->_unmerged as $annotation) { - if (!is_object($annotation)) { - $this->_context->logger->warning('Unexpected type: "' . gettype($annotation) . '" in ' . $this->identity() . '->_unmerged, expecting a Annotation object'); - break; - } - - $class = get_class($annotation); - if ($details = static::matchNested($class)) { - $property = $details->value; - if (is_array($property)) { - $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . ' multiple found, skipped: ' . $annotation->_context); - } else { - $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . " multiple found in:\n Using: " . $this->$property->_context . "\n Skipped: " . $annotation->_context); - } - } elseif ($annotation instanceof AbstractAnnotation) { - $message = 'Unexpected ' . $annotation->identity(); - if ($class::$_parents) { - $message .= ', expected to be inside ' . implode(', ', Util::shorten($class::$_parents)); - } - $this->_context->logger->warning($message . ' in ' . $annotation->_context); - } - $valid = false; - } - - // Report conflicting key - foreach (static::$_nested as $annotationClass => $nested) { - if (is_string($nested) || count($nested) === 1) { - continue; - } - $property = $nested[0]; - if (Generator::isDefault($this->$property)) { - continue; - } - $keys = []; - $keyField = $nested[1]; - foreach ($this->$property as $key => $item) { - if (is_array($item) && is_numeric($key) === false) { - $this->_context->logger->warning($this->identity() . '->' . $property . ' is an object literal, use nested ' . Util::shorten($annotationClass) . '() annotation(s) in ' . $this->_context); - $keys[$key] = $item; - } elseif (Generator::isDefault($item->$keyField)) { - $this->_context->logger->error($item->identity() . ' is missing key-field: "' . $keyField . '" in ' . $item->_context); - } elseif (isset($keys[$item->$keyField])) { - $this->_context->logger->error('Multiple ' . $item->_identity([]) . ' with the same ' . $keyField . '="' . $item->$keyField . "\":\n " . $item->_context . "\n " . $keys[$item->$keyField]->_context); - } else { - $keys[$item->$keyField] = $item; - } - } - } - - if (property_exists($this, 'ref') && !Generator::isDefault($this->ref) && $this->ref !== null) { - if (substr($this->ref, 0, 2) === '#/' && count($stack) > 0 && $stack[0] instanceof OpenApi) { - // Internal reference - try { - $stack[0]->ref($this->ref); - } catch (\Exception $e) { - $this->_context->logger->warning($e->getMessage() . ' for ' . $this->identity() . ' in ' . $this->_context, ['exception' => $e]); - } - } - } else { - // Report missing required fields (when not a $ref) - foreach (static::$_required as $property) { - if (Generator::isDefault($this->$property)) { - $message = 'Missing required field "' . $property . '" for ' . $this->identity() . ' in ' . $this->_context; - foreach (static::$_nested as $class => $nested) { - $nestedProperty = is_array($nested) ? $nested[0] : $nested; - if ($property === $nestedProperty) { - if ($this instanceof OpenApi) { - $message = 'Required ' . Util::shorten($class) . '() not found'; - } elseif (is_array($nested)) { - $message = $this->identity() . ' requires at least one ' . Util::shorten($class) . '() in ' . $this->_context; - } else { - $message = $this->identity() . ' requires a ' . Util::shorten($class) . '() in ' . $this->_context; - } - break; - } - } - $this->_context->logger->warning($message); - } - } - } - - // Report invalid types - foreach (static::$_types as $property => $type) { - $value = $this->$property; - if (Generator::isDefault($value) || $value === null) { - continue; - } - if (is_string($type)) { - if ($this->validateType($type, $value) === false) { - $valid = false; - $this->_context->logger->warning($this->identity() . '->' . $property . ' is a "' . gettype($value) . '", expecting a "' . $type . '" in ' . $this->_context); - } - } elseif (is_array($type)) { // enum? - if (in_array($value, $type) === false) { - $this->_context->logger->warning($this->identity() . '->' . $property . ' "' . $value . '" is invalid, expecting "' . implode('", "', $type) . '" in ' . $this->_context); - } - } else { - throw new \Exception('Invalid ' . get_class($this) . '::$_types[' . $property . ']'); - } - } - $stack[] = $this; - - return self::_validate($this, $stack, $skip, $ref, $context) ? $valid : false; - } - - /** - * Recursively validate all annotation properties. - * - * @param array|object $fields - */ - private static function _validate($fields, array $stack, array $skip, string $baseRef, ?object $context): bool - { - $valid = true; - $blacklist = []; - if (is_object($fields)) { - if (in_array($fields, $skip, true)) { - return true; - } - $skip[] = $fields; - $blacklist = property_exists($fields, '_blacklist') ? $fields::$_blacklist : []; - } - - foreach ($fields as $field => $value) { - if ($value === null || is_scalar($value) || in_array($field, $blacklist)) { - continue; - } - $ref = $baseRef !== '' ? $baseRef . '/' . urlencode((string) $field) : urlencode((string) $field); - if (is_object($value)) { - if (method_exists($value, 'validate')) { - if (!$value->validate($stack, $skip, $ref, $context)) { - $valid = false; - } - } elseif (!self::_validate($value, $stack, $skip, $ref, $context)) { - $valid = false; - } - } elseif (is_array($value) && !self::_validate($value, $stack, $skip, $ref, $context)) { - $valid = false; - } - } - - return $valid; - } - - /** - * Return a identity for easy debugging. - * Example: "@OA\Get(path="/pets")". - */ - public function identity(): string - { - $class = get_class($this); - $properties = []; - foreach (static::$_parents as $parent) { - foreach ($parent::$_nested as $annotationClass => $entry) { - if ($annotationClass === $class && is_array($entry) && !Generator::isDefault($this->{$entry[1]})) { - $properties[] = $entry[1]; - break 2; - } - } - } - - return $this->_identity($properties); - } - - /** - * Find matching nested details. - * - * @param string $class the class to match - * - * @return null|object key/value object or `null` - */ - public static function matchNested(string $class) - { - if (array_key_exists($class, static::$_nested)) { - return (object) ['key' => $class, 'value' => static::$_nested[$class]]; - } - - $parent = $class; - // only consider the immediate OpenApi parent - while (0 !== strpos($parent, 'OpenApi\\Annotations\\') && $parent = get_parent_class($parent)) { - if ($kvp = static::matchNested($parent)) { - return $kvp; - } - } - - return null; - } - - /** - * Helper for generating the identity(). - */ - protected function _identity(array $properties): string - { - $fields = []; - foreach ($properties as $property) { - $value = $this->$property; - if ($value !== null && !Generator::isDefault($value)) { - $fields[] = $property . '=' . (is_string($value) ? '"' . $value . '"' : $value); - } - } - - return Util::shorten(get_class($this)) . '(' . implode(',', $fields) . ')'; - } - - /** - * Validates the matching of the property value to a annotation type. - * - * @param string $type The annotations property type - * @param mixed $value The property value - */ - private function validateType(string $type, $value): bool - { - if (substr($type, 0, 1) === '[' && substr($type, -1) === ']') { // Array of a specified type? - if ($this->validateType('array', $value) === false) { - return false; - } - $itemType = substr($type, 1, -1); - foreach ($value as $i => $item) { - if ($this->validateType($itemType, $item) === false) { - return false; - } - } - - return true; - } - - if (is_subclass_of($type, AbstractAnnotation::class)) { - $type = 'object'; - } - - return $this->validateDefaultTypes($type, $value); - } - - /** - * Validates default Open Api types. - * - * @param string $type The property type - * @param mixed $value The value to validate - */ - private function validateDefaultTypes(string $type, $value): bool - { - switch ($type) { - case 'string': - return is_string($value); - case 'boolean': - return is_bool($value); - case 'integer': - return is_int($value); - case 'number': - return is_numeric($value); - case 'object': - return is_object($value); - case 'array': - return $this->validateArrayType($value); - case 'scheme': - return in_array($value, ['http', 'https', 'ws', 'wss'], true); - default: - throw new \Exception('Invalid type "' . $type . '"'); - } - } - - /** - * Validate array type. - */ - private function validateArrayType($value): bool - { - if (is_array($value) === false) { - return false; - } - $count = 0; - foreach ($value as $i => $item) { - //not a array, but a hash/map - if ($count !== $i) { - return false; - } - $count++; - } - - return true; - } - - /** - * Wrap the context with a reference to the annotation it is nested in. - * - * @param AbstractAnnotation $annotation - * - * @return AbstractAnnotation - */ - protected function nested(AbstractAnnotation $annotation, Context $nestedContext) - { - if (property_exists($annotation, '_context') && $annotation->_context === $this->_context) { - $annotation->_context = $nestedContext; - } - - return $annotation; - } - - protected function combine(...$args): array - { - $combined = []; - foreach ($args as $arg) { - if (is_array($arg)) { - $combined = array_merge($combined, $arg); - } else { - $combined[] = $arg; - } - } - - return array_filter($combined, function ($value) { - return !Generator::isDefault($value) && $value !== null; - }); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php deleted file mode 100644 index 0cdf211..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php +++ /dev/null @@ -1,38 +0,0 @@ - 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php deleted file mode 100644 index 5cb64ef..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Attachable.php +++ /dev/null @@ -1,73 +0,0 @@ - - */ - public $schemas = Generator::UNDEFINED; - - /** - * Reusable Responses. - * - * @var Response[] - */ - public $responses = Generator::UNDEFINED; - - /** - * Reusable Parameters. - * - * @var Parameter[] - */ - public $parameters = Generator::UNDEFINED; - - /** - * Reusable Examples. - * - * @var Examples[] - */ - public $examples = Generator::UNDEFINED; - - /** - * Reusable Request Bodies. - * - * @var RequestBody[] - */ - public $requestBodies = Generator::UNDEFINED; - - /** - * Reusable Headers. - * - * @var Header[] - */ - public $headers = Generator::UNDEFINED; - - /** - * Reusable Security Schemes. - * - * @var SecurityScheme[] - */ - public $securitySchemes = Generator::UNDEFINED; - - /** - * Reusable Links. - * - * @var Link[] - */ - public $links = Generator::UNDEFINED; - - /** - * Reusable Callbacks. - * - * @var callable[] - */ - public $callbacks = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Response::class => ['responses', 'response'], - Parameter::class => ['parameters', 'parameter'], - PathParameter::class => ['parameters', 'parameter'], - RequestBody::class => ['requestBodies', 'request'], - Examples::class => ['examples', 'example'], - Header::class => ['headers', 'header'], - SecurityScheme::class => ['securitySchemes', 'securityScheme'], - Link::class => ['links', 'link'], - Schema::class => ['schemas', 'schema'], - Attachable::class => ['attachables'], - ]; - - /** - * Generate a `#/components/...` reference for the given annotation. - * - * A `string` component value always assumes type `Schema`. - * - * @param AbstractAnnotation|string $component - */ - public static function ref($component, bool $encode = true): string - { - if ($component instanceof AbstractAnnotation) { - foreach (Components::$_nested as $type => $nested) { - // exclude attachables - if (2 == count($nested)) { - if ($component instanceof $type) { - $type = $nested[0]; - $name = $component->{$nested[1]}; - break; - } - } - } - } else { - $type = 'schemas'; - $name = $component; - } - - return self::COMPONENTS_PREFIX . $type . '/' . ($encode ? Util::refEncode((string) $name) : $name); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php deleted file mode 100644 index 1075627..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Contact.php +++ /dev/null @@ -1,63 +0,0 @@ - 'string', - 'url' => 'string', - 'email' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Info::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php deleted file mode 100644 index 8c3a54f..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Delete.php +++ /dev/null @@ -1,25 +0,0 @@ - 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Schema::class, - Property::class, - AdditionalProperties::class, - Items::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php deleted file mode 100644 index c38a24b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Examples.php +++ /dev/null @@ -1,96 +0,0 @@ - 'string', - 'description' => 'string', - 'externalValue' => 'string', - ]; - - public static $_required = ['summary']; - - public static $_parents = [ - Components::class, - Parameter::class, - PathParameter::class, - MediaType::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php deleted file mode 100644 index 81bff45..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php +++ /dev/null @@ -1,76 +0,0 @@ - 'string', - 'url' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_required = ['url']; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - Tag::class, - Schema::class, - AdditionalProperties::class, - Property::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Delete::class, - Patch::class, - Head::class, - Options::class, - Trace::class, - Items::class, - JsonContent::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php deleted file mode 100644 index 5409206..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Flow.php +++ /dev/null @@ -1,106 +0,0 @@ - ['implicit', 'password', 'authorizationCode', 'clientCredentials'], - 'refreshUrl' => 'string', - 'authorizationUrl' => 'string', - 'tokenUrl' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - SecurityScheme::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - if (is_array($this->scopes) && empty($this->scopes)) { - $this->scopes = new \stdClass(); - } - - return parent::jsonSerialize(); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php deleted file mode 100644 index c0ff442..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Get.php +++ /dev/null @@ -1,25 +0,0 @@ - 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Response::class, - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php deleted file mode 100644 index db535b3..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Info.php +++ /dev/null @@ -1,98 +0,0 @@ - 'string', - 'version' => 'string', - 'description' => 'string', - 'termsOfService' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Contact::class => 'contact', - License::class => 'license', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php deleted file mode 100644 index c46ec94..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Items.php +++ /dev/null @@ -1,62 +0,0 @@ - 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Property::class, - AdditionalProperties::class, - Schema::class, - JsonContent::class, - XmlContent::class, - Items::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - $parent = end($stack); - if ($parent instanceof Schema && $parent->type !== 'array') { - $this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context); - $valid = false; - } - - // @todo Additional validation when used inside a Header or Parameter context. - - return $valid; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php deleted file mode 100644 index 348f8d6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/JsonContent.php +++ /dev/null @@ -1,42 +0,0 @@ -`'application/json'` will be generated. - * - * @Annotation - */ -class JsonContent extends Schema -{ - /** - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = []; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - AdditionalProperties::class => 'additionalProperties', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php deleted file mode 100644 index 01e7250..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/License.php +++ /dev/null @@ -1,102 +0,0 @@ - 'string', - 'identifier' => 'string', - 'url' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_required = ['name']; - - /** - * @inheritdoc - */ - public static $_parents = [ - Info::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { - unset($data->identifier); - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - $valid = parent::validate($stack, $skip, $ref, $context); - - if ($this->_context->isVersion(OpenApi::VERSION_3_1_0)) { - if (!Generator::isDefault($this->url) && $this->identifier !== Generator::UNDEFINED) { - $this->_context->logger->warning($this->identity() . ' url and identifier are mutually exclusive'); - $valid = false; - } - } - - return $valid; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php deleted file mode 100644 index 99924db..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Link.php +++ /dev/null @@ -1,113 +0,0 @@ -links array. - * - * @var string - */ - public $link = Generator::UNDEFINED; - - /** - * A relative or absolute reference to an OA operation. - * - * This field is mutually exclusive of the operationId field, and must point to an Operation object. - * - * Relative values may be used to locate an existing Operation object in the OpenAPI definition. - * - * @var string - */ - public $operationRef = Generator::UNDEFINED; - - /** - * The name of an existing, resolvable OA operation, as defined with a unique operationId. - * - * This field is mutually exclusive of the operationRef field. - * - * @var string - */ - public $operationId = Generator::UNDEFINED; - - /** - * A map representing parameters to pass to an operation as specified with operationId or identified via - * operationRef. - * - * The key is the parameter name to be used, whereas the value can be a constant or an expression to - * be evaluated and passed to the linked operation. - * The parameter name can be qualified using the parameter location [{in}.]{name} for operations - * that use the same parameter name in different locations (e.g. path.id). - * - * @var array - */ - public $parameters = Generator::UNDEFINED; - - /** - * A literal value or {expression} to use as a request body when calling the target operation. - */ - public $requestBody = Generator::UNDEFINED; - - /** - * A description of the link. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * A server object to be used by the target operation. - * - * @var Server - */ - public $server = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_nested = [ - Server::class => 'server', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Response::class, - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php deleted file mode 100644 index 5abfcdb..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/MediaType.php +++ /dev/null @@ -1,87 +0,0 @@ -content array. - * - * @var string - */ - public $mediaType = Generator::UNDEFINED; - - /** - * The schema defining the type used for the request body. - * - * @var Schema - */ - public $schema = Generator::UNDEFINED; - - /** - * Example of the media type. - * - * The example object should be in the correct format as specified by the media type. - * The example object is mutually exclusive of the examples object. - * - * Furthermore, if referencing a schema which contains an example, - * the example value shall override the example provided by the schema. - */ - public $example = Generator::UNDEFINED; - - /** - * Examples of the media type. - * - * Each example object should match the media type and specified schema if present. - * The examples object is mutually exclusive of the example object. - * - * Furthermore, if referencing a schema which contains an example, - * the examples value shall override the example provided by the schema. - * - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * A map between a property name and its encoding information. - * - * The key, being the property name, must exist in the schema as a property. - * - * The encoding object shall only apply to requestBody objects when the media type is multipart or - * application/x-www-form-urlencoded. - * - * @var array - */ - public $encoding = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Response::class, - RequestBody::class, - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php deleted file mode 100644 index 5a42184..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/OpenApi.php +++ /dev/null @@ -1,236 +0,0 @@ -@OA\Server objects, which provide connectivity information to a target server. - * - * If not provided, or is an empty array, the default value would be a Server Object with an url value of /. - * - * @var Server[] - */ - public $servers = Generator::UNDEFINED; - - /** - * The available paths and operations for the API. - * - * @var PathItem[] - */ - public $paths = Generator::UNDEFINED; - - /** - * An element to hold various components for the specification. - * - * @var Components - */ - public $components = Generator::UNDEFINED; - - /** - * Lists the required security schemes to execute this operation. - * - * The name used for each property must correspond to a security scheme declared - * in the Security Schemes under the Components Object. - * Security Requirement Objects that contain multiple schemes require that - * all schemes must be satisfied for a request to be authorized. - * This enables support for scenarios where multiple query parameters or - * HTTP headers are required to convey security information. - * When a list of Security Requirement Objects is defined on the Open API object or - * Operation Object, only one of Security Requirement Objects in the list needs to - * be satisfied to authorize the request. - * - * @var array - */ - public $security = Generator::UNDEFINED; - - /** - * A list of tags used by the specification with additional metadata. - * - * The order of the tags can be used to reflect on their order by the parsing tools. - * Not all tags that are used by the Operation Object must be declared. - * The tags that are not declared may be organized randomly or based on the tools' logic. - * Each tag name in the list must be unique. - * - * @var Tag[] - */ - public $tags = Generator::UNDEFINED; - - /** - * Additional external documentation. - * - * @var ExternalDocumentation - */ - public $externalDocs = Generator::UNDEFINED; - - /** - * @var Analysis - */ - public $_analysis = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['openapi', 'info', 'paths']; - - /** - * @inheritdoc - */ - public static $_nested = [ - Info::class => 'info', - Server::class => ['servers'], - PathItem::class => ['paths', 'path'], - Components::class => 'components', - Tag::class => ['tags'], - ExternalDocumentation::class => 'externalDocs', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_types = []; - - /** - * @inheritdoc - */ - public function validate(array $stack = null, array $skip = null, string $ref = '', $context = null): bool - { - if ($stack !== null || $skip !== null || $ref !== '') { - $this->_context->logger->warning('Nested validation for ' . $this->identity() . ' not allowed'); - - return false; - } - - if (!in_array($this->openapi, self::SUPPORTED_VERSIONS)) { - $this->_context->logger->warning('Unsupported OpenAPI version "' . $this->openapi . '". Allowed versions are: ' . implode(', ', self::SUPPORTED_VERSIONS)); - - return false; - } - - return parent::validate([], [], '#', new \stdClass()); - } - - /** - * Save the OpenAPI documentation to a file. - */ - public function saveAs(string $filename, string $format = 'auto'): void - { - if ($format === 'auto') { - $format = strtolower(substr($filename, -5)) === '.json' ? 'json' : 'yaml'; - } - - if (strtolower($format) === 'json') { - $content = $this->toJson(); - } else { - $content = $this->toYaml(); - } - - if (file_put_contents($filename, $content) === false) { - throw new \Exception('Failed to saveAs("' . $filename . '", "' . $format . '")'); - } - } - - /** - * Look up an annotation with a $ref url. - * - * @param string $ref The $ref value, for example: "#/components/schemas/Product" - */ - public function ref(string $ref) - { - if (substr($ref, 0, 2) !== '#/') { - // @todo Add support for external (http) refs? - throw new \Exception('Unsupported $ref "' . $ref . '", it should start with "#/"'); - } - - return $this->resolveRef($ref, '#/', $this, []); - } - - /** - * Recursive helper for ref(). - */ - private static function resolveRef(string $ref, string $resolved, $container, array $mapping) - { - if ($ref === $resolved) { - return $container; - } - $path = substr($ref, strlen($resolved)); - $slash = strpos($path, '/'); - - $subpath = $slash === false ? $path : substr($path, 0, $slash); - $property = Util::refDecode($subpath); - $unresolved = $slash === false ? $resolved . $subpath : $resolved . $subpath . '/'; - - if (is_object($container)) { - if (property_exists($container, $property) === false) { - throw new \Exception('$ref "' . $ref . '" not found'); - } - if ($slash === false) { - return $container->$property; - } - $mapping = []; - if ($container instanceof AbstractAnnotation) { - foreach ($container::$_nested as $nestedClass => $nested) { - if (is_string($nested) === false && count($nested) === 2 && $nested[0] === $property) { - $mapping[$nestedClass] = $nested[1]; - } - } - } - - return self::resolveRef($ref, $unresolved, $container->$property, $mapping); - } elseif (is_array($container)) { - if (array_key_exists($property, $container)) { - return self::resolveRef($ref, $unresolved, $container[$property], []); - } - foreach ($mapping as $nestedClass => $keyField) { - foreach ($container as $key => $item) { - if (is_numeric($key) && is_object($item) && $item instanceof $nestedClass && (string) $item->$keyField === $property) { - return self::resolveRef($ref, $unresolved, $item, []); - } - } - } - } - - throw new \Exception('$ref "' . $unresolved . '" not found'); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php deleted file mode 100644 index be8d60a..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Operation.php +++ /dev/null @@ -1,248 +0,0 @@ - 'string', - 'method' => 'string', - 'tags' => '[string]', - 'summary' => 'string', - 'description' => 'string', - 'deprecated' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Parameter::class => ['parameters'], - PathParameter::class => ['parameters'], - Response::class => ['responses', 'response'], - ExternalDocumentation::class => 'externalDocs', - Server::class => ['servers'], - RequestBody::class => 'requestBody', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - unset($data->method); - unset($data->path); - - // ensure security elements are object - if (isset($data->security) && is_array($data->security)) { - foreach ($data->security as $key => $scheme) { - $data->security[$key] = (object) $scheme; - } - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - if (!Generator::isDefault($this->responses)) { - foreach ($this->responses as $response) { - if (!Generator::isDefault($response->response) && $response->response !== 'default' && preg_match('/^([12345]{1}[0-9]{2})|([12345]{1}XX)$/', (string) $response->response) === 0) { - $this->_context->logger->warning('Invalid value "' . $response->response . '" for ' . $response->_identity([]) . '->response, expecting "default", a HTTP Status Code or HTTP Status Code range definition in ' . $response->_context); - $valid = false; - } - } - } - - if (is_object($context) && !Generator::isDefault($this->operationId)) { - if (!property_exists($context, 'operationIds')) { - $context->operationIds = []; - } - - if (in_array($this->operationId, $context->operationIds)) { - $this->_context->logger->warning('operationId must be unique. Duplicate value found: "' . $this->operationId . '"'); - $valid = false; - } - - $context->operationIds[] = $this->operationId; - } - - return $valid; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php deleted file mode 100644 index 312505e..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Options.php +++ /dev/null @@ -1,25 +0,0 @@ -Components::parameters or PathItem::parameters array. - * - * @var string - */ - public $parameter = Generator::UNDEFINED; - - /** - * The (case-sensitive) name of the parameter. - * - * If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object. - * - * If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored. - * For all other cases, the name corresponds to the parameter name used by the in property. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * The location of the parameter. - * - * Possible values are "query", "header", "path" or "cookie". - * - * @var string - */ - public $in = Generator::UNDEFINED; - - /** - * A brief description of the parameter. - * - * This could contain examples of use. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * Determines whether this parameter is mandatory. - * - * If the parameter location is "path", this property is required and its value must be true. - * Otherwise, the property may be included and its default value is false. - * - * @var bool - */ - public $required = Generator::UNDEFINED; - - /** - * Specifies that a parameter is deprecated and should be transitioned out of usage. - * - * @var bool - */ - public $deprecated = Generator::UNDEFINED; - - /** - * Sets the ability to pass empty-valued parameters. - * - * This is valid only for query parameters and allows sending a parameter with an empty value. - * - * Default value is false. - * - * If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored. - * - * @var bool - */ - public $allowEmptyValue = Generator::UNDEFINED; - - /** - * Describes how the parameter value will be serialized depending on the type of the parameter value. - * - * Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form. - * - * @var string - */ - public $style = Generator::UNDEFINED; - - /** - * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. - * - * For other types of parameters this property has no effect. - * - * When style is form, the default value is true. - * For all other styles, the default value is false. - * - * @var bool - */ - public $explode = Generator::UNDEFINED; - - /** - * Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. - * - * This property only applies to parameters with an in value of query. - * - * The default value is false. - * - * @var bool - */ - public $allowReserved = Generator::UNDEFINED; - - /** - * The schema defining the type used for the parameter. - * - * @var Schema - */ - public $schema = Generator::UNDEFINED; - - /** - * Example of the media type. - * - * The example should match the specified schema and encoding properties if present. - * The example object is mutually exclusive of the examples object. - * Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema. - * To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary. - */ - public $example = Generator::UNDEFINED; - - /** - * Examples of the media type. - * - * Each example should contain a value in the correct format as specified in the parameter encoding. - * The examples object is mutually exclusive of the example object. - * Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema. - * - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * A map containing the representations for the parameter. - * - * The key is the media type and the value describes it. - * The map must only contain one entry. - * - * @var MediaType[] - */ - public $content = Generator::UNDEFINED; - - /** - * Path-style parameters defined by RFC6570. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) - */ - public $matrix = Generator::UNDEFINED; - - /** - * Label style parameters defined by RFC6570. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.5) - */ - public $label = Generator::UNDEFINED; - - /** - * Form style parameters defined by RFC6570. - * - * This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.8) - */ - public $form = Generator::UNDEFINED; - - /** - * Simple style parameters defined by RFC6570. - * - * This option replaces collectionFormat with a csv value from OpenAPI 2.0. - * - * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.2) - * - * @var array - */ - public $simple = Generator::UNDEFINED; - - /** - * Space separated array values. - * - * This option replaces collectionFormat equal to ssv from OpenAPI 2.0. - * - * @var array - */ - public $spaceDelimited = Generator::UNDEFINED; - - /** - * Pipe separated array values. - * - * This option replaces collectionFormat equal to pipes from OpenAPI 2.0. - * - * @var array - */ - public $pipeDelimited = Generator::UNDEFINED; - - /** - * Provides a simple way of rendering nested objects using form parameters. - */ - public $deepObject = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['name', 'in']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'name' => 'string', - 'in' => ['query', 'header', 'path', 'cookie'], - 'description' => 'string', - 'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'], - 'required' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Schema::class => 'schema', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - PathItem::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Delete::class, - Patch::class, - Head::class, - Options::class, - Trace::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if (in_array($this, $skip, true)) { - return true; - } - - $valid = parent::validate($stack, $skip, $ref, $context); - - if (Generator::isDefault($this->ref)) { - if ($this->in === 'body') { - if (Generator::isDefault($this->schema)) { - $this->_context->logger->warning('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context); - $valid = false; - } - } - } - - return $valid; - } - - /** - * @inheritdoc - */ - public function identity(): string - { - return parent::_identity(['name', 'in']); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php deleted file mode 100644 index 7972f3b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Patch.php +++ /dev/null @@ -1,25 +0,0 @@ -paths array). - * - * @var string - */ - public $path = Generator::UNDEFINED; - - /** - * An optional, string summary, intended to apply to all operations in this path. - * - * @var string - */ - public $summary = Generator::UNDEFINED; - - /** - * A definition of a GET operation on this path. - * - * @var Get - */ - public $get = Generator::UNDEFINED; - - /** - * A definition of a PUT operation on this path. - * - * @var Put - */ - public $put = Generator::UNDEFINED; - - /** - * A definition of a POST operation on this path. - * - * @var Post - */ - public $post = Generator::UNDEFINED; - - /** - * A definition of a DELETE operation on this path. - * - * @var Delete - */ - public $delete = Generator::UNDEFINED; - - /** - * A definition of a OPTIONS operation on this path. - * - * @var Options - */ - public $options = Generator::UNDEFINED; - - /** - * A definition of a HEAD operation on this path. - * - * @var Head - */ - public $head = Generator::UNDEFINED; - - /** - * A definition of a PATCH operation on this path. - * - * @var Patch - */ - public $patch = Generator::UNDEFINED; - - /** - * A definition of a TRACE operation on this path. - * - * @var Trace - */ - public $trace = Generator::UNDEFINED; - - /** - * An alternative server array to service all operations in this path. - * - * @var Server[] - */ - public $servers = Generator::UNDEFINED; - - /** - * A list of parameters that are applicable for all the operations described under this path. - * - * These parameters can be overridden at the operation level, but cannot be removed there. - * The list must not include duplicated parameters. - * A unique parameter is defined by a combination of a name and location. - * The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters. - * - * @var Parameter[] - */ - public $parameters = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'path' => 'string', - 'summary' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Get::class => 'get', - Post::class => 'post', - Put::class => 'put', - Delete::class => 'delete', - Patch::class => 'patch', - Trace::class => 'trace', - Head::class => 'head', - Options::class => 'options', - Parameter::class => ['parameters'], - PathParameter::class => ['parameters'], - Server::class => ['servers'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php deleted file mode 100644 index 9e600b4..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/PathParameter.php +++ /dev/null @@ -1,25 +0,0 @@ -properties array. - * - * @var string - */ - public $property = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - AdditionalProperties::class, - Schema::class, - JsonContent::class, - XmlContent::class, - Property::class, - Items::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php deleted file mode 100644 index a0a0303..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Put.php +++ /dev/null @@ -1,25 +0,0 @@ -|JsonContent|XmlContent - */ - public $content = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'description' => 'string', - 'required' => 'boolean', - 'request' => 'string', - ]; - - public static $_parents = [ - Components::class, - Delete::class, - Get::class, - Head::class, - Operation::class, - Options::class, - Patch::class, - Post::class, - Trace::class, - Put::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - MediaType::class => ['content', 'mediaType'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php deleted file mode 100644 index 5c8d304..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Response.php +++ /dev/null @@ -1,128 +0,0 @@ -responses array. - * - * A HTTP status code or default. - * - * @var string|int - */ - public $response = Generator::UNDEFINED; - - /** - * A short description of the response. - * - * CommonMark syntax may be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * Maps a header name to its definition. - * - * RFC7230 states header names are case insensitive. - * - * If a response header is defined with the name "Content-Type", it shall be ignored. - * - * @see [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) - * - * @var Header[] - */ - public $headers = Generator::UNDEFINED; - - /** - * A map containing descriptions of potential response payloads. - * - * The key is a media type or media type range and the value describes it. - * - * For responses that match multiple keys, only the most specific key is applicable; - * e.g. text/plain overrides text/*. - * - * @var MediaType|JsonContent|XmlContent|array - */ - public $content = Generator::UNDEFINED; - - /** - * A map of operations links that can be followed from the response. - * - * The key of the map is a short name for the link, following the naming constraints of the names for Component - * Objects. - * - * @var Link[] - */ - public $links = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - MediaType::class => ['content', 'mediaType'], - Header::class => ['headers', 'header'], - Link::class => ['links', 'link'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Operation::class, - Get::class, - Post::class, - Put::class, - Patch::class, - Delete::class, - Head::class, - Options::class, - Trace::class, - ]; - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - $valid = parent::validate($stack, $skip, $ref, $context); - - if (Generator::isDefault($this->description) && Generator::isDefault($this->ref)) { - $this->_context->logger->warning($this->identity() . ' One of description or ref is required'); - $valid = false; - } - - return $valid; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php deleted file mode 100644 index c7f960b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Schema.php +++ /dev/null @@ -1,440 +0,0 @@ -schemas array. - * - * @var string - */ - public $schema = Generator::UNDEFINED; - - /** - * Can be used to decorate a user interface with information about the data produced by this user interface. - * - * Preferably short; use description for more details. - * - * @var string - */ - public $title = Generator::UNDEFINED; - - /** - * A description will provide explanation about the purpose of the instance described by this schema. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the - * value of this property. - * - * @var int - */ - public $maxProperties = Generator::UNDEFINED; - - /** - * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to, - * the value of this property. - * - * @var int - */ - public $minProperties = Generator::UNDEFINED; - - /** - * An object instance is valid against this property if its property set contains all elements in this property's - * array value. - * - * @var string[] - */ - public $required = Generator::UNDEFINED; - - /** - * @var Property[] - */ - public $properties = Generator::UNDEFINED; - - /** - * The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or - * "object". - * - * @var string - */ - public $type = Generator::UNDEFINED; - - /** - * The extending format for the previously mentioned type. See Data Type Formats for further details. - * - * @var string - */ - public $format = Generator::UNDEFINED; - - /** - * Required if type is "array". Describes the type of items in the array. - * - * @var Items - */ - public $items = Generator::UNDEFINED; - - /** - * Determines the format of the array if type array is used. - * Possible values are: - * - csv: comma separated values foo,bar. - * - ssv: space separated values foo bar. - * - tsv: tab separated values foo\tbar. - * - pipes: pipe separated values foo|bar. - * - multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz. - * This is valid only for parameters of type query or formData. - * Default value is csv. - * - * @var string - */ - public $collectionFormat = Generator::UNDEFINED; - - /** - * Sets a default value to the parameter. The type of the value depends on the defined type. - * - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor101) - */ - public $default = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) - * - * @var int|float - */ - public $maximum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) - * - * @var bool - */ - public $exclusiveMaximum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) - * - * @var int|float - */ - public $minimum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) - * - * @var bool - */ - public $exclusiveMinimum = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor26) - * - * @var int - */ - public $maxLength = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor29) - * - * @var int - */ - public $minLength = Generator::UNDEFINED; - - /** - * A string instance is considered valid if the regular expression matches the instance successfully. - * - * @var string - */ - public $pattern = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor42) - * - * @var int - */ - public $maxItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor45) - * - * @var int - */ - public $minItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor49) - * - * @var bool - */ - public $uniqueItems = Generator::UNDEFINED; - - /** - * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor76) - * - * @var string[]|int[]|float[] - */ - public $enum = Generator::UNDEFINED; - - /** - * A numeric instance is valid against "multipleOf" if the result of the division of the instance by this - * property's value is an integer. - * - * @var int|float - */ - public $multipleOf = Generator::UNDEFINED; - - /** - * Adds support for polymorphism. - * - * The discriminator is an object name that is used to differentiate between other schemas which may satisfy the - * payload description. See Composition and Inheritance for more details. - * - * @var Discriminator - */ - public $discriminator = Generator::UNDEFINED; - - /** - * Declares the property as "read only". - * - * Relevant only for Schema "properties" definitions. - * - * This means that it may be sent as part of a response but should not be sent as part of the request. - * If the property is marked as readOnly being true and is in the required list, the required will take effect on - * the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is - * false. - * - * @var bool - */ - public $readOnly = Generator::UNDEFINED; - - /** - * Declares the property as "write only". - * - * Relevant only for Schema "properties" definitions. - * Therefore, it may be sent as part of a request but should not be sent as part of the response. - * If the property is marked as writeOnly being true and is in the required list, the required will take effect on - * the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is - * false. - * - * @var bool - */ - public $writeOnly = Generator::UNDEFINED; - - /** - * This may be used only on properties schemas. - * - * It has no effect on root schemas. - * Adds additional metadata to describe the XML representation of this property. - * - * @var Xml - */ - public $xml = Generator::UNDEFINED; - - /** - * Additional external documentation for this schema. - * - * @var ExternalDocumentation - */ - public $externalDocs = Generator::UNDEFINED; - - /** - * A free-form property to include an example of an instance for this schema. - * - * To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to - * contain the example with escaping where necessary. - */ - public $example = Generator::UNDEFINED; - - /** - * Allows sending a null value for the defined schema. - * Default value is false. - * - * @var bool - */ - public $nullable = Generator::UNDEFINED; - - /** - * Specifies that a schema is deprecated and should be transitioned out of usage. - * Default value is false. - * - * @var bool - */ - public $deprecated = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against all schemas - * defined by this property's value. - * - * @var array - */ - public $allOf = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against at least one - * schema defined by this property's value. - * - * @var array - */ - public $anyOf = Generator::UNDEFINED; - - /** - * An instance validates successfully against this property if it validates successfully against exactly one schema - * defined by this property's value. - * - * @var array - */ - public $oneOf = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29. - */ - public $not = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#anchor64. - * - * @var bool|AdditionalProperties - */ - public $additionalProperties = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10. - */ - public $additionalItems = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14. - */ - public $contains = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19. - */ - public $patternProperties = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21. - */ - public $dependencies = Generator::UNDEFINED; - - /** - * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22. - */ - public $propertyNames = Generator::UNDEFINED; - - /** - * http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3. - * - * @var mixed - */ - public $const = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'title' => 'string', - 'description' => 'string', - 'required' => '[string]', - 'format' => 'string', - 'collectionFormat' => ['csv', 'ssv', 'tsv', 'pipes', 'multi'], - 'maximum' => 'number', - 'exclusiveMaximum' => 'boolean', - 'minimum' => 'number', - 'exclusiveMinimum' => 'boolean', - 'maxLength' => 'integer', - 'minLength' => 'integer', - 'pattern' => 'string', - 'maxItems' => 'integer', - 'minItems' => 'integer', - 'uniqueItems' => 'boolean', - 'multipleOf' => 'integer', - 'allOf' => '[' . Schema::class . ']', - 'oneOf' => '[' . Schema::class . ']', - 'anyOf' => '[' . Schema::class . ']', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - Parameter::class, - PathParameter::class, - MediaType::class, - Header::class, - ]; - - /** - * @inheritdoc - */ - #[\ReturnTypeWillChange] - public function jsonSerialize() - { - $data = parent::jsonSerialize(); - - if (isset($data->const)) { - if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { - $data->enum = [$data->const]; - unset($data->const); - } - } - - return $data; - } - - /** - * @inheritdoc - */ - public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool - { - if ($this->type === 'array' && Generator::isDefault($this->items)) { - $this->_context->logger->warning('@OA\\Items() is required when ' . $this->identity() . ' has type "array" in ' . $this->_context); - - return false; - } - - return parent::validate($stack, $skip, $ref, $context); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php deleted file mode 100644 index 13fa564..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php +++ /dev/null @@ -1,136 +0,0 @@ -security array. - * - * @var string - */ - public $securityScheme = Generator::UNDEFINED; - - /** - * The type of the security scheme. - * - * @var string - */ - public $type = Generator::UNDEFINED; - - /** - * A short description for security scheme. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * The name of the header or query parameter to be used. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * Required The location of the API key. - * - * @var string - */ - public $in = Generator::UNDEFINED; - - /** - * The flow used by the OAuth2 security scheme. - * - * @var Flow[] - */ - public $flows = Generator::UNDEFINED; - - /** - * A hint to the client to identify how the bearer token is formatted. - * - * Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes. - * - * @var string - */ - public $bearerFormat = Generator::UNDEFINED; - - /** - * The name of the HTTP Authorization scheme. - * - * @see [RFC7235](https://tools.ietf.org/html/rfc7235#section-5.1) - * - * @var string - */ - public $scheme = Generator::UNDEFINED; - - /** - * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an URL. - * - * @var string - */ - public $openIdConnectUrl = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_required = ['securityScheme', 'type']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'type' => ['http', 'apiKey', 'oauth2', 'openIdConnect'], - 'description' => 'string', - 'name' => 'string', - 'bearerFormat' => 'string', - 'in' => ['query', 'header', 'cookie'], - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Flow::class => ['flows', 'flow'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - Components::class, - ]; - - /** - * @inheritdoc - */ - public function merge(array $annotations, bool $ignore = false): array - { - $unmerged = parent::merge($annotations, $ignore); - - if ($this->type === 'oauth2') { - $this->name = Generator::UNDEFINED; - } - - return $unmerged; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php deleted file mode 100644 index df0cb0d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Server.php +++ /dev/null @@ -1,87 +0,0 @@ - ['variables', 'serverVariable'], - Attachable::class => ['attachables'], - ]; - - /** - * @inheritdoc - */ - public static $_required = ['url']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'url' => 'string', - 'description' => 'string', - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php deleted file mode 100644 index 99423aa..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php +++ /dev/null @@ -1,87 +0,0 @@ -variables array. - * - * @var string - */ - public $serverVariable = Generator::UNDEFINED; - - /** - * An enumeration of values to be used if the substitution options are from a limited set. - * - * @var string[]|int[]|float[] - */ - public $enum = Generator::UNDEFINED; - - /** - * The default value to use for substitution, and to send, if an alternate value is not supplied. - * - * Unlike the Schema Object's default, this value must be provided by the consumer. - * - * @var string - */ - public $default = Generator::UNDEFINED; - - /** - * A map between a variable name and its value. - * - * The value is used for substitution in the server's URL template. - * - * @var array - */ - public $variables = Generator::UNDEFINED; - - /** - * An optional description for the server variable. - * - * CommonMark syntax MAY be used for rich text representation. - * - * @var string - */ - public $description = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = [ - Server::class, - ]; - - /** - * @inheritdoc - */ - public static $_required = ['default']; - - /** - * @inheritdoc - */ - public static $_types = [ - 'default' => 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php deleted file mode 100644 index 670ac87..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Tag.php +++ /dev/null @@ -1,66 +0,0 @@ - 'string', - 'description' => 'string', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - OpenApi::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - ExternalDocumentation::class => 'externalDocs', - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php deleted file mode 100644 index aac2820..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/Trace.php +++ /dev/null @@ -1,25 +0,0 @@ -true. - * - * If wrapped is false, it will be ignored. - * - * @var string - */ - public $name = Generator::UNDEFINED; - - /** - * The URL of the namespace definition. Value SHOULD be in the form of an URL. - * - * @var string - */ - public $namespace = Generator::UNDEFINED; - - /** - * The prefix to be used for the name. - * - * @var string - */ - public $prefix = Generator::UNDEFINED; - - /** - * Declares whether the property definition translates to an attribute instead of an element. - * - * Default value is false. - * - * @var bool - */ - public $attribute = Generator::UNDEFINED; - - /** - * MAY be used only for an array definition. - * - * Signifies whether the array is wrapped (for example <books><book/><book/></books>) - * or unwrapped (<book/><book/>). - * - * Default value is false. The definition takes effect only when defined alongside type being array (outside the items). - * - * @var bool - */ - public $wrapped = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_types = [ - 'name' => 'string', - 'namespace' => 'string', - 'prefix' => 'string', - 'attribute' => 'boolean', - 'wrapped' => 'boolean', - ]; - - /** - * @inheritdoc - */ - public static $_parents = [ - AdditionalProperties::class, - Schema::class, - Property::class, - Schema::class, - Items::class, - XmlContent::class, - ]; - - /** - * @inheritdoc - */ - public static $_nested = [ - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php deleted file mode 100644 index 59f7651..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Annotations/XmlContent.php +++ /dev/null @@ -1,43 +0,0 @@ -`'application/xml'` will be generated. - * - * @Annotation - */ -class XmlContent extends Schema -{ - /** - * @var array - */ - public $examples = Generator::UNDEFINED; - - /** - * @inheritdoc - */ - public static $_parents = []; - - /** - * @inheritdoc - */ - public static $_nested = [ - Discriminator::class => 'discriminator', - Items::class => 'items', - Property::class => ['properties', 'property'], - ExternalDocumentation::class => 'externalDocs', - Xml::class => 'xml', - AdditionalProperties::class => 'additionalProperties', - Examples::class => ['examples', 'example'], - Attachable::class => ['attachables'], - ]; -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php deleted file mode 100644 index a6f28c8..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php +++ /dev/null @@ -1,101 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php deleted file mode 100644 index 0fc6fa7..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Attachable.php +++ /dev/null @@ -1,16 +0,0 @@ -|null $schemas - * @param Response[]|null $responses - * @param Parameter[]|null $parameters - * @param RequestBody[]|null $requestBodies - * @param Examples[]|null $examples - * @param Header[]|null $headers - * @param SecurityScheme[]|null $securitySchemes - * @param Link[]|null $links - * @param callable[]|null $callbacks - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $schemas = null, - ?array $responses = null, - ?array $parameters = null, - ?array $requestBodies = null, - ?array $examples = null, - ?array $headers = null, - ?array $securitySchemes = null, - ?array $links = null, - ?array $callbacks = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'callbacks' => $callbacks ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($schemas, $responses, $parameters, $examples, $requestBodies, $headers, $securitySchemes, $links, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php deleted file mode 100644 index 332979e..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Contact.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $url = null, - ?string $email = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'email' => $email ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php deleted file mode 100644 index d2f1c73..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Delete.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $propertyName = null, - ?array $mapping = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'propertyName' => $propertyName ?? Generator::UNDEFINED, - 'mapping' => $mapping ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php deleted file mode 100644 index 9e1a9a0..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Examples.php +++ /dev/null @@ -1,42 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $example = null, - ?string $summary = null, - ?string $description = null, - int|string|array|null $value = null, - ?string $externalValue = null, - string|object|null $ref = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'example' => $example ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'value' => $value ?? Generator::UNDEFINED, - 'externalValue' => $externalValue ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - ]); - if ($attachables) { - $this->merge($attachables); - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php deleted file mode 100644 index f9bfa94..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php +++ /dev/null @@ -1,32 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $description = null, - ?string $url = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'description' => $description ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php deleted file mode 100644 index 80e6ebc..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Flow.php +++ /dev/null @@ -1,38 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $authorizationUrl = null, - ?string $tokenUrl = null, - ?string $refreshUrl = null, - ?string $flow = null, - ?array $scopes = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'authorizationUrl' => $authorizationUrl ?? Generator::UNDEFINED, - 'tokenUrl' => $tokenUrl ?? Generator::UNDEFINED, - 'refreshUrl' => $refreshUrl ?? Generator::UNDEFINED, - 'flow' => $flow ?? Generator::UNDEFINED, - 'scopes' => $scopes ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php deleted file mode 100644 index 81e5ad8..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Get.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $header = null, - ?string $description = null, - ?bool $required = null, - ?Schema $schema = null, - ?bool $deprecated = null, - ?bool $allowEmptyValue = null, - // annotation4 - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'header' => $header ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables, $schema), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php deleted file mode 100644 index 39348f5..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Info.php +++ /dev/null @@ -1,38 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $version = null, - ?string $description = null, - ?string $title = null, - ?string $termsOfService = null, - ?Contact $contact = null, - ?License $license = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'version' => $version ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'termsOfService' => $termsOfService ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($contact, $license, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php deleted file mode 100644 index 00d1d49..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Items.php +++ /dev/null @@ -1,105 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php deleted file mode 100644 index 5472064..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/JsonContent.php +++ /dev/null @@ -1,108 +0,0 @@ - $examples - * @param string[] $required - * @param Property[] $properties - * @param int|float $maximum - * @param int|float $minimum - * @param string[]|int[]|float[] $enum - * @param array $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $examples = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'examples' => $examples ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php deleted file mode 100644 index b929237..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/License.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $identifier = null, - ?string $url = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'identifier' => $identifier ?? Generator::UNDEFINED, - 'url' => $url ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php deleted file mode 100644 index 58eeb0a..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Link.php +++ /dev/null @@ -1,44 +0,0 @@ - $parameters - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $link = null, - ?string $operationRef = null, - string|object|null $ref = null, - ?string $operationId = null, - ?array $parameters = null, - $requestBody = null, - ?string $description = null, - ?Server $server = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'link' => $link ?? Generator::UNDEFINED, - 'operationRef' => $operationRef ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'operationId' => $operationId ?? Generator::UNDEFINED, - 'parameters' => $parameters ?? Generator::UNDEFINED, - 'requestBody' => $requestBody ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($server, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php deleted file mode 100644 index b351510..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/MediaType.php +++ /dev/null @@ -1,38 +0,0 @@ - $examples - * @param array $encoding - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $mediaType = null, - ?Schema $schema = null, - $example = Generator::UNDEFINED, - ?array $examples = null, - ?array $encoding = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'mediaType' => $mediaType ?? Generator::UNDEFINED, - 'example' => $example, - 'encoding' => $encoding ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($schema, $examples, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php deleted file mode 100644 index ce625e2..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OpenApi.php +++ /dev/null @@ -1,41 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string $openapi = self::DEFAULT_VERSION, - ?Info $info = null, - ?array $servers = null, - ?array $security = null, - ?array $tags = null, - ?ExternalDocumentation $externalDocs = null, - ?array $paths = null, - ?Components $components = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'openapi' => $openapi, - 'security' => $security ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($info, $servers, $tags, $externalDocs, $paths, $components, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php deleted file mode 100644 index 7473f3f..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php +++ /dev/null @@ -1,55 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $path = null, - ?string $operationId = null, - ?string $description = null, - ?string $summary = null, - ?array $security = null, - ?array $servers = null, - ?RequestBody $requestBody = null, - ?array $tags = null, - ?array $parameters = null, - ?array $responses = null, - ?array $callbacks = null, - ?ExternalDocumentation $externalDocs = null, - ?bool $deprecated = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'path' => $path ?? Generator::UNDEFINED, - 'operationId' => $operationId ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'security' => $security ?? Generator::UNDEFINED, - 'servers' => $servers ?? Generator::UNDEFINED, - 'tags' => $tags ?? Generator::UNDEFINED, - 'callbacks' => $callbacks ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($requestBody, $responses, $parameters, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php deleted file mode 100644 index 175b962..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Options.php +++ /dev/null @@ -1,13 +0,0 @@ - $examples - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $parameter = null, - ?string $name = null, - ?string $description = null, - ?string $in = null, - ?bool $required = null, - ?bool $deprecated = null, - ?bool $allowEmptyValue = null, - string|object|null $ref = null, - ?Schema $schema = null, - $example = Generator::UNDEFINED, - ?array $examples = null, - ?string $style = null, - ?bool $explode = null, - ?bool $allowReserved = null, - ?array $spaceDelimited = null, - ?array $pipeDelimited = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'parameter' => $parameter ?? Generator::UNDEFINED, - 'name' => $name ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'in' => Generator::isDefault($this->in) ? $in : $this->in, - 'required' => $required ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, - 'ref' => $ref ?? Generator::UNDEFINED, - 'example' => $example, - 'style' => $style ?? Generator::UNDEFINED, - 'explode' => $explode ?? Generator::UNDEFINED, - 'allowReserved' => $allowReserved ?? Generator::UNDEFINED, - 'spaceDelimited' => $spaceDelimited ?? Generator::UNDEFINED, - 'pipeDelimited' => $pipeDelimited ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($schema, $examples, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php deleted file mode 100644 index 1a0a3c8..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Patch.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $path = null, - ?string $summary = null, - ?array $servers = null, - ?array $parameters = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'path' => $path ?? Generator::UNDEFINED, - 'summary' => $summary ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($servers, $parameters, $attachables), - ]); - } -} - -//Missing parameters: get, put, post, delete, options, head, patch, trace, parameters diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php deleted file mode 100644 index 70ccfd6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/PathParameter.php +++ /dev/null @@ -1,13 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $property = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'property' => $property ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php deleted file mode 100644 index 2133102..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Put.php +++ /dev/null @@ -1,13 +0,0 @@ -|JsonContent|XmlContent|null $content - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $request = null, - ?string $description = null, - ?bool $required = null, - array|JsonContent|XmlContent|null $content = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'request' => $request ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($content, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php deleted file mode 100644 index 9106141..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Response.php +++ /dev/null @@ -1,43 +0,0 @@ - $content - * @param Link[] $links - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - int|string $response = null, - ?string $description = null, - ?array $headers = null, - MediaType|JsonContent|XmlContent|array|null $content = null, - ?array $links = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'response' => $response ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($headers, $content, $links, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php deleted file mode 100644 index 5e4bfe5..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Schema.php +++ /dev/null @@ -1,106 +0,0 @@ - $allOf - * @param array $anyOf - * @param array $oneOf - * @param mixed $const - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - $const = Generator::UNDEFINED, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - 'const' => $const, - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php deleted file mode 100644 index f1d8bec..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php +++ /dev/null @@ -1,48 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - string|object|null $ref = null, - ?string $securityScheme = null, - ?string $type = null, - ?string $description = null, - ?string $name = null, - ?string $in = null, - ?string $bearerFormat = null, - ?string $scheme = null, - ?string $openIdConnectUrl = null, - ?array $flows = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'ref' => $ref ?? Generator::UNDEFINED, - 'securityScheme' => $securityScheme ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'name' => $name ?? Generator::UNDEFINED, - 'in' => $in ?? Generator::UNDEFINED, - 'bearerFormat' => $bearerFormat ?? Generator::UNDEFINED, - 'scheme' => $scheme ?? Generator::UNDEFINED, - 'openIdConnectUrl' => $openIdConnectUrl ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($flows, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php deleted file mode 100644 index 337d595..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Server.php +++ /dev/null @@ -1,34 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $url = null, - ?string $description = null, - ?array $variables = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'url' => $url ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($variables, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php deleted file mode 100644 index e378812..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php +++ /dev/null @@ -1,39 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $serverVariable = null, - ?string $description = null, - ?string $default = null, - ?array $enum = null, - ?array $variables = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'serverVariable' => $serverVariable ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'default' => $default ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'variables' => $variables ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php deleted file mode 100644 index 8ef0ef1..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Tag.php +++ /dev/null @@ -1,33 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $description = null, - ?ExternalDocumentation $externalDocs = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php deleted file mode 100644 index aff7fe7..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/Trace.php +++ /dev/null @@ -1,13 +0,0 @@ -|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?string $name = null, - ?string $namespace = null, - ?string $prefix = null, - ?bool $attribute = null, - ?bool $wrapped = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'name' => $name ?? Generator::UNDEFINED, - 'namespace' => $namespace ?? Generator::UNDEFINED, - 'prefix' => $prefix ?? Generator::UNDEFINED, - 'attribute' => $attribute ?? Generator::UNDEFINED, - 'wrapped' => $wrapped ?? Generator::UNDEFINED, - 'x' => $x ?? Generator::UNDEFINED, - 'value' => $this->combine($attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php deleted file mode 100644 index 6126951..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Attributes/XmlContent.php +++ /dev/null @@ -1,108 +0,0 @@ - $examples - * @param string[] $required - * @param int|float $maximum - * @param int|float $minimum - * @param Property[] $properties - * @param string[]|int[]|float[] $enum - * @param array $allOf - * @param array $anyOf - * @param array $oneOf - * @param array|null $x - * @param Attachable[]|null $attachables - */ - public function __construct( - ?array $examples = null, - // schema - string|object|null $ref = null, - ?string $schema = null, - ?string $title = null, - ?string $description = null, - ?array $required = null, - ?array $properties = null, - ?string $type = null, - ?string $format = null, - ?Items $items = null, - ?string $collectionFormat = null, - $default = Generator::UNDEFINED, - $maximum = null, - ?bool $exclusiveMaximum = null, - $minimum = null, - ?bool $exclusiveMinimum = null, - ?int $maxLength = null, - ?int $minLength = null, - ?int $maxItems = null, - ?int $minItems = null, - ?bool $uniqueItems = null, - ?string $pattern = null, - ?array $enum = null, - ?Discriminator $discriminator = null, - ?bool $readOnly = null, - ?bool $writeOnly = null, - ?Xml $xml = null, - ?ExternalDocumentation $externalDocs = null, - $example = Generator::UNDEFINED, - ?bool $nullable = null, - ?bool $deprecated = null, - ?array $allOf = null, - ?array $anyOf = null, - ?array $oneOf = null, - AdditionalProperties|bool|null $additionalProperties = null, - // annotation - ?array $x = null, - ?array $attachables = null - ) { - parent::__construct([ - 'examples' => $examples ?? Generator::UNDEFINED, - // schema - 'ref' => $ref ?? Generator::UNDEFINED, - 'schema' => $schema ?? Generator::UNDEFINED, - 'title' => $title ?? Generator::UNDEFINED, - 'description' => $description ?? Generator::UNDEFINED, - 'required' => $required ?? Generator::UNDEFINED, - 'properties' => $properties ?? Generator::UNDEFINED, - 'type' => $type ?? Generator::UNDEFINED, - 'format' => $format ?? Generator::UNDEFINED, - 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, - 'default' => $default, - 'maximum' => $maximum ?? Generator::UNDEFINED, - 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, - 'minimum' => $minimum ?? Generator::UNDEFINED, - 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, - 'maxLength' => $maxLength ?? Generator::UNDEFINED, - 'minLength' => $minLength ?? Generator::UNDEFINED, - 'maxItems' => $maxItems ?? Generator::UNDEFINED, - 'minItems' => $minItems ?? Generator::UNDEFINED, - 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, - 'pattern' => $pattern ?? Generator::UNDEFINED, - 'enum' => $enum ?? Generator::UNDEFINED, - 'readOnly' => $readOnly ?? Generator::UNDEFINED, - 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, - 'xml' => $xml ?? Generator::UNDEFINED, - 'example' => $example, - 'nullable' => $nullable ?? Generator::UNDEFINED, - 'deprecated' => $deprecated ?? Generator::UNDEFINED, - 'allOf' => $allOf ?? Generator::UNDEFINED, - 'anyOf' => $anyOf ?? Generator::UNDEFINED, - 'oneOf' => $oneOf ?? Generator::UNDEFINED, - 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, - // annotation - 'x' => $x ?? Generator::UNDEFINED, - 'attachables' => $attachables ?? Generator::UNDEFINED, - 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), - ]); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Context.php b/vendor/passkit/vendor/zircote/swagger-php/src/Context.php deleted file mode 100644 index 30ab050..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Context.php +++ /dev/null @@ -1,273 +0,0 @@ - $value) { - $this->$property = $value; - } - $this->_parent = $parent; - - $this->logger = $this->logger ?: new DefaultLogger(); - } - - /** - * Check if a property is set directly on this context and not its parent context. - * - * Example: $c->is('method') or $c->is('class') - */ - public function is(string $type): bool - { - return property_exists($this, $type); - } - - /** - * Check if a property is NOT set directly on this context and but its parent context. - * - * Example: $c->not('method') or $c->not('class') - */ - public function not(string $type): bool - { - return property_exists($this, $type) === false; - } - - /** - * Return the context containing the specified property. - */ - public function with(string $property): ?Context - { - if (property_exists($this, $property)) { - return $this; - } - if ($this->_parent !== null) { - return $this->_parent->with($property); - } - - return null; - } - - /** - * Get the root context. - */ - public function root(): Context - { - if ($this->_parent !== null) { - return $this->_parent->root(); - } - - return $this; - } - - /** - * Check if one of the given version numbers matches the current OpenAPI version. - * - * @param string|array $versions One or more version numbers - */ - public function isVersion($versions): bool - { - if (!$this->version) { - throw new \RuntimeException('Version is only available reliably for validation and serialization'); - } - - $versions = (array) $versions; - $currentVersion = $this->version ?: OpenApi::DEFAULT_VERSION; - - return in_array($currentVersion, $versions); - } - - /** - * Export location for debugging. - * - * @return string Example: "file1.php on line 12" - */ - public function getDebugLocation(): string - { - $location = ''; - if ($this->class && ($this->method || $this->property)) { - $location .= $this->fullyQualifiedName($this->class); - if ($this->method) { - $location .= ($this->static ? '::' : '->') . $this->method . '()'; - } elseif ($this->property) { - $location .= ($this->static ? '::$' : '->') . $this->property; - } - } - if ($this->filename) { - if ($location !== '') { - $location .= ' in '; - } - $location .= $this->filename; - } - if ($this->line) { - if ($location !== '') { - $location .= ' on'; - } - $location .= ' line ' . $this->line; - if ($this->character) { - $location .= ':' . $this->character; - } - } - - return $location; - } - - /** - * Traverse the context tree to get the property value. - */ - public function __get(string $property) - { - if ($this->_parent !== null) { - return $this->_parent->$property; - } - - return null; - } - - public function __toString() - { - return $this->getDebugLocation(); - } - - public function __debugInfo() - { - return ['-' => $this->getDebugLocation()]; - } - - /** - * Create a Context based on the debug_backtrace. - * - * @deprecated - */ - public static function detect(int $index = 0): Context - { - $context = new Context(); - $backtrace = debug_backtrace(); - $position = $backtrace[$index]; - if (isset($position['file'])) { - $context->filename = $position['file']; - } - if (isset($position['line'])) { - $context->line = $position['line']; - } - $caller = isset($backtrace[$index + 1]) ? $backtrace[$index + 1] : null; - if (isset($caller['function'])) { - $context->method = $caller['function']; - if (isset($caller['type']) && $caller['type'] === '::') { - $context->static = true; - } - } - if (isset($caller['class'])) { - $fqn = explode('\\', $caller['class']); - $context->class = array_pop($fqn); - if (count($fqn)) { - $context->namespace = implode('\\', $fqn); - } - } - - // @todo extract namespaces and use statements - return $context; - } - - /** - * Resolve the fully qualified name. - */ - public function fullyQualifiedName(?string $source): string - { - if ($source === null) { - return ''; - } - - if ($this->namespace) { - $namespace = str_replace('\\\\', '\\', '\\' . $this->namespace . '\\'); - } else { - // global namespace - $namespace = '\\'; - } - - $thisSource = $this->class ?? $this->interface ?? $this->trait; - if ($thisSource && strcasecmp($source, $thisSource) === 0) { - return $namespace . $thisSource; - } - $pos = strpos($source, '\\'); - if ($pos !== false) { - if ($pos === 0) { - // Fully qualified name (\Foo\Bar) - return $source; - } - // Qualified name (Foo\Bar) - if ($this->uses) { - foreach ($this->uses as $alias => $aliasedNamespace) { - $alias .= '\\'; - if (strcasecmp(substr($source, 0, strlen($alias)), $alias) === 0) { - // Aliased namespace (use \Long\Namespace as Foo) - return '\\' . $aliasedNamespace . substr($source, strlen($alias) - 1); - } - } - } - } elseif ($this->uses) { - // Unqualified name (Foo) - foreach ($this->uses as $alias => $aliasedNamespace) { - if (strcasecmp($alias, $source) === 0) { - return '\\' . $aliasedNamespace; - } - } - } - - return $namespace . $source; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php b/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php deleted file mode 100644 index e82d565..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Generator.php +++ /dev/null @@ -1,438 +0,0 @@ - */ - public const DEFAULT_ALIASES = ['oa' => 'OpenApi\\Annotations']; - /** @var array */ - public const DEFAULT_NAMESPACES = ['OpenApi\\Annotations\\']; - - /** @var array Map of namespace aliases to be supported by doctrine. */ - protected $aliases; - - /** @var array|null List of annotation namespaces to be autoloaded by doctrine. */ - protected $namespaces; - - /** @var AnalyserInterface|null The configured analyzer. */ - protected $analyser; - - /** @var array */ - protected $config = []; - - /** @var callable[]|null List of configured processors. */ - protected $processors = null; - - /** @var LoggerInterface|null PSR logger. */ - protected $logger = null; - - /** - * OpenApi version override. - * - * If set, it will override the version set in the `OpenApi` annotation. - * - * Due to the order of processing any conditional code using this (via `Context::$version`) - * must come only after the analysis is finished. - * - * @var string|null - */ - protected $version = null; - - private $configStack; - - public function __construct(?LoggerInterface $logger = null) - { - $this->logger = $logger; - - $this->setAliases(self::DEFAULT_ALIASES); - $this->setNamespaces(self::DEFAULT_NAMESPACES); - - // kinda config stack to stay BC... - $this->configStack = new class() { - protected $generator; - - public function push(Generator $generator): void - { - $this->generator = $generator; - if (class_exists(AnnotationRegistry::class, true)) { - // keeping track of &this->generator allows to 'disable' the loader after we are done; - // no unload, unfortunately :/ - $gref = &$this->generator; - AnnotationRegistry::registerLoader( - function (string $class) use (&$gref): bool { - if ($gref) { - foreach ($gref->getNamespaces() as $namespace) { - if (strtolower(substr($class, 0, strlen($namespace))) === strtolower($namespace)) { - $loaded = class_exists($class); - if (!$loaded && $namespace === 'OpenApi\\Annotations\\') { - if (in_array(strtolower(substr($class, 20)), ['definition', 'path'])) { - // Detected an 2.x annotation? - throw new \Exception('The annotation @SWG\\' . substr($class, 20) . '() is deprecated. Found in ' . Generator::$context . "\nFor more information read the migration guide: https://github.com/zircote/swagger-php/blob/master/docs/Migrating-to-v3.md"); - } - } - - return $loaded; - } - } - } - - return false; - } - ); - } - } - - public function pop(): void - { - $this->generator = null; - } - }; - } - - public static function isDefault($value): bool - { - return $value === Generator::UNDEFINED; - } - - public function getAliases(): array - { - return $this->aliases; - } - - public function addAlias(string $alias, string $namespace): Generator - { - $this->aliases[$alias] = $namespace; - - return $this; - } - - public function setAliases(array $aliases): Generator - { - $this->aliases = $aliases; - - return $this; - } - - public function getNamespaces(): ?array - { - return $this->namespaces; - } - - public function addNamespace(string $namespace): Generator - { - $namespaces = (array) $this->getNamespaces(); - $namespaces[] = $namespace; - - return $this->setNamespaces(array_unique($namespaces)); - } - - public function setNamespaces(?array $namespaces): Generator - { - $this->namespaces = $namespaces; - - return $this; - } - - public function getAnalyser(): AnalyserInterface - { - $this->analyser = $this->analyser ?: new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); - $this->analyser->setGenerator($this); - - return $this->analyser; - } - - public function setAnalyser(?AnalyserInterface $analyser): Generator - { - $this->analyser = $analyser; - - return $this; - } - - public function getDefaultConfig(): array - { - return [ - 'operationId' => [ - 'hash' => true, - ], - ]; - } - - public function getConfig(): array - { - return $this->config + $this->getDefaultConfig(); - } - - /** - * Set generator and/or processor config. - * - * @param array $config - */ - public function setConfig(array $config): Generator - { - $this->config = $config + $this->config; - - return $this; - } - - /** - * @return callable[] - */ - public function getProcessors(): array - { - if (null === $this->processors) { - $this->processors = [ - new Processors\DocBlockDescriptions(), - new Processors\MergeIntoOpenApi(), - new Processors\MergeIntoComponents(), - new Processors\ExpandClasses(), - new Processors\ExpandInterfaces(), - new Processors\ExpandTraits(), - new Processors\ExpandEnums(), - new Processors\AugmentSchemas(), - new Processors\AugmentProperties(), - new Processors\BuildPaths(), - new Processors\AugmentParameters(), - new Processors\AugmentRefs(), - new Processors\MergeJsonContent(), - new Processors\MergeXmlContent(), - new Processors\OperationId(), - new Processors\CleanUnmerged(), - ]; - } - - $config = $this->getConfig(); - foreach ($this->processors as $processor) { - $rc = new \ReflectionClass($processor); - - // apply config - $processorKey = lcfirst($rc->getShortName()); - if (array_key_exists($processorKey, $config)) { - foreach ($config[$processorKey] as $name => $value) { - $setter = 'set' . ucfirst($name); - if (method_exists($processor, $setter)) { - $processor->{$setter}($value); - } - } - } - } - - return $this->processors; - } - - /** - * @param null|callable[] $processors - */ - public function setProcessors(?array $processors): Generator - { - $this->processors = $processors; - - return $this; - } - - public function addProcessor(callable $processor): Generator - { - $processors = $this->getProcessors(); - $processors[] = $processor; - $this->setProcessors($processors); - - return $this; - } - - public function removeProcessor(callable $processor, bool $silent = false): Generator - { - $processors = $this->getProcessors(); - if (false === ($key = array_search($processor, $processors, true))) { - if ($silent) { - return $this; - } - throw new \InvalidArgumentException('Processor not found'); - } - unset($processors[$key]); - $this->setProcessors($processors); - - return $this; - } - - /** - * Update/replace an existing processor with a new one. - * - * @param callable $processor The new processor - * @param null|callable $matcher Optional matcher callable to identify the processor to replace. - * If none given, matching is based on the processors class. - */ - public function updateProcessor(callable $processor, ?callable $matcher = null): Generator - { - $matcher = $matcher ?: function ($other) use ($processor): bool { - $otherClass = get_class($other); - - return $processor instanceof $otherClass; - }; - - $processors = array_map(function ($other) use ($processor, $matcher) { - return $matcher($other) ? $processor : $other; - }, $this->getProcessors()); - $this->setProcessors($processors); - - return $this; - } - - public function getLogger(): ?LoggerInterface - { - return $this->logger ?: new DefaultLogger(); - } - - public function getVersion(): ?string - { - return $this->version; - } - - public function setVersion(?string $version): Generator - { - $this->version = $version; - - return $this; - } - - public static function scan(iterable $sources, array $options = []): ?OpenApi - { - // merge with defaults - $config = $options + [ - 'aliases' => self::DEFAULT_ALIASES, - 'namespaces' => self::DEFAULT_NAMESPACES, - 'analyser' => null, - 'analysis' => null, - 'processors' => null, - 'logger' => null, - 'validate' => true, - 'version' => null, - ]; - - return (new Generator($config['logger'])) - ->setVersion($config['version']) - ->setAliases($config['aliases']) - ->setNamespaces($config['namespaces']) - ->setAnalyser($config['analyser']) - ->setProcessors($config['processors']) - ->generate($sources, $config['analysis'], $config['validate']); - } - - /** - * Run code in the context of this generator. - * - * @param callable $callable Callable in the form of - * `function(Generator $generator, Analysis $analysis, Context $context): mixed` - * - * @return mixed the result of the `callable` - */ - public function withContext(callable $callable) - { - $rootContext = new Context([ - 'version' => $this->getVersion(), - 'logger' => $this->getLogger(), - ]); - $analysis = new Analysis([], $rootContext); - - $this->configStack->push($this); - try { - return $callable($this, $analysis, $rootContext); - } finally { - $this->configStack->pop(); - } - } - - /** - * Generate OpenAPI spec by scanning the given source files. - * - * @param iterable $sources PHP source files to scan. - * Supported sources: - * * string - file / directory name - * * \SplFileInfo - * * \Symfony\Component\Finder\Finder - * @param null|Analysis $analysis custom analysis instance - * @param bool $validate flag to enable/disable validation of the returned spec - */ - public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): ?OpenApi - { - $rootContext = new Context([ - 'version' => $this->getVersion(), - 'logger' => $this->getLogger(), - ]); - $analysis = $analysis ?: new Analysis([], $rootContext); - - $this->configStack->push($this); - try { - $this->scanSources($sources, $analysis, $rootContext); - - // post processing - $analysis->process($this->getProcessors()); - - if ($analysis->openapi) { - $analysis->openapi->openapi = $this->version ?: $analysis->openapi->openapi; - $rootContext->version = $analysis->openapi->openapi; - } - - // validation - if ($validate) { - $analysis->validate(); - } - } finally { - $this->configStack->pop(); - } - - return $analysis->openapi; - } - - protected function scanSources(iterable $sources, Analysis $analysis, Context $rootContext): void - { - $analyser = $this->getAnalyser(); - - foreach ($sources as $source) { - if (is_iterable($source)) { - $this->scanSources($source, $analysis, $rootContext); - } else { - $resolvedSource = $source instanceof \SplFileInfo ? $source->getPathname() : realpath($source); - if (!$resolvedSource) { - $rootContext->logger->warning(sprintf('Skipping invalid source: %s', $source)); - continue; - } - if (is_dir($resolvedSource)) { - $this->scanSources(Util::finder($resolvedSource), $analysis, $rootContext); - } else { - $analysis->addAnalysis($analyser->fromFile($resolvedSource, $rootContext)); - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php deleted file mode 100644 index 94e9406..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php +++ /dev/null @@ -1,95 +0,0 @@ -debug = $debug; - } - - public function loggedMessageAboveNotice(): bool - { - return $this->loggedMessageAboveNotice; - } - - /** - * @param array $context additional details; supports custom `prefix` and `exception` - */ - public function log($level, $message, array $context = []): void - { - $prefix = ''; - $color = ''; - // level adjustments - switch ($level) { - case LogLevel::DEBUG: - if (!$this->debug) { - return; - } - // no break - case LogLevel::WARNING: - $prefix = $context['prefix'] ?? 'Warning: '; - $color = static::COLOR_WARNING; - break; - case LogLevel::ERROR: - $prefix = $context['prefix'] ?? 'Error: '; - $color = static::COLOR_ERROR; - break; - } - $stop = !empty($color) ? static::COLOR_STOP : ''; - - if (!in_array($level, self::LOG_LEVELS_UP_TO_NOTICE, true)) { - $this->loggedMessageAboveNotice = true; - } - - /** @var ?\Exception $exception */ - $exception = $context['exception'] ?? null; - if ($message instanceof \Exception) { - $exception = $message; - $message = $exception->getMessage(); - } - - $logLine = sprintf('%s%s%s%s', $color, $prefix, $message, $stop); - error_log($logLine); - - if ($this->debug) { - if ($exception) { - error_log($exception->getTraceAsString()); - } elseif (!empty($logLine)) { - $stack = explode(PHP_EOL, (new \Exception())->getTraceAsString()); - // self - array_shift($stack); - // AbstractLogger - array_shift($stack); - foreach ($stack as $line) { - error_log($line); - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php b/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php deleted file mode 100644 index d4118f0..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php +++ /dev/null @@ -1,33 +0,0 @@ -getMessage(); - } - - if (in_array($level, [LogLevel::NOTICE, LogLevel::INFO])) { - $error_level = E_USER_NOTICE; - } else { - $error_level = E_USER_WARNING; - } - - trigger_error($message, $error_level); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php deleted file mode 100644 index 2949702..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php +++ /dev/null @@ -1,94 +0,0 @@ -augmentOperationParameters = $augmentOperationParameters; - } - - public function isAugmentOperationParameters(): bool - { - return $this->augmentOperationParameters; - } - - public function setAugmentOperationParameters(bool $augmentOperationParameters): void - { - $this->augmentOperationParameters = $augmentOperationParameters; - } - - public function __invoke(Analysis $analysis) - { - $this->augmentSharedParameters($analysis); - if ($this->augmentOperationParameters) { - $this->augmentOperationParameters($analysis); - } - } - - /** - * Use the parameter->name as key field (parameter->parameter) when used as reusable component - * (openapi->components->parameters). - */ - protected function augmentSharedParameters(Analysis $analysis) - { - if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) { - $keys = []; - $parametersWithoutKey = []; - foreach ($analysis->openapi->components->parameters as $parameter) { - if (!Generator::isDefault($parameter->parameter)) { - $keys[$parameter->parameter] = $parameter; - } else { - $parametersWithoutKey[] = $parameter; - } - } - foreach ($parametersWithoutKey as $parameter) { - if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) { - $parameter->parameter = $parameter->name; - $keys[$parameter->parameter] = $parameter; - } - } - } - } - - protected function augmentOperationParameters(Analysis $analysis) - { - /** @var Operation[] $operations */ - $operations = $analysis->getAnnotationsOfType(Operation::class); - - foreach ($operations as $operation) { - if (!Generator::isDefault($operation->parameters)) { - $tags = []; - $this->extractContent($operation->_context->comment, $tags); - if (array_key_exists('param', $tags)) { - foreach ($tags['param'] as $name => $details) { - foreach ($operation->parameters as $parameter) { - if ($parameter->name == $name) { - if (Generator::isDefault($parameter->description) && $details['description']) { - $parameter->description = $details['description']; - } - } - } - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php deleted file mode 100644 index 9f3e7fc..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php +++ /dev/null @@ -1,197 +0,0 @@ -openapi->components) && !Generator::isDefault($analysis->openapi->components->schemas)) { - foreach ($analysis->openapi->components->schemas as $schema) { - if (!Generator::isDefault($schema->schema)) { - $refKey = $this->toRefKey($schema->_context, $schema->_context->class); - $refs[$refKey] = Components::ref($schema); - } - } - } - - /** @var Property[] $properties */ - $properties = $analysis->getAnnotationsOfType(Property::class); - - foreach ($properties as $property) { - $context = $property->_context; - - if (Generator::isDefault($property->property)) { - $property->property = $context->property; - } - - if (!Generator::isDefault($property->ref)) { - continue; - } - - $comment = str_replace("\r\n", "\n", (string) $context->comment); - preg_match('/@var\s+(?[^\s]+)([ \t])?(?.+)?$/im', $comment, $varMatches); - - if (Generator::isDefault($property->type)) { - $this->augmentType($analysis, $property, $context, $refs, $varMatches); - } else { - Util::mapNativeType($property, $property->type); - } - - if (Generator::isDefault($property->description) && isset($varMatches['description'])) { - $property->description = trim($varMatches['description']); - } - if (Generator::isDefault($property->description) && $this->isRoot($property)) { - $property->description = $this->extractContent($context->comment); - } - - if (Generator::isDefault($property->example) && preg_match('/@example\s+([ \t])?(?.+)?$/im', $comment, $varMatches)) { - $property->example = $varMatches['example']; - } - } - } - - protected function toRefKey(Context $context, ?string $name): string - { - $fqn = strtolower($context->fullyQualifiedName($name)); - - return ltrim($fqn, '\\'); - } - - protected function augmentType(Analysis $analysis, Property $property, Context $context, array $refs, array $varMatches): void - { - // docblock typehints - if (isset($varMatches['type'])) { - $allTypes = strtolower(trim($varMatches['type'])); - - if ($this->isNullable($allTypes) && Generator::isDefault($property->nullable)) { - $property->nullable = true; - } - - $allTypes = $this->stripNull($allTypes); - preg_match('/^([^\[]+)(.*$)/', $allTypes, $typeMatches); - $type = $typeMatches[1]; - - // finalise property type/ref - if (!Util::mapNativeType($property, $type)) { - $refKey = $this->toRefKey($context, $type); - if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { - $property->ref = $refs[$refKey]; - } - } - - // ok, so we possibly have a type or ref - if (!Generator::isDefault($property->ref) && $typeMatches[2] === '' && $property->nullable) { - $refKey = $this->toRefKey($context, $type); - $property->oneOf = [ - $schema = new Schema([ - 'ref' => $refs[$refKey], - '_context' => $property->_context, - '_aux' => true, - ]), - ]; - $analysis->addAnnotation($schema, $schema->_context); - $property->nullable = true; - } elseif ($typeMatches[2] === '[]') { - if (Generator::isDefault($property->items)) { - $property->items = $items = new Items( - [ - 'type' => $property->type, - '_context' => new Context(['generated' => true], $context), - '_aux' => true, - ] - ); - $analysis->addAnnotation($items, $items->_context); - if (!Generator::isDefault($property->ref)) { - $property->items->ref = $property->ref; - $property->ref = Generator::UNDEFINED; - } - $property->type = 'array'; - } - } - } - - // native typehints - if ($context->type && !Generator::isDefault($context->type)) { - if ($context->nullable === true) { - $property->nullable = true; - } - $type = strtolower($context->type); - if (!Util::mapNativeType($property, $type)) { - $refKey = $this->toRefKey($context, $type); - if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { - $this->applyRef($analysis, $property, $refs[$refKey]); - } else { - if ($typeSchema = $analysis->getSchemaForSource($context->type)) { - if (Generator::isDefault($property->format)) { - $property->ref = Components::ref($typeSchema); - $property->type = Generator::UNDEFINED; - } - } - } - } - } - - if (!Generator::isDefault($property->const) && Generator::isDefault($property->type)) { - if (!Util::mapNativeType($property, gettype($property->const))) { - $property->type = Generator::UNDEFINED; - } - } - } - - protected function isNullable(string $typeDescription): bool - { - return in_array('null', explode('|', strtolower($typeDescription))); - } - - protected function stripNull(string $typeDescription): string - { - if (strpos($typeDescription, '|') === false) { - return $typeDescription; - } - $types = []; - foreach (explode('|', $typeDescription) as $type) { - if (strtolower($type) === 'null') { - continue; - } - $types[] = $type; - } - - return implode('|', $types); - } - - protected function applyRef(Analysis $analysis, Property $property, string $ref): void - { - if ($property->nullable === true) { - $property->oneOf = [ - $schema = new Schema([ - 'ref' => $ref, - '_context' => $property->_context, - '_aux' => true, - ]), - ]; - $analysis->addAnnotation($schema, $schema->_context); - } else { - $property->ref = $ref; - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php deleted file mode 100644 index adfb898..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php +++ /dev/null @@ -1,50 +0,0 @@ -getAnnotationsOfType(Schema::class); - - // ref rewriting - $updatedRefs = []; - foreach ($schemas as $schema) { - if ($schema->allOf!== Generator::UNDEFINED) { - // do we have to keep track of properties refs that need updating? - foreach ($schema->allOf as $ii => $allOfSchema) { - if ($allOfSchema->properties!== Generator::UNDEFINED) { - $updatedRefs[Components::ref($schema->schema . '/properties', false)] = Components::ref($schema->schema . '/allOf/' . $ii . '/properties', false); - break; - } - } - } - } - - if ($updatedRefs) { - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, 'ref') && $annotation->ref !== Generator::UNDEFINED && $annotation->ref !== null) { - foreach ($updatedRefs as $origRef => $updatedRef) { - if (0 === strpos($annotation->ref, $origRef)) { - $annotation->ref = str_replace($origRef, $updatedRef, $annotation->ref); - } - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php deleted file mode 100644 index 0e1186c..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php +++ /dev/null @@ -1,137 +0,0 @@ -getAnnotationsOfType(Schema::class); - - // Use the class names for @OA\Schema() - foreach ($schemas as $schema) { - if (Generator::isDefault($schema->schema)) { - if ($schema->_context->is('class')) { - $schema->schema = $schema->_context->class; - } elseif ($schema->_context->is('interface')) { - $schema->schema = $schema->_context->interface; - } elseif ($schema->_context->is('trait')) { - $schema->schema = $schema->_context->trait; - } elseif ($schema->_context->is('enum')) { - $schema->schema = $schema->_context->enum; - } - } - } - - // Merge unmerged @OA\Property annotations into the @OA\Schema of the class - $unmergedProperties = $analysis->unmerged()->getAnnotationsOfType(Property::class); - foreach ($unmergedProperties as $property) { - if ($property->_context->nested) { - continue; - } - - $schemaContext = $property->_context->with('class') - ?: $property->_context->with('interface') - ?: $property->_context->with('trait') - ?: $property->_context->with('enum'); - if ($schemaContext->annotations) { - foreach ($schemaContext->annotations as $annotation) { - if ($annotation instanceof Schema) { - if ($annotation->_context->nested) { - // we shouldn't merge property into nested schemas - continue; - } - - if (!Generator::isDefault($annotation->allOf)) { - $schema = null; - foreach ($annotation->allOf as $nestedSchema) { - if (!Generator::isDefault($nestedSchema->ref)) { - continue; - } - - $schema = $nestedSchema; - } - - if ($schema === null) { - $schema = new Schema([ - '_context' => $annotation->_context, - '_aux' => true, - ]); - $analysis->addAnnotation($schema, $schema->_context); - $annotation->allOf[] = $schema; - } - - $schema->merge([$property], true); - break; - } - - $annotation->merge([$property], true); - break; - } - } - } - } - - // set schema type based on various properties - foreach ($schemas as $schema) { - if (Generator::isDefault($schema->type)) { - if (is_array($schema->properties) && count($schema->properties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->additionalProperties) && count($schema->additionalProperties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->patternProperties) && count($schema->patternProperties) > 0) { - $schema->type = 'object'; - } elseif (is_array($schema->propertyNames) && count($schema->propertyNames) > 0) { - $schema->type = 'object'; - } - } else { - if ($typeSchema = $analysis->getSchemaForSource($schema->type)) { - if (Generator::isDefault($schema->format)) { - $schema->ref = Components::ref($typeSchema); - $schema->type = Generator::UNDEFINED; - } - } - } - } - - // move schema properties into allOf if both exist - foreach ($schemas as $schema) { - if (!Generator::isDefault($schema->properties) && !Generator::isDefault($schema->allOf)) { - $allOfPropertiesSchema = null; - foreach ($schema->allOf as $allOfSchema) { - if (!Generator::isDefault($allOfSchema->properties)) { - $allOfPropertiesSchema = $allOfSchema; - break; - } - } - if (!$allOfPropertiesSchema) { - $allOfPropertiesSchema = new Schema([ - 'properties' => [], - '_context' => $schema->_context, - '_aux' => true, - ]); - $analysis->addAnnotation($allOfPropertiesSchema, $allOfPropertiesSchema->_context); - $schema->allOf[] = $allOfPropertiesSchema; - } - $allOfPropertiesSchema->properties = array_merge($allOfPropertiesSchema->properties, $schema->properties); - $schema->properties = Generator::UNDEFINED; - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php deleted file mode 100644 index 4688b96..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/BuildPaths.php +++ /dev/null @@ -1,62 +0,0 @@ -paths using the detected `@OA\PathItem` and `@OA\Operation` (`@OA\Get`, `@OA\Post`, etc). - */ -class BuildPaths -{ - public function __invoke(Analysis $analysis) - { - $paths = []; - // Merge @OA\PathItems with the same path. - if (!Generator::isDefault($analysis->openapi->paths)) { - foreach ($analysis->openapi->paths as $annotation) { - if (empty($annotation->path)) { - $annotation->_context->logger->warning($annotation->identity() . ' is missing required property "path" in ' . $annotation->_context); - } elseif (isset($paths[$annotation->path])) { - $paths[$annotation->path]->mergeProperties($annotation); - $analysis->annotations->detach($annotation); - } else { - $paths[$annotation->path] = $annotation; - } - } - } - - /** @var Operation[] $operations */ - $operations = $analysis->unmerged()->getAnnotationsOfType(Operation::class); - - // Merge @OA\Operations into existing @OA\PathItems or create a new one. - foreach ($operations as $operation) { - if ($operation->path) { - if (empty($paths[$operation->path])) { - $paths[$operation->path] = $pathItem = new PathItem( - [ - 'path' => $operation->path, - '_context' => new Context(['generated' => true], $operation->_context), - '_aux' => true, - ] - ); - $analysis->addAnnotation($pathItem, $pathItem->_context); - } - if ($paths[$operation->path]->merge([$operation])) { - $operation->_context->logger->warning('Unable to merge ' . $operation->identity() . ' in ' . $operation->_context); - } - } - } - if ($paths) { - $analysis->openapi->paths = array_values($paths); - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php deleted file mode 100644 index 20c12a6..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php +++ /dev/null @@ -1,35 +0,0 @@ -split(); - $merged = $split->merged->annotations; - $unmerged = $split->unmerged->annotations; - - /** @var AbstractAnnotation $annotation */ - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, '_unmerged')) { - foreach ($annotation->_unmerged as $i => $item) { - if ($merged->contains($item)) { - unset($annotation->_unmerged[$i]); // Property was merged - } - } - } - } - $analysis->openapi->_unmerged = []; - foreach ($unmerged as $annotation) { - $analysis->openapi->_unmerged[] = $annotation; - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php deleted file mode 100644 index adadf1b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php +++ /dev/null @@ -1,110 +0,0 @@ -openapi->components)) { - return; - } - - // allow multiple runs to catch nested dependencies - for ($ii = 0; $ii < 10; ++$ii) { - if (!$this->cleanup($analysis)) { - break; - } - } - } - - protected function cleanup(Analysis $analysis): bool - { - $usedRefs = []; - foreach ($analysis->annotations as $annotation) { - if (property_exists($annotation, 'ref') && !Generator::isDefault($annotation->ref) && $annotation->ref !== null) { - $usedRefs[$annotation->ref] = $annotation->ref; - } - foreach (['allOf', 'anyOf', 'oneOff'] as $sub) { - if (property_exists($annotation, $sub) && !Generator::isDefault($annotation->{$sub})) { - foreach ($annotation->{$sub} as $subElem) { - if (is_object($subElem) && property_exists($subElem, 'ref') && !Generator::isDefault($subElem->ref) && $subElem->ref !== null) { - $usedRefs[$subElem->ref] = $subElem->ref; - } - } - } - } - if ($annotation instanceof OpenApi || $annotation instanceof Operation) { - if (!Generator::isDefault($annotation->security)) { - foreach ($annotation->security as $security) { - foreach (array_keys($security) as $securityName) { - $ref = Components::COMPONENTS_PREFIX . 'securitySchemes/' . $securityName; - $usedRefs[$ref] = $ref; - } - } - } - } - } - - $unusedRefs = []; - foreach (Components::$_nested as $nested) { - if (2 == count($nested)) { - // $nested[1] is the name of the property that holds the component name - [$componentType, $nameProperty] = $nested; - if (!Generator::isDefault($analysis->openapi->components->{$componentType})) { - foreach ($analysis->openapi->components->{$componentType} as $component) { - $ref = Components::ref($component); - if (!in_array($ref, $usedRefs)) { - $unusedRefs[$ref] = [$ref, $nameProperty]; - } - } - } - } - } - - $detachNested = function (Analysis $analysis, AbstractAnnotation $annotation, callable $detachNested): void { - foreach ($annotation::$_nested as $nested) { - $nestedKey = ((array) $nested)[0]; - if (!Generator::isDefault($annotation->{$nestedKey})) { - if (is_array($annotation->{$nestedKey})) { - foreach ($annotation->{$nestedKey} as $elem) { - if ($elem instanceof AbstractAnnotation) { - $detachNested($analysis, $elem, $detachNested); - } - } - } elseif ($annotation->{$nestedKey} instanceof AbstractAnnotation) { - $analysis->annotations->detach($annotation->{$nestedKey}); - } - } - } - $analysis->annotations->detach($annotation); - }; - - // remove unused - foreach ($unusedRefs as $refDetails) { - [$ref, $nameProperty] = $refDetails; - [$hash, $components, $componentType, $name] = explode('/', $ref); - foreach ($analysis->openapi->components->{$componentType} as $ii => $component) { - if ($component->{$nameProperty} == $name) { - $annotation = $analysis->openapi->components->{$componentType}[$ii]; - $detachNested($analysis, $annotation, $detachNested); - unset($analysis->openapi->components->{$componentType}[$ii]); - } - } - } - - return 0 != count($unusedRefs); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php deleted file mode 100644 index 7f4f845..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php +++ /dev/null @@ -1,104 +0,0 @@ -annotations as $annotation) { - if (property_exists($annotation, '_context') === false) { - // only annotations with context - continue; - } - - if (!$this->isRoot($annotation)) { - // only top-level annotations - continue; - } - - $hasSummary = property_exists($annotation, 'summary'); - $hasDescription = property_exists($annotation, 'description'); - if (!$hasSummary && !$hasDescription) { - continue; - } - - if ($hasSummary && $hasDescription) { - $this->summaryAndDescription($annotation); - } elseif ($hasDescription) { - $this->description($annotation); - } - } - } - - /** - * @param Operation|Property|Parameter|Schema $annotation - */ - protected function description(AbstractAnnotation $annotation): void - { - if (!Generator::isDefault($annotation->description)) { - if ($annotation->description === null) { - $annotation->description = Generator::UNDEFINED; - } - - return; - } - - $annotation->description = $this->extractContent($annotation->_context->comment); - } - - /** - * @param Operation|Property|Parameter|Schema $annotation - */ - protected function summaryAndDescription(AbstractAnnotation $annotation): void - { - $ignoreSummary = !Generator::isDefault($annotation->summary); - $ignoreDescription = !Generator::isDefault($annotation->description); - if ($annotation->summary === null) { - $ignoreSummary = true; - $annotation->summary = Generator::UNDEFINED; - } - if ($annotation->description === null) { - $annotation->description = Generator::UNDEFINED; - $ignoreDescription = true; - } - if ($ignoreSummary && $ignoreDescription) { - return; - } - if ($ignoreSummary) { - $annotation->description = $this->extractContent($annotation->_context->comment); - } elseif ($ignoreDescription) { - $annotation->summary = $this->extractContent($annotation->_context->comment); - } else { - $annotation->summary = $this->extractSummary($annotation->_context->comment); - $annotation->description = $this->extractDescription($annotation->_context->comment); - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php deleted file mode 100644 index 650b024..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/DocblockTrait.php +++ /dev/null @@ -1,170 +0,0 @@ -_context) { - return true; - } - - if (1 == count($annotation->_context->annotations)) { - return true; - } - - // find best match - $matchPriorityMap = [ - Operation::class => false, - Property::class => false, - Parameter::class => false, - AnnotationSchema::class => true, - AttributeSchema::class => true, - ]; - foreach ($matchPriorityMap as $className => $strict) { - foreach ($annotation->_context->annotations as $contextAnnotation) { - if ($strict) { - if ($className == get_class($contextAnnotation)) { - return $annotation === $contextAnnotation; - } - } else { - if ($contextAnnotation instanceof $className) { - return $annotation === $contextAnnotation; - } - } - } - } - - return false; - } - - protected function handleTag(string $line, ?array &$tags = null): void - { - if (null === $tags) { - return; - } - - // split of tag name - $token = preg_split("@[\s+ ]@u", $line, 2); - if (2 == count($token)) { - $tag = substr($token[0], 1); - $tail = $token[1]; - if (!array_key_exists($tag, $tags)) { - $tags[$tag] = []; - } - - if (false !== ($dpos = strpos($tail, '$'))) { - $type = trim(substr($tail, 0, $dpos)); - $token = preg_split("@[\s+ ]@u", substr($tail, $dpos), 2); - $name = trim(substr($token[0], 1)); - $description = 2 == count($token) ? trim($token[1]) : null; - - $tags[$tag][$name] = [ - 'type' => $type, - 'description' => $description, - ]; - } - } - } - - /** - * The text contents of the phpdoc comment (excl. tags). - */ - public function extractContent(?string $docblock, ?array &$tags = null): string - { - if (Generator::isDefault($docblock)) { - return Generator::UNDEFINED; - } - - $comment = preg_split('/(\n|\r\n)/', (string) $docblock); - $comment[0] = preg_replace('/[ \t]*\\/\*\*/', '', $comment[0]); // strip '/**' - $i = count($comment) - 1; - $comment[$i] = preg_replace('/\*\/[ \t]*$/', '', $comment[$i]); // strip '*/' - $lines = []; - $append = false; - $skip = false; - foreach ($comment as $line) { - $line = ltrim($line, "\t *"); - if (substr($line, 0, 1) === '@') { - $this->handleTag($line, $tags); - $skip = true; - } - if ($skip) { - continue; - } - if ($append) { - $i = count($lines) - 1; - $lines[$i] = substr($lines[$i], 0, -1) . $line; - } else { - $lines[] = $line; - } - $append = (substr($line, -1) === '\\'); - } - $description = trim(implode("\n", $lines)); - if ($description === '') { - return Generator::UNDEFINED; - } - - return $description; - } - - /** - * A short piece of text, usually one line, providing the basic function of the associated element. - */ - public function extractSummary(?string $docblock): string - { - if (!$content = $this->extractContent($docblock)) { - return Generator::UNDEFINED; - } - $lines = preg_split('/(\n|\r\n)/', $content); - $summary = ''; - foreach ($lines as $line) { - $summary .= $line . "\n"; - if ($line === '' || substr($line, -1) === '.') { - return trim($summary); - } - } - $summary = trim($summary); - if ($summary === '') { - return Generator::UNDEFINED; - } - - return $summary; - } - - /** - * An optional longer piece of text providing more details on the associated element’s function. - * - * This is very useful when working with a complex element. - */ - public function extractDescription(?string $docblock): string - { - $summary = $this->extractSummary($docblock); - if (!$summary) { - return Generator::UNDEFINED; - } - - $description = ''; - if (false !== ($substr = substr($this->extractContent($docblock), strlen($summary)))) { - $description = trim($substr); - } - - return $description ?: Generator::UNDEFINED; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php deleted file mode 100644 index 7e729de..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php +++ /dev/null @@ -1,49 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class')) { - $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); - $existing = []; - foreach ($ancestors as $ancestor) { - $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); - if ($ancestorSchema) { - $refPath = !Generator::isDefault($ancestorSchema->schema) ? $ancestorSchema->schema : $ancestor['class']; - $this->inheritFrom($analysis, $schema, $ancestorSchema, $refPath, $ancestor['context']); - - // one ancestor is enough - break; - } else { - $this->mergeAnnotations($schema, $ancestor, $existing); - $this->mergeMethods($schema, $ancestor, $existing); - $this->mergeProperties($schema, $ancestor, $existing); - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php deleted file mode 100644 index e7cf895..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php +++ /dev/null @@ -1,57 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('enum')) { - $source = $schema->_context->enum; - $re = new \ReflectionEnum($schema->_context->fullyQualifiedName($source)); - $schema->schema = !Generator::isDefault($schema->schema) ? $schema->schema : $re->getShortName(); - $type = 'string'; - $schemaType = 'string'; - if ($re->isBacked() && ($backingType = $re->getBackingType()) && method_exists($backingType, 'getName')) { - if (Generator::isDefault($schema->type)) { - $type = $backingType->getName(); - } else { - $type = $schema->type; - $schemaType = $schema->type; - } - } - $schema->enum = array_map(function ($case) use ($re, $schemaType, $type) { - if ($re->isBacked() && $type === $schemaType) { - return $case->getBackingValue(); - } - - return $case->name; - }, $re->getCases()); - Util::mapNativeType($schema, $type); - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php deleted file mode 100644 index 0c78f8d..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php +++ /dev/null @@ -1,57 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class')) { - $className = $schema->_context->fullyQualifiedName($schema->_context->class); - $interfaces = $analysis->getInterfacesOfClass($className, true); - - if (class_exists($className) && ($parent = get_parent_class($className)) && ($inherited = array_keys(class_implements($parent)))) { - // strip interfaces we inherit from ancestor - foreach (array_keys($interfaces) as $interface) { - if (in_array(ltrim($interface, '\\'), $inherited)) { - unset($interfaces[$interface]); - } - } - } - - $existing = []; - foreach ($interfaces as $interface) { - $interfaceName = $interface['context']->fullyQualifiedName($interface['interface']); - $interfaceSchema = $analysis->getSchemaForSource($interfaceName); - if ($interfaceSchema) { - $refPath = !Generator::isDefault($interfaceSchema->schema) ? $interfaceSchema->schema : $interface['interface']; - $this->inheritFrom($analysis, $schema, $interfaceSchema, $refPath, $interface['context']); - } else { - $this->mergeAnnotations($schema, $interface, $existing); - $this->mergeMethods($schema, $interface, $existing); - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php deleted file mode 100644 index 952ef0b..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php +++ /dev/null @@ -1,49 +0,0 @@ -getAnnotationsOfType([AnnotationSchema::class, AttributeSchema::class], true); - - foreach ($schemas as $schema) { - if ($schema->_context->is('class') || $schema->_context->is('trait')) { - $source = $schema->_context->class ?: $schema->_context->trait; - $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($source), true); - $existing = []; - foreach ($traits as $trait) { - $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); - if ($traitSchema) { - $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; - $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); - } else { - if ($schema->_context->is('class')) { - $this->mergeAnnotations($schema, $trait, $existing); - $this->mergeMethods($schema, $trait, $existing); - $this->mergeProperties($schema, $trait, $existing); - } - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php deleted file mode 100644 index e84e9bf..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php +++ /dev/null @@ -1,34 +0,0 @@ -openapi->components; - if (Generator::isDefault($components)) { - $components = new Components(['_context' => new Context(['generated' => true], $analysis->context)]); - } - - foreach ($analysis->annotations as $annotation) { - if (Components::matchNested(get_class($annotation)) && $annotation->_context->is('nested') === false) { - // A top level annotation. - $components->merge([$annotation], true); - $analysis->openapi->components = $components; - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php deleted file mode 100644 index a0d2279..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php +++ /dev/null @@ -1,56 +0,0 @@ -openapi) { - $context = new Context([], $analysis->context); - $analysis->addAnnotation(new OpenApi(['_context' => $context]), $context); - } - $openapi = $analysis->openapi; - $openapi->_analysis = $analysis; - - // Merge annotations into the target openapi - $merge = []; - /** @var AbstractAnnotation $annotation */ - foreach ($analysis->annotations as $annotation) { - if ($annotation === $openapi) { - continue; - } - if ($annotation instanceof OpenApi) { - $paths = $annotation->paths; - unset($annotation->paths); - $openapi->mergeProperties($annotation); - if (!Generator::isDefault($paths)) { - foreach ($paths as $path) { - if (Generator::isDefault($openapi->paths)) { - $openapi->paths = []; - } - $openapi->paths[] = $path; - } - } - } elseif (OpenApi::matchNested(get_class($annotation)) && property_exists($annotation, '_context') && $annotation->_context->is('nested') === false) { - // A top level annotation. - $merge[] = $annotation; - } - } - $openapi->merge($merge, true); - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php deleted file mode 100644 index bf87bae..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php +++ /dev/null @@ -1,61 +0,0 @@ -getAnnotationsOfType(JsonContent::class); - - foreach ($annotations as $jsonContent) { - $parent = $jsonContent->_context->nested; - if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { - if ($parent) { - $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); - } else { - $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' must be nested'); - } - continue; - } - if (Generator::isDefault($parent->content)) { - $parent->content = []; - } - $parent->content['application/json'] = $mediaType = new MediaType([ - 'schema' => $jsonContent, - 'example' => $jsonContent->example, - 'examples' => $jsonContent->examples, - '_context' => new Context(['generated' => true], $jsonContent->_context), - '_aux' => true, - ]); - $analysis->addAnnotation($mediaType, $mediaType->_context); - if (!$parent instanceof Parameter) { - $parent->content['application/json']->mediaType = 'application/json'; - } - $jsonContent->example = Generator::UNDEFINED; - $jsonContent->examples = Generator::UNDEFINED; - - $index = array_search($jsonContent, $parent->_unmerged, true); - if ($index !== false) { - array_splice($parent->_unmerged, $index, 1); - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php deleted file mode 100644 index 43eca14..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeTrait.php +++ /dev/null @@ -1,80 +0,0 @@ - update all $ref that might reference a property merged. - */ -trait MergeTrait -{ - protected function inheritFrom(Analysis $analysis, Schema $schema, Schema $from, string $refPath, Context $context): void - { - if (Generator::isDefault($schema->allOf)) { - $schema->allOf = []; - } - // merging other properties into allOf is done in the AugmentSchemas processor - $schema->allOf[] = $refSchema = new Schema([ - 'ref' => Components::ref($refPath), - '_context' => $context, - '_aux' => true, - ]); - $analysis->addAnnotation($refSchema, $refSchema->_context); - } - - protected function mergeAnnotations(Schema $schema, array $from, array &$existing): void - { - if (is_iterable($from['context']->annotations)) { - foreach ($from['context']->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - - protected function mergeProperties(Schema $schema, array $from, array &$existing): void - { - foreach ($from['properties'] as $method) { - if (is_iterable($method->annotations)) { - foreach ($method->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - } - - protected function mergeMethods(Schema $schema, array $from, array &$existing): void - { - foreach ($from['methods'] as $method) { - if (is_iterable($method->annotations)) { - foreach ($method->annotations as $annotation) { - if ($annotation instanceof Property && !in_array($annotation->_context->property, $existing, true)) { - $existing[] = $annotation->_context->property; - $schema->merge([$annotation], true); - } - } - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php deleted file mode 100644 index 127b591..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php +++ /dev/null @@ -1,61 +0,0 @@ -getAnnotationsOfType(XmlContent::class); - - foreach ($annotations as $xmlContent) { - $parent = $xmlContent->_context->nested; - if (!($parent instanceof Response) && !($parent instanceof RequestBody) && !($parent instanceof Parameter)) { - if ($parent) { - $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); - } else { - $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' must be nested'); - } - continue; - } - if (Generator::isDefault($parent->content)) { - $parent->content = []; - } - $parent->content['application/xml'] = $mediaType = new MediaType([ - 'schema' => $xmlContent, - 'example' => $xmlContent->example, - 'examples' => $xmlContent->examples, - '_context' => new Context(['generated' => true], $xmlContent->_context), - '_aux' => true, - ]); - $analysis->addAnnotation($mediaType, $mediaType->_context); - if (!$parent instanceof Parameter) { - $parent->content['application/xml']->mediaType = 'application/xml'; - } - $xmlContent->example = Generator::UNDEFINED; - $xmlContent->examples = Generator::UNDEFINED; - - $index = array_search($xmlContent, $parent->_unmerged, true); - if ($index !== false) { - array_splice($parent->_unmerged, $index, 1); - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php b/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php deleted file mode 100644 index e2e6924..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Processors/OperationId.php +++ /dev/null @@ -1,72 +0,0 @@ -hash = $hash; - } - - public function isHash(): bool - { - return $this->hash; - } - - public function setHash(bool $hash): OperationId - { - $this->hash = $hash; - - return $this; - } - - public function __invoke(Analysis $analysis) - { - $allOperations = $analysis->getAnnotationsOfType(Operation::class); - - /** @var Operation $operation */ - foreach ($allOperations as $operation) { - if (null === $operation->operationId) { - $operation->operationId = Generator::UNDEFINED; - } - - if (!Generator::isDefault($operation->operationId)) { - continue; - } - - $context = $operation->_context; - if ($context && $context->method) { - $source = $context->class ?? $context->interface ?? $context->trait; - $operationId = null; - if ($source) { - if ($context->namespace) { - $operationId = $context->namespace . '\\' . $source . '::' . $context->method; - } else { - $operationId = $source . '::' . $context->method; - } - } else { - $operationId = $context->method; - } - $operationId = strtoupper($operation->method) . '::' . $operation->path . '::' . $operationId; - $operation->operationId = $this->hash ? md5($operationId) : $operationId; - } - } - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php b/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php deleted file mode 100644 index 003ad62..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Serializer.php +++ /dev/null @@ -1,205 +0,0 @@ -isValidAnnotationClass($className)) { - throw new \Exception($className . ' is not defined in OpenApi PHP Annotations'); - } - - return $this->doDeserialize(json_decode($jsonString), $className, new Context(['generated' => true])); - } - - /** - * Deserialize a file. - */ - public function deserializeFile(string $filename, string $format = 'json', string $className = OA\OpenApi::class): OA\AbstractAnnotation - { - if (!$this->isValidAnnotationClass($className)) { - throw new \Exception($className . ' is not a valid OpenApi PHP Annotations'); - } - - $contents = file_get_contents($filename); - - $ext = pathinfo($filename, PATHINFO_EXTENSION); - if ('yaml' == $format || in_array($ext, ['yml', 'yaml'])) { - $contents = json_encode(Yaml::parse($contents)); - } - - return $this->doDeserialize(json_decode($contents), $className, new Context(['generated' => true])); - } - - /** - * Do deserialization. - */ - protected function doDeserialize(\stdClass $c, string $class, Context $context): OA\AbstractAnnotation - { - $annotation = new $class(['_context' => $context]); - foreach ((array) $c as $property => $value) { - if ($property === '$ref') { - $property = 'ref'; - } - - if (substr($property, 0, 2) === 'x-') { - if (Generator::isDefault($annotation->x)) { - $annotation->x = []; - } - $custom = substr($property, 2); - $annotation->x[$custom] = $value; - } else { - $annotation->$property = $this->doDeserializeProperty($annotation, $property, $value, $context); - } - } - - if ($annotation instanceof OA\OpenApi) { - $context->root()->version = $annotation->openapi; - } - - return $annotation; - } - - /** - * Deserialize the annotation's property. - */ - protected function doDeserializeProperty(OA\AbstractAnnotation $annotation, string $property, $value, Context $context) - { - // property is primitive type - if (array_key_exists($property, $annotation::$_types)) { - return $this->doDeserializeBaseProperty($annotation::$_types[$property], $value, $context); - } - - // property is embedded annotation - // note: this does not support custom nested annotation classes - foreach ($annotation::$_nested as $nestedClass => $declaration) { - // property is an annotation - if (is_string($declaration) && $declaration === $property) { - if (is_object($value)) { - return $this->doDeserialize($value, $nestedClass, $context); - } else { - return $value; - } - } - - // property is an annotation array - if (is_array($declaration) && count($declaration) === 1 && $declaration[0] === $property) { - $annotationArr = []; - foreach ($value as $v) { - $annotationArr[] = $this->doDeserialize($v, $nestedClass, $context); - } - - return $annotationArr; - } - - // property is an annotation hash map - if (is_array($declaration) && count($declaration) === 2 && $declaration[0] === $property) { - $key = $declaration[1]; - $annotationHash = []; - foreach ($value as $k => $v) { - $annotation = $this->doDeserialize($v, $nestedClass, $context); - $annotation->$key = $k; - $annotationHash[$k] = $annotation; - } - - return $annotationHash; - } - } - - return $value; - } - - /** - * Deserialize base annotation property. - * - * @param array|string $type The property type - * @param mixed $value The value to deserialization - * - * @return array|OA\AbstractAnnotation - */ - protected function doDeserializeBaseProperty($type, $value, Context $context) - { - $isAnnotationClass = is_string($type) && is_subclass_of(trim($type, '[]'), OA\AbstractAnnotation::class); - - if ($isAnnotationClass) { - $isArray = strpos($type, '[') === 0 && substr($type, -1) === ']'; - - if ($isArray) { - $annotationArr = []; - $class = trim($type, '[]'); - - foreach ($value as $v) { - $annotationArr[] = $this->doDeserialize($v, $class, $context); - } - - return $annotationArr; - } - - return $this->doDeserialize($value, $type, $context); - } - - return $value; - } -} diff --git a/vendor/passkit/vendor/zircote/swagger-php/src/Util.php b/vendor/passkit/vendor/zircote/swagger-php/src/Util.php deleted file mode 100644 index 085abac..0000000 --- a/vendor/passkit/vendor/zircote/swagger-php/src/Util.php +++ /dev/null @@ -1,197 +0,0 @@ - 'array', - 'byte' => ['string', 'byte'], - 'boolean' => 'boolean', - 'bool' => 'boolean', - 'int' => 'integer', - 'integer' => 'integer', - 'long' => ['integer', 'long'], - 'float' => ['number', 'float'], - 'double' => ['number', 'double'], - 'string' => 'string', - 'date' => ['string', 'date'], - 'datetime' => ['string', 'date-time'], - '\\datetime' => ['string', 'date-time'], - 'datetimeimmutable' => ['string', 'date-time'], - '\\datetimeimmutable' => ['string', 'date-time'], - 'datetimeinterface' => ['string', 'date-time'], - '\\datetimeinterface' => ['string', 'date-time'], - 'number' => 'number', - 'object' => 'object', - ]; - - public static function mapNativeType(Schema $schema, string $type): bool - { - if (!array_key_exists($type, self::$NATIVE_TYPE_MAP)) { - return false; - } - - $type = self::$NATIVE_TYPE_MAP[$type]; - if (is_array($type)) { - if (Generator::isDefault($schema->format)) { - $schema->format = $type[1]; - } - $type = $type[0]; - } - - $schema->type = $type; - - return true; - } - - /** - * Turns the given $fullPath into a relative path based on $basePaths, which can either - * be a single string path, or a list of possible paths. If a list is given, the first - * matching basePath in the list will be used to compute the relative path. If no - * relative path could be computed, the original string will be returned because there - * is always a chance it was a valid relative path to begin with. - * - * It should be noted that these are "relative paths" primarily in Finder's sense of them, - * and conform specifically to what is expected by functions like `exclude()` and `notPath()`. - * In particular, leading and trailing slashes are removed. - * - * @param array|string $basePaths - */ - public static function getRelativePath(string $fullPath, $basePaths): string - { - $relativePath = null; - if (is_string($basePaths)) { // just a single path, not an array of possible paths - $relativePath = self::removePrefix($fullPath, $basePaths); - } else { // an array of paths - foreach ($basePaths as $basePath) { - $relativePath = self::removePrefix($fullPath, $basePath); - if (!empty($relativePath)) { - break; - } - } - } - - return !empty($relativePath) ? trim($relativePath, '/') : $fullPath; - } - - /** - * Removes a prefix from the start of a string if it exists, or null otherwise. - */ - private static function removePrefix(string $str, string $prefix): ?string - { - if (substr($str, 0, strlen($prefix)) == $prefix) { - return substr($str, strlen($prefix)); - } - - return null; - } - - /** - * Build a Symfony Finder object that scans the given $directory. - * - * @param array|Finder|string $directory The directory(s) or filename(s) - * @param null|array|string $exclude The directory(s) or filename(s) to exclude (as absolute or relative paths) - * @param null|string $pattern The pattern of the files to scan - * - * @throws InvalidArgumentException - */ - public static function finder($directory, $exclude = null, $pattern = null): Finder - { - if ($directory instanceof Finder) { - // Make sure that the provided Finder only finds files and follows symbolic links. - return $directory->files()->followLinks(); - } else { - $finder = new Finder(); - $finder->sortByName(); - } - if ($pattern === null) { - $pattern = '*.php'; - } - - $finder->files()->followLinks()->name($pattern); - if (is_string($directory)) { - if (is_file($directory)) { // Scan a single file? - $finder->append([$directory]); - } else { // Scan a directory - $finder->in($directory); - } - } elseif (is_array($directory)) { - foreach ($directory as $path) { - if (is_file($path)) { // Scan a file? - $finder->append([$path]); - } else { - $finder->in($path); - } - } - } else { - throw new InvalidArgumentException('Unexpected $directory value:' . gettype($directory)); - } - if ($exclude !== null) { - if (is_string($exclude)) { - $finder->notPath(Util::getRelativePath($exclude, $directory)); - } elseif (is_array($exclude)) { - foreach ($exclude as $path) { - $finder->notPath(Util::getRelativePath($path, $directory)); - } - } else { - throw new InvalidArgumentException('Unexpected $exclude value:' . gettype($exclude)); - } - } - - return $finder; - } - - /** - * Escapes the special characters "/" and "~". - * - * https://swagger.io/docs/specification/using-ref/ - * https://tools.ietf.org/html/rfc6901#page-3 - */ - public static function refEncode(string $raw): string - { - return str_replace('/', '~1', str_replace('~', '~0', $raw)); - } - - /** - * Converted the escaped characters "~1" and "~" back to "/" and "~". - * - * https://swagger.io/docs/specification/using-ref/ - * https://tools.ietf.org/html/rfc6901#page-3 - */ - public static function refDecode(string $encoded): string - { - return str_replace('~1', '/', str_replace('~0', '~', $encoded)); - } - - /** - * Shorten class name(s). - * - * @param array|object|string $classes Class(es) to shorten - * - * @return string|string[] One or more shortened class names - */ - public static function shorten($classes) - { - $short = []; - foreach ((array) $classes as $class) { - $short[] = '@' . str_replace([ - 'OpenApi\\Annotations\\', - 'OpenApi\\Attributes\\', - ], 'OA\\', $class); - } - - return is_array($classes) ? $short : array_pop($short); - } -} From 974cb5488d9f0b4f2416b4b683d2115def04d3ad Mon Sep 17 00:00:00 2001 From: canderson1538 <86263441+canderson1538@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:47:31 +0000 Subject: [PATCH 6/6] Updates --- .gitignore | 2 ++ certs/ca-chain.pem | 32 -------------------------------- certs/certificate.pem | 14 -------------- certs/key.pem | 5 ----- 4 files changed, 2 insertions(+), 51 deletions(-) create mode 100644 .gitignore delete mode 100644 certs/ca-chain.pem delete mode 100644 certs/certificate.pem delete mode 100644 certs/key.pem diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f9d9e92 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pem +vendor/ \ No newline at end of file diff --git a/certs/ca-chain.pem b/certs/ca-chain.pem deleted file mode 100644 index 6dcd90d..0000000 --- a/certs/ca-chain.pem +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICkzCCAhqgAwIBAgIUGDXpJ2PQxvE51mRj9hcYZ5ZaWJ8wCgYIKoZIzj0EAwMw -dTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCERlbGF3YXJlMRMwEQYDVQQHEwpXaWxt -aW5ndG9uMRYwFAYDVQQKEw1QYXNzS2l0LCBJbmMuMSYwJAYDVQQDEx1QYXNzS2l0 -IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xOTExMDExNjM1MDBaFw0zOTEwMzEx -NjM1MDBaMIGWMQswCQYDVQQGEwJISzEjMCEGA1UECAwaQ2VudHJhbCAmIFdlc3Rl -cm4gRGlzdHJpY3QxEzARBgNVBAcTClNoZXVuZyBXYW4xFjAUBgNVBAoTDVBhc3NL -aXQsIEluYy4xEzARBgNVBAsTCnBhc3NraXQuaW8xIDAeBgNVBAMTF1Bhc3NLaXQg -SW50ZXJtZWRpYXRlIENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaeZN6Gv4 -lnqF5oUj4ab83VrkzGesE5rnxhFnxkDGXxhNvZ29Et8PzbyQ4JNNgfyssZA9N5pO -ipr4FeW9VkzUjKNmMGQwDgYDVR0PAQH/BAQDAgGmMBIGA1UdEwEB/wQIMAYBAf8C -AQAwHQYDVR0OBBYEFJBf+ZAi99kT6cbS0YNF2pwibNCNMB8GA1UdIwQYMBaAFIsU -qah4/A1DufRWLVIVmuT7MeZiMAoGCCqGSM49BAMDA2cAMGQCMEhYS6WGWrn/raeo -urMFZCAmRF6GcYoysn25UPJIDiX+m/7VYvGmTfQu0t3OlGPWXgIwMvFdImYbChw5 -Y7oHKvHCmCtuFbZ3jVSlIESF4s5YHUyRh+upPeZOUcLXOkoK449e ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICbTCCAfSgAwIBAgIUdbqHey0TaOXKrR008Mm2ei5J9V0wCgYIKoZIzj0EAwMw -dTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCERlbGF3YXJlMRMwEQYDVQQHEwpXaWxt -aW5ndG9uMRYwFAYDVQQKEw1QYXNzS2l0LCBJbmMuMSYwJAYDVQQDEx1QYXNzS2l0 -IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xOTExMDExNjM1MDBaFw00OTEwMjQx -NjM1MDBaMHUxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhEZWxhd2FyZTETMBEGA1UE -BxMKV2lsbWluZ3RvbjEWMBQGA1UEChMNUGFzc0tpdCwgSW5jLjEmMCQGA1UEAxMd -UGFzc0tpdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAASzCYEbF2augOANBffbc3pwxJDxCC9JXgGciomSefyTLf1ExFgDFkbORPnI -BsvfxsT9mAkAzQ3oa6AeWJe5Zvg90p+/5WpaYdNKrpT2H2cbOxPPqai60Nh3jSaa -HFglRwajRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMB0G -A1UdDgQWBBSLFKmoePwNQ7n0Vi1SFZrk+zHmYjAKBggqhkjOPQQDAwNnADBkAjBu -avYzOFquYhumDEoS+5qmuMM8dwCNyo4tKMG3fazQB6h5GnDUx1B8TVmoxIf10RsC -MCXVuy9HNPIG1oKm7fXptMBNT1sg5A91XVktaXEkeykNPMoxJUyZamI3ta9xMHNl -0A== ------END CERTIFICATE----- diff --git a/certs/certificate.pem b/certs/certificate.pem deleted file mode 100644 index 26af65b..0000000 --- a/certs/certificate.pem +++ /dev/null @@ -1,14 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICIzCCAcmgAwIBAgIVAM4KElwsm92TWZTX/TxOHT5tw0wuMAoGCCqGSM49BAMC -MIGWMQswCQYDVQQGEwJISzEjMCEGA1UECAwaQ2VudHJhbCAmIFdlc3Rlcm4gRGlz -dHJpY3QxEzARBgNVBAcTClNoZXVuZyBXYW4xFjAUBgNVBAoTDVBhc3NLaXQsIElu -Yy4xEzARBgNVBAsTCnBhc3NraXQuaW8xIDAeBgNVBAMTF1Bhc3NLaXQgSW50ZXJt -ZWRpYXRlIENBMB4XDTIyMTExMTAzMDY0MVoXDTMyMTEwODAzMDY0MVowEjEQMA4G -A1UEAxMHY2xhdWRpYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFdwuf2dlYO7 -HjK9dwMIO6qh2POOCJ2LX9FOUemwo8pNc7Wvto39FawHy50Yq6T40XOXwB3ikJS7 -oCVACKt3GBGjdzB1MA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcD -AjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFJBf+ZAi99kT6cbS0YNF2pwibNCN -MB8GA1UdEQQYMBaCFGdycGMucHViMS5wYXNza2l0LmlvMAoGCCqGSM49BAMCA0gA -MEUCIQColQ6yyvHlY+mOD5GuUZkgurgr1cfy10/v9XLBq0myNgIgdAFCVHiDPvPx -hafPMjuIAAZ6dAeK0tTkquClbX4aP8Y= ------END CERTIFICATE----- diff --git a/certs/key.pem b/certs/key.pem deleted file mode 100644 index cc3bedb..0000000 --- a/certs/key.pem +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIAwY1jnahDfYRzNMe7tRUuMlhwlokubzaLCh+BAiDXxyoAoGCCqGSM49 -AwEHoUQDQgAEV3C5/Z2Vg7seMr13Awg7qqHY844InYtf0U5R6bCjyk1zta+2jf0V -rAfLnRirpPjRc5fAHeKQlLugJUAIq3cYEQ== ------END EC PRIVATE KEY-----