From 2909e39a7219c568597f77695dc2ce6ae6f42f4d Mon Sep 17 00:00:00 2001 From: Ketan Umare <16888709+kumare3@users.noreply.github.com> Date: Mon, 7 Jun 2021 16:00:20 -0700 Subject: [PATCH] #minor Enum type (#183) * Enum type definition Signed-off-by: Ketan Umare * Enum Type support in flyteidl Signed-off-by: Ketan Umare * lint fixes Signed-off-by: Ketan Umare * re-generated Signed-off-by: Ketan Umare * Enum default values are the first value in the list Signed-off-by: Ketan Umare --- flyteidl/clients/go/coreutils/literals.go | 32 + .../clients/go/coreutils/literals_test.go | 36 + .../admin_eventsink_integration_test.go | 2 +- .../gen/pb-cpp/flyteidl/core/interface.pb.cc | 2 +- flyteidl/gen/pb-cpp/flyteidl/core/types.pb.cc | 456 ++- flyteidl/gen/pb-cpp/flyteidl/core/types.pb.h | 268 +- flyteidl/gen/pb-go/flyteidl/core/types.pb.go | 151 +- .../pb-go/flyteidl/core/types.pb.validate.go | 76 + .../pb-go/flyteidl/service/admin.swagger.json | 17 + .../flyteidl/service/flyteadmin/README.md | 1 + .../service/flyteadmin/api/swagger.yaml | 438 +++ .../flyteadmin/model_core_enum_type.go | 16 + .../flyteadmin/model_core_literal_type.go | 2 + .../gen/pb-go/flyteidl/service/openapi.go | 4 +- flyteidl/gen/pb-java/flyteidl/core/Types.java | 1013 ++++- flyteidl/gen/pb-js/flyteidl.d.ts | 60 +- flyteidl/gen/pb-js/flyteidl.js | 146 +- .../gen/pb_python/flyteidl/core/types_pb2.py | 70 +- .../flyteidl/service/flyteadmin/README.md | 1 + .../service/flyteadmin/flyteadmin/__init__.py | 1 + .../flyteadmin/flyteadmin/models/__init__.py | 1 + .../flyteadmin/models/core_enum_type.py | 117 + .../flyteadmin/models/core_literal_type.py | 31 +- .../flyteadmin/test/test_core_enum_type.py | 40 + flyteidl/protos/docs/admin/admin.rst | 3340 ----------------- flyteidl/protos/docs/core/core.rst | 3293 ---------------- .../protos/docs/datacatalog/datacatalog.rst | 902 ----- flyteidl/protos/docs/event/event.rst | 314 -- flyteidl/protos/docs/plugins/plugins.rst | 507 --- flyteidl/protos/docs/service/service.rst | 272 -- flyteidl/protos/flyteidl/core/types.proto | 11 + 31 files changed, 2880 insertions(+), 8740 deletions(-) create mode 100644 flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_enum_type.go create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_enum_type.py create mode 100644 flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_enum_type.py delete mode 100644 flyteidl/protos/docs/admin/admin.rst delete mode 100644 flyteidl/protos/docs/core/core.rst delete mode 100644 flyteidl/protos/docs/datacatalog/datacatalog.rst delete mode 100644 flyteidl/protos/docs/event/event.rst delete mode 100644 flyteidl/protos/docs/plugins/plugins.rst delete mode 100644 flyteidl/protos/docs/service/service.rst diff --git a/flyteidl/clients/go/coreutils/literals.go b/flyteidl/clients/go/coreutils/literals.go index 5a23a42b16..c05061854d 100644 --- a/flyteidl/clients/go/coreutils/literals.go +++ b/flyteidl/clients/go/coreutils/literals.go @@ -294,6 +294,8 @@ func MakeDefaultLiteralForType(typ *core.LiteralType) (*core.Literal, error) { }, }, }, nil + case *core.LiteralType_EnumType: + return MakeLiteralForType(typ, nil) //case *core.LiteralType_Schema: } @@ -462,6 +464,7 @@ func MakeLiteralForType(t *core.LiteralType, v interface{}) (*core.Literal, erro Literals: literals, }, } + case *core.LiteralType_CollectionType: newT := t.Type.(*core.LiteralType_CollectionType) newV, ok := v.([]interface{}) @@ -482,6 +485,7 @@ func MakeLiteralForType(t *core.LiteralType, v interface{}) (*core.Literal, erro Literals: literals, }, } + case *core.LiteralType_Simple: newT := t.Type.(*core.LiteralType_Simple) strValue := fmt.Sprintf("%v", v) @@ -499,11 +503,39 @@ func MakeLiteralForType(t *core.LiteralType, v interface{}) (*core.Literal, erro return nil, err } return lv, nil + case *core.LiteralType_Blob: newT := t.Type.(*core.LiteralType_Blob) isDir := newT.Blob.Dimensionality == core.BlobType_MULTIPART lv := MakeLiteralForBlob(storage.DataReference(fmt.Sprintf("%v", v)), isDir, newT.Blob.Format) return lv, nil + + case *core.LiteralType_EnumType: + var newV string + if v == nil { + if len(t.GetEnumType().Values) == 0 { + return nil, fmt.Errorf("enum types need atleast one value") + } + newV = t.GetEnumType().Values[0] + } else { + var ok bool + newV, ok = v.(string) + if !ok { + return nil, fmt.Errorf("cannot convert [%v] to enum representations, only string values are supported in enum literals", reflect.TypeOf(v)) + } + found := false + for _, val := range t.GetEnumType().GetValues() { + if val == newV { + found = true + break + } + } + if !found { + return nil, fmt.Errorf("incorrect enum value [%s], supported values %+v", newV, t.GetEnumType().GetValues()) + } + } + return MakePrimitiveLiteral(newV) + default: return nil, fmt.Errorf("unsupported type %s", t.String()) } diff --git a/flyteidl/clients/go/coreutils/literals_test.go b/flyteidl/clients/go/coreutils/literals_test.go index 1106e2bcc6..e1a557a863 100644 --- a/flyteidl/clients/go/coreutils/literals_test.go +++ b/flyteidl/clients/go/coreutils/literals_test.go @@ -248,6 +248,17 @@ func TestMakeDefaultLiteralForType(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, l.GetScalar().GetGeneric()) }) + + t.Run("enum", func(t *testing.T) { + l, err := MakeDefaultLiteralForType(&core.LiteralType{Type: &core.LiteralType_EnumType{ + EnumType: &core.EnumType{Values: []string{"x", "y", "z"}}, + }}) + assert.NoError(t, err) + assert.NotNil(t, l.GetScalar().GetPrimitive().GetStringValue()) + expected := &core.Literal{Value: &core.Literal_Scalar{Scalar: &core.Scalar{ + Value: &core.Scalar_Primitive{Primitive: &core.Primitive{Value: &core.Primitive_StringValue{StringValue: "x"}}}}}} + assert.Equal(t, expected, l) + }) } func TestMustMakeDefaultLiteralForType(t *testing.T) { @@ -581,4 +592,29 @@ func TestMakeLiteralForType(t *testing.T) { assert.Equal(t, expectedErrorf, err) }) + + t.Run("enumtype-nil", func(t *testing.T) { + var literalType = &core.LiteralType{Type: &core.LiteralType_EnumType{EnumType: &core.EnumType{}}} + _, err := MakeLiteralForType(literalType, nil) + assert.Error(t, err) + _, err = MakeLiteralForType(literalType, "") + assert.Error(t, err) + }) + + t.Run("enumtype-happy", func(t *testing.T) { + var literalType = &core.LiteralType{Type: &core.LiteralType_EnumType{EnumType: &core.EnumType{Values: []string{"x", "y", "z"}}}} + expected := &core.Literal{Value: &core.Literal_Scalar{Scalar: &core.Scalar{ + Value: &core.Scalar_Primitive{Primitive: &core.Primitive{Value: &core.Primitive_StringValue{StringValue: "x"}}}}}} + v, err := MakeLiteralForType(literalType, "x") + assert.NoError(t, err) + assert.Equal(t, expected, v) + _, err = MakeLiteralForType(literalType, "") + assert.Error(t, err) + }) + + t.Run("enumtype-illegal-val", func(t *testing.T) { + var literalType = &core.LiteralType{Type: &core.LiteralType_EnumType{EnumType: &core.EnumType{Values: []string{"x", "y", "z"}}}} + _, err := MakeLiteralForType(literalType, "m") + assert.Error(t, err) + }) } diff --git a/flyteidl/clients/go/events/admin_eventsink_integration_test.go b/flyteidl/clients/go/events/admin_eventsink_integration_test.go index bc9af6ddae..97d4ad1774 100644 --- a/flyteidl/clients/go/events/admin_eventsink_integration_test.go +++ b/flyteidl/clients/go/events/admin_eventsink_integration_test.go @@ -14,8 +14,8 @@ import ( "github.com/flyteorg/flyteidl/clients/go/admin" "github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/core" "github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/event" - "github.com/golang/protobuf/ptypes" "github.com/flyteorg/flytestdlib/config" + "github.com/golang/protobuf/ptypes" ) var ( diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/interface.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/interface.pb.cc index 0cdd945e4a..285ce2fc1e 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/interface.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/interface.pb.cc @@ -22,7 +22,7 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2finterface_2eproto ::google::pr extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2finterface_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Variable_flyteidl_2fcore_2finterface_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2finterface_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Parameter_flyteidl_2fcore_2finterface_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Literal_flyteidl_2fcore_2fliterals_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto; namespace flyteidl { namespace core { class VariableDefaultTypeInternal { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.cc index 3ae704fd43..92fa6bf960 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.cc @@ -17,9 +17,10 @@ #include extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_BlobType_flyteidl_2fcore_2ftypes_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_SchemaType_SchemaColumn_flyteidl_2fcore_2ftypes_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_SchemaType_flyteidl_2fcore_2ftypes_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftypes_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto; extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fstruct_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ListValue_google_2fprotobuf_2fstruct_2eproto; namespace flyteidl { namespace core { @@ -35,6 +36,10 @@ class BlobTypeDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _BlobType_default_instance_; +class EnumTypeDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _EnumType_default_instance_; class LiteralTypeDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; @@ -43,6 +48,7 @@ class LiteralTypeDefaultTypeInternal { const ::flyteidl::core::LiteralType* collection_type_; const ::flyteidl::core::LiteralType* map_value_type_; const ::flyteidl::core::BlobType* blob_; + const ::flyteidl::core::EnumType* enum_type_; } _LiteralType_default_instance_; class OutputReferenceDefaultTypeInternal { public: @@ -97,6 +103,20 @@ static void InitDefaultsBlobType_flyteidl_2fcore_2ftypes_2eproto() { ::google::protobuf::internal::SCCInfo<0> scc_info_BlobType_flyteidl_2fcore_2ftypes_2eproto = {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsBlobType_flyteidl_2fcore_2ftypes_2eproto}, {}}; +static void InitDefaultsEnumType_flyteidl_2fcore_2ftypes_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::core::_EnumType_default_instance_; + new (ptr) ::flyteidl::core::EnumType(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::core::EnumType::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsEnumType_flyteidl_2fcore_2ftypes_2eproto}, {}}; + static void InitDefaultsLiteralType_flyteidl_2fcore_2ftypes_2eproto() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -108,10 +128,11 @@ static void InitDefaultsLiteralType_flyteidl_2fcore_2ftypes_2eproto() { ::flyteidl::core::LiteralType::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<3> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsLiteralType_flyteidl_2fcore_2ftypes_2eproto}, { +::google::protobuf::internal::SCCInfo<4> scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 4, InitDefaultsLiteralType_flyteidl_2fcore_2ftypes_2eproto}, { &scc_info_SchemaType_flyteidl_2fcore_2ftypes_2eproto.base, &scc_info_BlobType_flyteidl_2fcore_2ftypes_2eproto.base, + &scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto.base, &scc_info_ListValue_google_2fprotobuf_2fstruct_2eproto.base,}}; static void InitDefaultsOutputReference_flyteidl_2fcore_2ftypes_2eproto() { @@ -146,12 +167,13 @@ void InitDefaults_flyteidl_2fcore_2ftypes_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_SchemaType_SchemaColumn_flyteidl_2fcore_2ftypes_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_SchemaType_flyteidl_2fcore_2ftypes_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_BlobType_flyteidl_2fcore_2ftypes_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_LiteralType_flyteidl_2fcore_2ftypes_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_OutputReference_flyteidl_2fcore_2ftypes_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_Error_flyteidl_2fcore_2ftypes_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftypes_2eproto[6]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftypes_2eproto[7]; const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftypes_2eproto[3]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fcore_2ftypes_2eproto = nullptr; @@ -177,6 +199,12 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftypes_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::BlobType, format_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::BlobType, dimensionality_), ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::EnumType, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::EnumType, values_), + ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::LiteralType, _internal_metadata_), ~0u, // no _extensions_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::LiteralType, _oneof_case_[0]), @@ -186,6 +214,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftypes_2eproto::of offsetof(::flyteidl::core::LiteralTypeDefaultTypeInternal, collection_type_), offsetof(::flyteidl::core::LiteralTypeDefaultTypeInternal, map_value_type_), offsetof(::flyteidl::core::LiteralTypeDefaultTypeInternal, blob_), + offsetof(::flyteidl::core::LiteralTypeDefaultTypeInternal, enum_type_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::LiteralType, metadata_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::LiteralType, type_), ~0u, // no _has_bits_ @@ -207,15 +236,17 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 0, -1, sizeof(::flyteidl::core::SchemaType_SchemaColumn)}, { 7, -1, sizeof(::flyteidl::core::SchemaType)}, { 13, -1, sizeof(::flyteidl::core::BlobType)}, - { 20, -1, sizeof(::flyteidl::core::LiteralType)}, - { 32, -1, sizeof(::flyteidl::core::OutputReference)}, - { 39, -1, sizeof(::flyteidl::core::Error)}, + { 20, -1, sizeof(::flyteidl::core::EnumType)}, + { 26, -1, sizeof(::flyteidl::core::LiteralType)}, + { 39, -1, sizeof(::flyteidl::core::OutputReference)}, + { 46, -1, sizeof(::flyteidl::core::Error)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_SchemaType_SchemaColumn_default_instance_), reinterpret_cast(&::flyteidl::core::_SchemaType_default_instance_), reinterpret_cast(&::flyteidl::core::_BlobType_default_instance_), + reinterpret_cast(&::flyteidl::core::_EnumType_default_instance_), reinterpret_cast(&::flyteidl::core::_LiteralType_default_instance_), reinterpret_cast(&::flyteidl::core::_OutputReference_default_instance_), reinterpret_cast(&::flyteidl::core::_Error_default_instance_), @@ -224,7 +255,7 @@ static ::google::protobuf::Message const * const file_default_instances[] = { ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fcore_2ftypes_2eproto = { {}, AddDescriptors_flyteidl_2fcore_2ftypes_2eproto, "flyteidl/core/types.proto", schemas, file_default_instances, TableStruct_flyteidl_2fcore_2ftypes_2eproto::offsets, - file_level_metadata_flyteidl_2fcore_2ftypes_2eproto, 6, file_level_enum_descriptors_flyteidl_2fcore_2ftypes_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftypes_2eproto, + file_level_metadata_flyteidl_2fcore_2ftypes_2eproto, 7, file_level_enum_descriptors_flyteidl_2fcore_2ftypes_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftypes_2eproto, }; const char descriptor_table_protodef_flyteidl_2fcore_2ftypes_2eproto[] = @@ -240,27 +271,29 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftypes_2eproto[] = "format\030\001 \001(\t\022B\n\016dimensionality\030\002 \001(\0162*.f" "lyteidl.core.BlobType.BlobDimensionality" "\"/\n\022BlobDimensionality\022\n\n\006SINGLE\020\000\022\r\n\tMU" - "LTIPART\020\001\"\260\002\n\013LiteralType\022+\n\006simple\030\001 \001(" - "\0162\031.flyteidl.core.SimpleTypeH\000\022+\n\006schema" - "\030\002 \001(\0132\031.flyteidl.core.SchemaTypeH\000\0225\n\017c" - "ollection_type\030\003 \001(\0132\032.flyteidl.core.Lit" - "eralTypeH\000\0224\n\016map_value_type\030\004 \001(\0132\032.fly" - "teidl.core.LiteralTypeH\000\022\'\n\004blob\030\005 \001(\0132\027" - ".flyteidl.core.BlobTypeH\000\022)\n\010metadata\030\006 " - "\001(\0132\027.google.protobuf.StructB\006\n\004type\"/\n\017" - "OutputReference\022\017\n\007node_id\030\001 \001(\t\022\013\n\003var\030" - "\002 \001(\t\"0\n\005Error\022\026\n\016failed_node_id\030\001 \001(\t\022\017" - "\n\007message\030\002 \001(\t*\206\001\n\nSimpleType\022\010\n\004NONE\020\000" - "\022\013\n\007INTEGER\020\001\022\t\n\005FLOAT\020\002\022\n\n\006STRING\020\003\022\013\n\007" - "BOOLEAN\020\004\022\014\n\010DATETIME\020\005\022\014\n\010DURATION\020\006\022\n\n" - "\006BINARY\020\007\022\t\n\005ERROR\020\010\022\n\n\006STRUCT\020\tB6Z4gith" - "ub.com/flyteorg/flyteidl/gen/pb-go/flyte" - "idl/coreb\006proto3" + "LTIPART\020\001\"\032\n\010EnumType\022\016\n\006values\030\001 \003(\t\"\336\002" + "\n\013LiteralType\022+\n\006simple\030\001 \001(\0162\031.flyteidl" + ".core.SimpleTypeH\000\022+\n\006schema\030\002 \001(\0132\031.fly" + "teidl.core.SchemaTypeH\000\0225\n\017collection_ty" + "pe\030\003 \001(\0132\032.flyteidl.core.LiteralTypeH\000\0224" + "\n\016map_value_type\030\004 \001(\0132\032.flyteidl.core.L" + "iteralTypeH\000\022\'\n\004blob\030\005 \001(\0132\027.flyteidl.co" + "re.BlobTypeH\000\022,\n\tenum_type\030\007 \001(\0132\027.flyte" + "idl.core.EnumTypeH\000\022)\n\010metadata\030\006 \001(\0132\027." + "google.protobuf.StructB\006\n\004type\"/\n\017Output" + "Reference\022\017\n\007node_id\030\001 \001(\t\022\013\n\003var\030\002 \001(\t\"" + "0\n\005Error\022\026\n\016failed_node_id\030\001 \001(\t\022\017\n\007mess" + "age\030\002 \001(\t*\206\001\n\nSimpleType\022\010\n\004NONE\020\000\022\013\n\007IN" + "TEGER\020\001\022\t\n\005FLOAT\020\002\022\n\n\006STRING\020\003\022\013\n\007BOOLEA" + "N\020\004\022\014\n\010DATETIME\020\005\022\014\n\010DURATION\020\006\022\n\n\006BINAR" + "Y\020\007\022\t\n\005ERROR\020\010\022\n\n\006STRUCT\020\tB6Z4github.com" + "/flyteorg/flyteidl/gen/pb-go/flyteidl/co" + "reb\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fcore_2ftypes_2eproto = { false, InitDefaults_flyteidl_2fcore_2ftypes_2eproto, descriptor_table_protodef_flyteidl_2fcore_2ftypes_2eproto, - "flyteidl/core/types.proto", &assign_descriptors_table_flyteidl_2fcore_2ftypes_2eproto, 1096, + "flyteidl/core/types.proto", &assign_descriptors_table_flyteidl_2fcore_2ftypes_2eproto, 1170, }; void AddDescriptors_flyteidl_2fcore_2ftypes_2eproto() { @@ -1318,6 +1351,298 @@ ::google::protobuf::Metadata BlobType::GetMetadata() const { } +// =================================================================== + +void EnumType::InitAsDefaultInstance() { +} +class EnumType::HasBitSetters { + public: +}; + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int EnumType::kValuesFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +EnumType::EnumType() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.core.EnumType) +} +EnumType::EnumType(const EnumType& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr), + values_(from.values_) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + // @@protoc_insertion_point(copy_constructor:flyteidl.core.EnumType) +} + +void EnumType::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto.base); +} + +EnumType::~EnumType() { + // @@protoc_insertion_point(destructor:flyteidl.core.EnumType) + SharedDtor(); +} + +void EnumType::SharedDtor() { +} + +void EnumType::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const EnumType& EnumType::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_EnumType_flyteidl_2fcore_2ftypes_2eproto.base); + return *internal_default_instance(); +} + + +void EnumType::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.core.EnumType) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + values_.Clear(); + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* EnumType::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // repeated string values = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + do { + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.core.EnumType.values"); + object = msg->add_values(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + if (ptr >= end) break; + } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 10 && (ptr += 1)); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +string_till_end: + static_cast<::std::string*>(object)->clear(); + static_cast<::std::string*>(object)->reserve(size); + goto len_delim_till_end; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool EnumType::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.core.EnumType) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // repeated string values = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->add_values())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->values(this->values_size() - 1).data(), + static_cast(this->values(this->values_size() - 1).length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.EnumType.values")); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.core.EnumType) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.core.EnumType) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void EnumType::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.core.EnumType) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated string values = 1; + for (int i = 0, n = this->values_size(); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->values(i).data(), static_cast(this->values(i).length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.EnumType.values"); + ::google::protobuf::internal::WireFormatLite::WriteString( + 1, this->values(i), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.core.EnumType) +} + +::google::protobuf::uint8* EnumType::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.EnumType) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // repeated string values = 1; + for (int i = 0, n = this->values_size(); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->values(i).data(), static_cast(this->values(i).length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.EnumType.values"); + target = ::google::protobuf::internal::WireFormatLite:: + WriteStringToArray(1, this->values(i), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.core.EnumType) + return target; +} + +size_t EnumType::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.EnumType) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // repeated string values = 1; + total_size += 1 * + ::google::protobuf::internal::FromIntSize(this->values_size()); + for (int i = 0, n = this->values_size(); i < n; i++) { + total_size += ::google::protobuf::internal::WireFormatLite::StringSize( + this->values(i)); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void EnumType::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.EnumType) + GOOGLE_DCHECK_NE(&from, this); + const EnumType* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.EnumType) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.EnumType) + MergeFrom(*source); + } +} + +void EnumType::MergeFrom(const EnumType& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.EnumType) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + values_.MergeFrom(from.values_); +} + +void EnumType::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.EnumType) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void EnumType::CopyFrom(const EnumType& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.EnumType) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool EnumType::IsInitialized() const { + return true; +} + +void EnumType::Swap(EnumType* other) { + if (other == this) return; + InternalSwap(other); +} +void EnumType::InternalSwap(EnumType* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + values_.InternalSwap(CastToBase(&other->values_)); +} + +::google::protobuf::Metadata EnumType::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftypes_2eproto); + return ::file_level_metadata_flyteidl_2fcore_2ftypes_2eproto[kIndexInFileMessages]; +} + + // =================================================================== void LiteralType::InitAsDefaultInstance() { @@ -1330,6 +1655,8 @@ void LiteralType::InitAsDefaultInstance() { ::flyteidl::core::LiteralType::internal_default_instance()); ::flyteidl::core::_LiteralType_default_instance_.blob_ = const_cast< ::flyteidl::core::BlobType*>( ::flyteidl::core::BlobType::internal_default_instance()); + ::flyteidl::core::_LiteralType_default_instance_.enum_type_ = const_cast< ::flyteidl::core::EnumType*>( + ::flyteidl::core::EnumType::internal_default_instance()); ::flyteidl::core::_LiteralType_default_instance_._instance.get_mutable()->metadata_ = const_cast< ::google::protobuf::Struct*>( ::google::protobuf::Struct::internal_default_instance()); } @@ -1339,6 +1666,7 @@ class LiteralType::HasBitSetters { static const ::flyteidl::core::LiteralType& collection_type(const LiteralType* msg); static const ::flyteidl::core::LiteralType& map_value_type(const LiteralType* msg); static const ::flyteidl::core::BlobType& blob(const LiteralType* msg); + static const ::flyteidl::core::EnumType& enum_type(const LiteralType* msg); static const ::google::protobuf::Struct& metadata(const LiteralType* msg); }; @@ -1358,6 +1686,10 @@ const ::flyteidl::core::BlobType& LiteralType::HasBitSetters::blob(const LiteralType* msg) { return *msg->type_.blob_; } +const ::flyteidl::core::EnumType& +LiteralType::HasBitSetters::enum_type(const LiteralType* msg) { + return *msg->type_.enum_type_; +} const ::google::protobuf::Struct& LiteralType::HasBitSetters::metadata(const LiteralType* msg) { return *msg->metadata_; @@ -1418,6 +1750,20 @@ void LiteralType::set_allocated_blob(::flyteidl::core::BlobType* blob) { } // @@protoc_insertion_point(field_set_allocated:flyteidl.core.LiteralType.blob) } +void LiteralType::set_allocated_enum_type(::flyteidl::core::EnumType* enum_type) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + clear_type(); + if (enum_type) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + enum_type = ::google::protobuf::internal::GetOwnedMessage( + message_arena, enum_type, submessage_arena); + } + set_has_enum_type(); + type_.enum_type_ = enum_type; + } + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.LiteralType.enum_type) +} void LiteralType::clear_metadata() { if (GetArenaNoVirtual() == nullptr && metadata_ != nullptr) { delete metadata_; @@ -1430,6 +1776,7 @@ const int LiteralType::kSchemaFieldNumber; const int LiteralType::kCollectionTypeFieldNumber; const int LiteralType::kMapValueTypeFieldNumber; const int LiteralType::kBlobFieldNumber; +const int LiteralType::kEnumTypeFieldNumber; const int LiteralType::kMetadataFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 @@ -1469,6 +1816,10 @@ LiteralType::LiteralType(const LiteralType& from) mutable_blob()->::flyteidl::core::BlobType::MergeFrom(from.blob()); break; } + case kEnumType: { + mutable_enum_type()->::flyteidl::core::EnumType::MergeFrom(from.enum_type()); + break; + } case TYPE_NOT_SET: { break; } @@ -1527,6 +1878,10 @@ void LiteralType::clear_type() { delete type_.blob_; break; } + case kEnumType: { + delete type_.enum_type_; + break; + } case TYPE_NOT_SET: { break; } @@ -1635,6 +1990,19 @@ const char* LiteralType::_InternalParse(const char* begin, const char* end, void {parser_till_end, object}, ptr - size, ptr)); break; } + // .flyteidl.core.EnumType enum_type = 7; + case 7: { + if (static_cast<::google::protobuf::uint8>(tag) != 58) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::EnumType::_InternalParse; + object = msg->mutable_enum_type(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1734,6 +2102,17 @@ bool LiteralType::MergePartialFromCodedStream( break; } + // .flyteidl.core.EnumType enum_type = 7; + case 7: { + if (static_cast< ::google::protobuf::uint8>(tag) == (58 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_enum_type())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -1797,6 +2176,12 @@ void LiteralType::SerializeWithCachedSizes( 6, HasBitSetters::metadata(this), output); } + // .flyteidl.core.EnumType enum_type = 7; + if (has_enum_type()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 7, HasBitSetters::enum_type(this), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -1851,6 +2236,13 @@ ::google::protobuf::uint8* LiteralType::InternalSerializeWithCachedSizesToArray( 6, HasBitSetters::metadata(this), target); } + // .flyteidl.core.EnumType enum_type = 7; + if (has_enum_type()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 7, HasBitSetters::enum_type(this), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -1914,6 +2306,13 @@ size_t LiteralType::ByteSizeLong() const { *type_.blob_); break; } + // .flyteidl.core.EnumType enum_type = 7; + case kEnumType: { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *type_.enum_type_); + break; + } case TYPE_NOT_SET: { break; } @@ -1969,6 +2368,10 @@ void LiteralType::MergeFrom(const LiteralType& from) { mutable_blob()->::flyteidl::core::BlobType::MergeFrom(from.blob()); break; } + case kEnumType: { + mutable_enum_type()->::flyteidl::core::EnumType::MergeFrom(from.enum_type()); + break; + } case TYPE_NOT_SET: { break; } @@ -2765,6 +3168,9 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::SchemaType* Arena::CreateMaybeMes template<> PROTOBUF_NOINLINE ::flyteidl::core::BlobType* Arena::CreateMaybeMessage< ::flyteidl::core::BlobType >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::BlobType >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::core::EnumType* Arena::CreateMaybeMessage< ::flyteidl::core::EnumType >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::core::EnumType >(arena); +} template<> PROTOBUF_NOINLINE ::flyteidl::core::LiteralType* Arena::CreateMaybeMessage< ::flyteidl::core::LiteralType >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::LiteralType >(arena); } diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.h index 9764428146..c567d46841 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/types.pb.h @@ -43,7 +43,7 @@ struct TableStruct_flyteidl_2fcore_2ftypes_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[6] + static const ::google::protobuf::internal::ParseTable schema[7] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -55,6 +55,9 @@ namespace core { class BlobType; class BlobTypeDefaultTypeInternal; extern BlobTypeDefaultTypeInternal _BlobType_default_instance_; +class EnumType; +class EnumTypeDefaultTypeInternal; +extern EnumTypeDefaultTypeInternal _EnumType_default_instance_; class Error; class ErrorDefaultTypeInternal; extern ErrorDefaultTypeInternal _Error_default_instance_; @@ -75,6 +78,7 @@ extern SchemaType_SchemaColumnDefaultTypeInternal _SchemaType_SchemaColumn_defau namespace google { namespace protobuf { template<> ::flyteidl::core::BlobType* Arena::CreateMaybeMessage<::flyteidl::core::BlobType>(Arena*); +template<> ::flyteidl::core::EnumType* Arena::CreateMaybeMessage<::flyteidl::core::EnumType>(Arena*); template<> ::flyteidl::core::Error* Arena::CreateMaybeMessage<::flyteidl::core::Error>(Arena*); template<> ::flyteidl::core::LiteralType* Arena::CreateMaybeMessage<::flyteidl::core::LiteralType>(Arena*); template<> ::flyteidl::core::OutputReference* Arena::CreateMaybeMessage<::flyteidl::core::OutputReference>(Arena*); @@ -596,6 +600,134 @@ class BlobType final : }; // ------------------------------------------------------------------- +class EnumType final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.EnumType) */ { + public: + EnumType(); + virtual ~EnumType(); + + EnumType(const EnumType& from); + + inline EnumType& operator=(const EnumType& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + EnumType(EnumType&& from) noexcept + : EnumType() { + *this = ::std::move(from); + } + + inline EnumType& operator=(EnumType&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const EnumType& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const EnumType* internal_default_instance() { + return reinterpret_cast( + &_EnumType_default_instance_); + } + static constexpr int kIndexInFileMessages = + 3; + + void Swap(EnumType* other); + friend void swap(EnumType& a, EnumType& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline EnumType* New() const final { + return CreateMaybeMessage(nullptr); + } + + EnumType* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const EnumType& from); + void MergeFrom(const EnumType& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(EnumType* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated string values = 1; + int values_size() const; + void clear_values(); + static const int kValuesFieldNumber = 1; + const ::std::string& values(int index) const; + ::std::string* mutable_values(int index); + void set_values(int index, const ::std::string& value); + #if LANG_CXX11 + void set_values(int index, ::std::string&& value); + #endif + void set_values(int index, const char* value); + void set_values(int index, const char* value, size_t size); + ::std::string* add_values(); + void add_values(const ::std::string& value); + #if LANG_CXX11 + void add_values(::std::string&& value); + #endif + void add_values(const char* value); + void add_values(const char* value, size_t size); + const ::google::protobuf::RepeatedPtrField<::std::string>& values() const; + ::google::protobuf::RepeatedPtrField<::std::string>* mutable_values(); + + // @@protoc_insertion_point(class_scope:flyteidl.core.EnumType) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::RepeatedPtrField<::std::string> values_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fcore_2ftypes_2eproto; +}; +// ------------------------------------------------------------------- + class LiteralType final : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.LiteralType) */ { public: @@ -634,6 +766,7 @@ class LiteralType final : kCollectionType = 3, kMapValueType = 4, kBlob = 5, + kEnumType = 7, TYPE_NOT_SET = 0, }; @@ -643,7 +776,7 @@ class LiteralType final : &_LiteralType_default_instance_); } static constexpr int kIndexInFileMessages = - 3; + 4; void Swap(LiteralType* other); friend void swap(LiteralType& a, LiteralType& b) { @@ -754,6 +887,15 @@ class LiteralType final : ::flyteidl::core::BlobType* mutable_blob(); void set_allocated_blob(::flyteidl::core::BlobType* blob); + // .flyteidl.core.EnumType enum_type = 7; + bool has_enum_type() const; + void clear_enum_type(); + static const int kEnumTypeFieldNumber = 7; + const ::flyteidl::core::EnumType& enum_type() const; + ::flyteidl::core::EnumType* release_enum_type(); + ::flyteidl::core::EnumType* mutable_enum_type(); + void set_allocated_enum_type(::flyteidl::core::EnumType* enum_type); + void clear_type(); TypeCase type_case() const; // @@protoc_insertion_point(class_scope:flyteidl.core.LiteralType) @@ -764,6 +906,7 @@ class LiteralType final : void set_has_collection_type(); void set_has_map_value_type(); void set_has_blob(); + void set_has_enum_type(); inline bool has_type() const; inline void clear_has_type(); @@ -777,6 +920,7 @@ class LiteralType final : ::flyteidl::core::LiteralType* collection_type_; ::flyteidl::core::LiteralType* map_value_type_; ::flyteidl::core::BlobType* blob_; + ::flyteidl::core::EnumType* enum_type_; } type_; mutable ::google::protobuf::internal::CachedSize _cached_size_; ::google::protobuf::uint32 _oneof_case_[1]; @@ -823,7 +967,7 @@ class OutputReference final : &_OutputReference_default_instance_); } static constexpr int kIndexInFileMessages = - 4; + 5; void Swap(OutputReference* other); friend void swap(OutputReference& a, OutputReference& b) { @@ -958,7 +1102,7 @@ class Error final : &_Error_default_instance_); } static constexpr int kIndexInFileMessages = - 5; + 6; void Swap(Error* other); friend void swap(Error& a, Error& b) { @@ -1238,6 +1382,79 @@ inline void BlobType::set_dimensionality(::flyteidl::core::BlobType_BlobDimensio // ------------------------------------------------------------------- +// EnumType + +// repeated string values = 1; +inline int EnumType::values_size() const { + return values_.size(); +} +inline void EnumType::clear_values() { + values_.Clear(); +} +inline const ::std::string& EnumType::values(int index) const { + // @@protoc_insertion_point(field_get:flyteidl.core.EnumType.values) + return values_.Get(index); +} +inline ::std::string* EnumType::mutable_values(int index) { + // @@protoc_insertion_point(field_mutable:flyteidl.core.EnumType.values) + return values_.Mutable(index); +} +inline void EnumType::set_values(int index, const ::std::string& value) { + // @@protoc_insertion_point(field_set:flyteidl.core.EnumType.values) + values_.Mutable(index)->assign(value); +} +#if LANG_CXX11 +inline void EnumType::set_values(int index, ::std::string&& value) { + // @@protoc_insertion_point(field_set:flyteidl.core.EnumType.values) + values_.Mutable(index)->assign(std::move(value)); +} +#endif +inline void EnumType::set_values(int index, const char* value) { + GOOGLE_DCHECK(value != nullptr); + values_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:flyteidl.core.EnumType.values) +} +inline void EnumType::set_values(int index, const char* value, size_t size) { + values_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.EnumType.values) +} +inline ::std::string* EnumType::add_values() { + // @@protoc_insertion_point(field_add_mutable:flyteidl.core.EnumType.values) + return values_.Add(); +} +inline void EnumType::add_values(const ::std::string& value) { + values_.Add()->assign(value); + // @@protoc_insertion_point(field_add:flyteidl.core.EnumType.values) +} +#if LANG_CXX11 +inline void EnumType::add_values(::std::string&& value) { + values_.Add(std::move(value)); + // @@protoc_insertion_point(field_add:flyteidl.core.EnumType.values) +} +#endif +inline void EnumType::add_values(const char* value) { + GOOGLE_DCHECK(value != nullptr); + values_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:flyteidl.core.EnumType.values) +} +inline void EnumType::add_values(const char* value, size_t size) { + values_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:flyteidl.core.EnumType.values) +} +inline const ::google::protobuf::RepeatedPtrField<::std::string>& +EnumType::values() const { + // @@protoc_insertion_point(field_list:flyteidl.core.EnumType.values) + return values_; +} +inline ::google::protobuf::RepeatedPtrField<::std::string>* +EnumType::mutable_values() { + // @@protoc_insertion_point(field_mutable_list:flyteidl.core.EnumType.values) + return &values_; +} + +// ------------------------------------------------------------------- + // LiteralType // .flyteidl.core.SimpleType simple = 1; @@ -1433,6 +1650,47 @@ inline ::flyteidl::core::BlobType* LiteralType::mutable_blob() { return type_.blob_; } +// .flyteidl.core.EnumType enum_type = 7; +inline bool LiteralType::has_enum_type() const { + return type_case() == kEnumType; +} +inline void LiteralType::set_has_enum_type() { + _oneof_case_[0] = kEnumType; +} +inline void LiteralType::clear_enum_type() { + if (has_enum_type()) { + delete type_.enum_type_; + clear_has_type(); + } +} +inline ::flyteidl::core::EnumType* LiteralType::release_enum_type() { + // @@protoc_insertion_point(field_release:flyteidl.core.LiteralType.enum_type) + if (has_enum_type()) { + clear_has_type(); + ::flyteidl::core::EnumType* temp = type_.enum_type_; + type_.enum_type_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline const ::flyteidl::core::EnumType& LiteralType::enum_type() const { + // @@protoc_insertion_point(field_get:flyteidl.core.LiteralType.enum_type) + return has_enum_type() + ? *type_.enum_type_ + : *reinterpret_cast< ::flyteidl::core::EnumType*>(&::flyteidl::core::_EnumType_default_instance_); +} +inline ::flyteidl::core::EnumType* LiteralType::mutable_enum_type() { + if (!has_enum_type()) { + clear_type(); + set_has_enum_type(); + type_.enum_type_ = CreateMaybeMessage< ::flyteidl::core::EnumType >( + GetArenaNoVirtual()); + } + // @@protoc_insertion_point(field_mutable:flyteidl.core.LiteralType.enum_type) + return type_.enum_type_; +} + // .google.protobuf.Struct metadata = 6; inline bool LiteralType::has_metadata() const { return this != internal_default_instance() && metadata_ != nullptr; @@ -1721,6 +1979,8 @@ inline void Error::set_allocated_message(::std::string* message) { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/flyteidl/gen/pb-go/flyteidl/core/types.pb.go b/flyteidl/gen/pb-go/flyteidl/core/types.pb.go index bddd1bda90..891556dde2 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/types.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/types.pb.go @@ -273,6 +273,49 @@ func (m *BlobType) GetDimensionality() BlobType_BlobDimensionality { return BlobType_SINGLE } +// Enables declaring enum types, with predefined string values +// For len(values) > 0, the first value in the ordered list is regarded as the default value. If you wish +// To provide no defaults, make the first value as undefined. +type EnumType struct { + // Predefined set of enum values. + Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EnumType) Reset() { *m = EnumType{} } +func (m *EnumType) String() string { return proto.CompactTextString(m) } +func (*EnumType) ProtoMessage() {} +func (*EnumType) Descriptor() ([]byte, []int) { + return fileDescriptor_51e8add38f4caaed, []int{2} +} + +func (m *EnumType) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumType.Unmarshal(m, b) +} +func (m *EnumType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumType.Marshal(b, m, deterministic) +} +func (m *EnumType) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumType.Merge(m, src) +} +func (m *EnumType) XXX_Size() int { + return xxx_messageInfo_EnumType.Size(m) +} +func (m *EnumType) XXX_DiscardUnknown() { + xxx_messageInfo_EnumType.DiscardUnknown(m) +} + +var xxx_messageInfo_EnumType proto.InternalMessageInfo + +func (m *EnumType) GetValues() []string { + if m != nil { + return m.Values + } + return nil +} + // Defines a strong type to allow type checking between interfaces. type LiteralType struct { // Types that are valid to be assigned to Type: @@ -281,6 +324,7 @@ type LiteralType struct { // *LiteralType_CollectionType // *LiteralType_MapValueType // *LiteralType_Blob + // *LiteralType_EnumType Type isLiteralType_Type `protobuf_oneof:"type"` // This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking. This might be used by // consumers to identify special behavior or display extended information for the type. @@ -294,7 +338,7 @@ func (m *LiteralType) Reset() { *m = LiteralType{} } func (m *LiteralType) String() string { return proto.CompactTextString(m) } func (*LiteralType) ProtoMessage() {} func (*LiteralType) Descriptor() ([]byte, []int) { - return fileDescriptor_51e8add38f4caaed, []int{2} + return fileDescriptor_51e8add38f4caaed, []int{3} } func (m *LiteralType) XXX_Unmarshal(b []byte) error { @@ -339,6 +383,10 @@ type LiteralType_Blob struct { Blob *BlobType `protobuf:"bytes,5,opt,name=blob,proto3,oneof"` } +type LiteralType_EnumType struct { + EnumType *EnumType `protobuf:"bytes,7,opt,name=enum_type,json=enumType,proto3,oneof"` +} + func (*LiteralType_Simple) isLiteralType_Type() {} func (*LiteralType_Schema) isLiteralType_Type() {} @@ -349,6 +397,8 @@ func (*LiteralType_MapValueType) isLiteralType_Type() {} func (*LiteralType_Blob) isLiteralType_Type() {} +func (*LiteralType_EnumType) isLiteralType_Type() {} + func (m *LiteralType) GetType() isLiteralType_Type { if m != nil { return m.Type @@ -391,6 +441,13 @@ func (m *LiteralType) GetBlob() *BlobType { return nil } +func (m *LiteralType) GetEnumType() *EnumType { + if x, ok := m.GetType().(*LiteralType_EnumType); ok { + return x.EnumType + } + return nil +} + func (m *LiteralType) GetMetadata() *_struct.Struct { if m != nil { return m.Metadata @@ -406,6 +463,7 @@ func (*LiteralType) XXX_OneofWrappers() []interface{} { (*LiteralType_CollectionType)(nil), (*LiteralType_MapValueType)(nil), (*LiteralType_Blob)(nil), + (*LiteralType_EnumType)(nil), } } @@ -425,7 +483,7 @@ func (m *OutputReference) Reset() { *m = OutputReference{} } func (m *OutputReference) String() string { return proto.CompactTextString(m) } func (*OutputReference) ProtoMessage() {} func (*OutputReference) Descriptor() ([]byte, []int) { - return fileDescriptor_51e8add38f4caaed, []int{3} + return fileDescriptor_51e8add38f4caaed, []int{4} } func (m *OutputReference) XXX_Unmarshal(b []byte) error { @@ -475,7 +533,7 @@ func (m *Error) Reset() { *m = Error{} } func (m *Error) String() string { return proto.CompactTextString(m) } func (*Error) ProtoMessage() {} func (*Error) Descriptor() ([]byte, []int) { - return fileDescriptor_51e8add38f4caaed, []int{4} + return fileDescriptor_51e8add38f4caaed, []int{5} } func (m *Error) XXX_Unmarshal(b []byte) error { @@ -517,6 +575,7 @@ func init() { proto.RegisterType((*SchemaType)(nil), "flyteidl.core.SchemaType") proto.RegisterType((*SchemaType_SchemaColumn)(nil), "flyteidl.core.SchemaType.SchemaColumn") proto.RegisterType((*BlobType)(nil), "flyteidl.core.BlobType") + proto.RegisterType((*EnumType)(nil), "flyteidl.core.EnumType") proto.RegisterType((*LiteralType)(nil), "flyteidl.core.LiteralType") proto.RegisterType((*OutputReference)(nil), "flyteidl.core.OutputReference") proto.RegisterType((*Error)(nil), "flyteidl.core.Error") @@ -525,46 +584,48 @@ func init() { func init() { proto.RegisterFile("flyteidl/core/types.proto", fileDescriptor_51e8add38f4caaed) } var fileDescriptor_51e8add38f4caaed = []byte{ - // 648 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0x9b, 0x4a, - 0x14, 0x36, 0xfe, 0xf7, 0xb1, 0xe3, 0xa0, 0x59, 0xdc, 0x38, 0xd1, 0x5d, 0x44, 0xe8, 0xea, 0x2a, - 0x8a, 0x14, 0x90, 0x92, 0xaa, 0xdd, 0x74, 0x51, 0x3b, 0xa1, 0x0e, 0xaa, 0x03, 0xd5, 0x84, 0x54, - 0x6a, 0x37, 0xd6, 0x00, 0x63, 0x82, 0x04, 0x0c, 0x82, 0x21, 0x92, 0x5f, 0xa0, 0xef, 0xd1, 0x55, - 0x5f, 0xa7, 0x4f, 0xd2, 0x67, 0xa8, 0x18, 0x70, 0x6c, 0x1c, 0x55, 0xca, 0xee, 0x1c, 0xce, 0xf7, - 0x7d, 0x9c, 0x73, 0x66, 0xbe, 0x81, 0xe3, 0x55, 0xb8, 0xe6, 0x34, 0xf0, 0x42, 0xcd, 0x65, 0x29, - 0xd5, 0xf8, 0x3a, 0xa1, 0x99, 0x9a, 0xa4, 0x8c, 0x33, 0x74, 0xb0, 0x29, 0xa9, 0x45, 0xe9, 0xe4, - 0x5f, 0x9f, 0x31, 0x3f, 0xa4, 0x9a, 0x28, 0x3a, 0xf9, 0x4a, 0xcb, 0x78, 0x9a, 0xbb, 0xbc, 0x04, - 0x2b, 0x3f, 0x9a, 0x00, 0xf7, 0xee, 0x23, 0x8d, 0x88, 0xbd, 0x4e, 0x28, 0xfa, 0x00, 0x3d, 0x97, - 0x85, 0x79, 0x14, 0x67, 0x93, 0xd6, 0x69, 0xeb, 0x6c, 0x78, 0xf9, 0xbf, 0x5a, 0x53, 0x53, 0xb7, - 0xd8, 0x2a, 0xbc, 0x16, 0x70, 0xbc, 0xa1, 0x9d, 0xfc, 0x92, 0x60, 0xb4, 0x5b, 0x41, 0x08, 0xda, - 0x31, 0x89, 0xe8, 0x44, 0x3a, 0x95, 0xce, 0x06, 0x58, 0xc4, 0xe8, 0x13, 0xb4, 0x8b, 0x8e, 0x27, - 0xcd, 0x53, 0xe9, 0x6c, 0x7c, 0xf9, 0xee, 0x75, 0xff, 0xa8, 0x25, 0x45, 0x15, 0x0b, 0x11, 0x65, - 0x09, 0xf2, 0x7e, 0x05, 0x0d, 0xa1, 0x67, 0x98, 0xb6, 0x3e, 0xd7, 0xb1, 0xdc, 0x40, 0x03, 0xe8, - 0x7c, 0x5c, 0x58, 0x53, 0x5b, 0x96, 0x10, 0x40, 0xf7, 0xde, 0xc6, 0x86, 0x39, 0x97, 0x9b, 0x05, - 0x66, 0x66, 0x59, 0x0b, 0x7d, 0x6a, 0xca, 0x2d, 0x34, 0x82, 0xfe, 0xcd, 0xd4, 0xd6, 0x6d, 0xe3, - 0x4e, 0x97, 0xdb, 0x22, 0x7b, 0xc0, 0x53, 0xdb, 0xb0, 0x4c, 0xb9, 0xa3, 0xfc, 0x94, 0xa0, 0x3f, - 0x0b, 0x99, 0x23, 0x94, 0xff, 0x81, 0xee, 0x8a, 0xa5, 0x11, 0xe1, 0xd5, 0x40, 0x55, 0x86, 0x30, - 0x8c, 0xbd, 0x20, 0xa2, 0x71, 0x16, 0xb0, 0x98, 0x84, 0x01, 0x5f, 0x57, 0xc3, 0x9d, 0xef, 0x0d, - 0xb7, 0x11, 0x12, 0xc1, 0x4d, 0x8d, 0x81, 0xf7, 0x14, 0x14, 0x0d, 0xd0, 0x4b, 0x94, 0x98, 0xc1, - 0x30, 0xe7, 0x0b, 0x5d, 0x6e, 0xa0, 0x03, 0x18, 0xdc, 0x3d, 0x2c, 0x6c, 0xe3, 0xf3, 0x14, 0xdb, - 0xb2, 0xa4, 0xfc, 0x6e, 0xc2, 0x70, 0x11, 0x70, 0x9a, 0x92, 0x50, 0x34, 0x7b, 0x05, 0xdd, 0x2c, - 0x88, 0x92, 0xb0, 0xdc, 0xfe, 0xf8, 0xf2, 0x78, 0x7f, 0xd3, 0xa2, 0x58, 0x40, 0x6f, 0x1b, 0xb8, - 0x82, 0x0a, 0x92, 0xd8, 0xa7, 0x98, 0x60, 0xf8, 0x92, 0xf4, 0x7c, 0x3c, 0x82, 0x24, 0x32, 0xa4, - 0xc3, 0xa1, 0xcb, 0xc2, 0x90, 0xba, 0x3c, 0x60, 0xf1, 0x52, 0x1c, 0x6e, 0x4b, 0xb0, 0x4f, 0xf6, - 0xd8, 0x3b, 0xed, 0xdd, 0x36, 0xf0, 0x78, 0x4b, 0x12, 0x0d, 0xcf, 0x60, 0x1c, 0x91, 0x64, 0xf9, - 0x44, 0xc2, 0x9c, 0x96, 0x2a, 0xed, 0x57, 0xa8, 0x8c, 0x22, 0x92, 0x7c, 0x29, 0x28, 0x42, 0xe3, - 0x02, 0xda, 0x4e, 0xc8, 0x9c, 0x49, 0x47, 0x30, 0x8f, 0xfe, 0xb2, 0xff, 0xdb, 0x06, 0x16, 0x30, - 0x74, 0x05, 0xfd, 0x88, 0x72, 0xe2, 0x11, 0x4e, 0x26, 0xdd, 0x8a, 0x52, 0x5a, 0x46, 0xdd, 0x58, - 0x46, 0xbd, 0x17, 0x96, 0xc1, 0xcf, 0xc0, 0x59, 0xb7, 0xbc, 0xc0, 0xca, 0x7b, 0x38, 0xb4, 0x72, - 0x9e, 0xe4, 0x1c, 0xd3, 0x15, 0x4d, 0x69, 0xec, 0x52, 0x74, 0x04, 0xbd, 0x98, 0x79, 0x74, 0x19, - 0x78, 0x9b, 0x1b, 0x52, 0xa4, 0x86, 0x87, 0x64, 0x68, 0x3d, 0x91, 0x54, 0x2c, 0x75, 0x80, 0x8b, - 0x50, 0x99, 0x43, 0x47, 0x4f, 0x53, 0x96, 0xa2, 0xff, 0x60, 0xbc, 0x22, 0x41, 0x48, 0xbd, 0x65, - 0x9d, 0x3a, 0x2a, 0xbf, 0x9a, 0xa5, 0xc0, 0x04, 0x7a, 0x11, 0xcd, 0x32, 0xe2, 0xd3, 0x4a, 0x64, - 0x93, 0x9e, 0x7f, 0x97, 0x00, 0xb6, 0x67, 0x89, 0xfa, 0xd0, 0x36, 0x2d, 0xb3, 0xb8, 0x1f, 0x3b, - 0x3e, 0x90, 0xb6, 0x3e, 0x68, 0xee, 0xf8, 0xa0, 0xb5, 0xeb, 0x83, 0x76, 0xcd, 0x07, 0x9d, 0x9a, - 0x0f, 0xba, 0x05, 0x69, 0x66, 0x98, 0x53, 0xfc, 0x55, 0xee, 0x15, 0x5a, 0x3a, 0xc6, 0x16, 0x96, - 0xfb, 0x95, 0xd6, 0xc3, 0xb5, 0x2d, 0x0f, 0x66, 0x6f, 0xbf, 0xbd, 0xf1, 0x03, 0xfe, 0x98, 0x3b, - 0xaa, 0xcb, 0x22, 0x4d, 0x6c, 0x9e, 0xa5, 0xbe, 0xf6, 0xfc, 0x58, 0xf9, 0x34, 0xd6, 0x12, 0xe7, - 0xc2, 0x67, 0x5a, 0xed, 0xfd, 0x72, 0xba, 0x62, 0xd5, 0x57, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, - 0xf8, 0x64, 0x13, 0x14, 0xd7, 0x04, 0x00, 0x00, + // 682 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xcd, 0x6e, 0x9b, 0x40, + 0x10, 0x36, 0xc6, 0xbf, 0x63, 0xc7, 0x41, 0x7b, 0x68, 0x9c, 0xa8, 0x07, 0x0b, 0x55, 0x55, 0x14, + 0x29, 0x46, 0x4a, 0xaa, 0xf4, 0xd2, 0x43, 0xed, 0x84, 0xda, 0xa8, 0x0e, 0xae, 0x36, 0xa4, 0x52, + 0x7b, 0xb1, 0xd6, 0x78, 0x4d, 0x90, 0x80, 0x45, 0xb0, 0x44, 0xf2, 0x0b, 0xf4, 0x3d, 0x7a, 0x69, + 0x5f, 0xa7, 0x8f, 0x54, 0xb1, 0x40, 0x6c, 0x9c, 0x56, 0xca, 0x6d, 0x87, 0xf9, 0xbe, 0x8f, 0x99, + 0x9d, 0xf9, 0x16, 0x8e, 0xd7, 0xde, 0x86, 0x53, 0x77, 0xe5, 0x69, 0x36, 0x8b, 0xa8, 0xc6, 0x37, + 0x21, 0x8d, 0x87, 0x61, 0xc4, 0x38, 0x43, 0x07, 0x45, 0x6a, 0x98, 0xa6, 0x4e, 0x5e, 0x3b, 0x8c, + 0x39, 0x1e, 0xd5, 0x44, 0x72, 0x99, 0xac, 0xb5, 0x98, 0x47, 0x89, 0xcd, 0x33, 0xb0, 0xfa, 0xb3, + 0x0a, 0x70, 0x67, 0x3f, 0x50, 0x9f, 0x58, 0x9b, 0x90, 0xa2, 0x8f, 0xd0, 0xb4, 0x99, 0x97, 0xf8, + 0x41, 0xdc, 0x97, 0x07, 0xf2, 0x69, 0xe7, 0xe2, 0xed, 0xb0, 0xa4, 0x36, 0xdc, 0x62, 0xf3, 0xe3, + 0xb5, 0x80, 0xe3, 0x82, 0x76, 0xf2, 0x47, 0x82, 0xee, 0x6e, 0x06, 0x21, 0xa8, 0x05, 0xc4, 0xa7, + 0x7d, 0x69, 0x20, 0x9d, 0xb6, 0xb1, 0x38, 0xa3, 0xcf, 0x50, 0x4b, 0x2b, 0xee, 0x57, 0x07, 0xd2, + 0x69, 0xef, 0xe2, 0xfd, 0xcb, 0xfe, 0x51, 0x0a, 0xd2, 0x2c, 0x16, 0x22, 0xea, 0x02, 0x94, 0xfd, + 0x0c, 0xea, 0x40, 0xd3, 0x30, 0x2d, 0x7d, 0xa2, 0x63, 0xa5, 0x82, 0xda, 0x50, 0xff, 0x34, 0x9b, + 0x8f, 0x2c, 0x45, 0x42, 0x00, 0x8d, 0x3b, 0x0b, 0x1b, 0xe6, 0x44, 0xa9, 0xa6, 0x98, 0xf1, 0x7c, + 0x3e, 0xd3, 0x47, 0xa6, 0x22, 0xa3, 0x2e, 0xb4, 0x6e, 0x46, 0x96, 0x6e, 0x19, 0xb7, 0xba, 0x52, + 0x13, 0xd1, 0x3d, 0x1e, 0x59, 0xc6, 0xdc, 0x54, 0xea, 0xea, 0x6f, 0x09, 0x5a, 0x63, 0x8f, 0x2d, + 0x85, 0xf2, 0x2b, 0x68, 0xac, 0x59, 0xe4, 0x13, 0x9e, 0x37, 0x94, 0x47, 0x08, 0x43, 0x6f, 0xe5, + 0xfa, 0x34, 0x88, 0x5d, 0x16, 0x10, 0xcf, 0xe5, 0x9b, 0xbc, 0xb9, 0xb3, 0xbd, 0xe6, 0x0a, 0x21, + 0x71, 0xb8, 0x29, 0x31, 0xf0, 0x9e, 0x82, 0xaa, 0x01, 0x7a, 0x8e, 0x12, 0x3d, 0x18, 0xe6, 0x64, + 0xa6, 0x2b, 0x15, 0x74, 0x00, 0xed, 0xdb, 0xfb, 0x99, 0x65, 0x7c, 0x19, 0x61, 0x4b, 0x91, 0x54, + 0x15, 0x5a, 0x7a, 0x90, 0xf8, 0x45, 0xa1, 0x8f, 0xc4, 0x4b, 0x68, 0xdc, 0x97, 0x06, 0x72, 0x5a, + 0x68, 0x16, 0xa9, 0xbf, 0x64, 0xe8, 0xcc, 0x5c, 0x4e, 0x23, 0xe2, 0x09, 0xdc, 0x25, 0x34, 0x62, + 0xd7, 0x0f, 0xbd, 0x6c, 0x42, 0xbd, 0x8b, 0xe3, 0xfd, 0x69, 0x88, 0x64, 0x0a, 0x9d, 0x56, 0x70, + 0x0e, 0x15, 0x24, 0x71, 0xe7, 0xa2, 0xcb, 0xce, 0x73, 0xd2, 0xd3, 0x08, 0x05, 0x49, 0x44, 0x48, + 0x87, 0x43, 0x9b, 0x79, 0x1e, 0xb5, 0xb9, 0xcb, 0x82, 0x85, 0x58, 0x00, 0x59, 0xb0, 0x4f, 0xf6, + 0xd8, 0x3b, 0xe5, 0x4d, 0x2b, 0xb8, 0xb7, 0x25, 0x89, 0x82, 0xc7, 0xd0, 0xf3, 0x49, 0xb8, 0x10, + 0xed, 0x64, 0x2a, 0xb5, 0x17, 0xa8, 0x74, 0x7d, 0x12, 0x7e, 0x4d, 0x29, 0x42, 0xe3, 0x1c, 0x6a, + 0x4b, 0x8f, 0x2d, 0xfb, 0x75, 0xc1, 0x3c, 0xfa, 0xcf, 0x8c, 0xa6, 0x15, 0x2c, 0x60, 0xe8, 0x0a, + 0xda, 0x34, 0x48, 0xfc, 0xec, 0x6f, 0xcd, 0x7f, 0x72, 0x8a, 0x7b, 0x9f, 0x56, 0x70, 0x8b, 0x16, + 0x33, 0xb8, 0x84, 0x96, 0x4f, 0x39, 0x59, 0x11, 0x4e, 0xfa, 0x8d, 0x9c, 0x96, 0xd9, 0x71, 0x58, + 0xd8, 0x71, 0x78, 0x27, 0xec, 0x88, 0x9f, 0x80, 0xe3, 0x46, 0x66, 0x0e, 0xf5, 0x03, 0x1c, 0xce, + 0x13, 0x1e, 0x26, 0x1c, 0xd3, 0x35, 0x8d, 0x68, 0x60, 0x53, 0x74, 0x04, 0xcd, 0x80, 0xad, 0xe8, + 0xc2, 0x5d, 0x15, 0xdb, 0x97, 0x86, 0xc6, 0x0a, 0x29, 0x20, 0x3f, 0x92, 0x48, 0x0c, 0xa3, 0x8d, + 0xd3, 0xa3, 0x3a, 0x81, 0xba, 0x1e, 0x45, 0x2c, 0x42, 0x6f, 0xa0, 0xb7, 0x26, 0xae, 0x47, 0x57, + 0x8b, 0x32, 0xb5, 0x9b, 0x7d, 0x35, 0x33, 0x81, 0x3e, 0x34, 0x7d, 0x1a, 0xc7, 0xc4, 0xa1, 0xb9, + 0x48, 0x11, 0x9e, 0xfd, 0x90, 0x00, 0xb6, 0x3b, 0x80, 0x5a, 0x50, 0x33, 0xe7, 0x66, 0xba, 0x7b, + 0x3b, 0x1e, 0x93, 0xb6, 0x1e, 0xab, 0xee, 0x78, 0x4c, 0xde, 0xf5, 0x58, 0xad, 0xe4, 0xb1, 0x7a, + 0xc9, 0x63, 0x8d, 0x94, 0x34, 0x36, 0xcc, 0x11, 0xfe, 0xa6, 0x34, 0x53, 0x2d, 0x1d, 0xe3, 0x39, + 0x56, 0x5a, 0xb9, 0xd6, 0xfd, 0xb5, 0xa5, 0xb4, 0xc7, 0x57, 0xdf, 0xdf, 0x39, 0x2e, 0x7f, 0x48, + 0x96, 0x43, 0x9b, 0xf9, 0x9a, 0xb8, 0x7d, 0x16, 0x39, 0xda, 0xd3, 0x43, 0xe8, 0xd0, 0x40, 0x0b, + 0x97, 0xe7, 0x0e, 0xd3, 0x4a, 0x6f, 0xe3, 0xb2, 0x21, 0xae, 0xfa, 0xf2, 0x6f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xbb, 0x4e, 0x3f, 0xf5, 0x33, 0x05, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/types.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/types.pb.validate.go index 8b414ba8e4..4582088832 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/types.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/types.pb.validate.go @@ -183,6 +183,70 @@ var _ interface { ErrorName() string } = BlobTypeValidationError{} +// Validate checks the field values on EnumType with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *EnumType) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// EnumTypeValidationError is the validation error returned by +// EnumType.Validate if the designated constraints aren't met. +type EnumTypeValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EnumTypeValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EnumTypeValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EnumTypeValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EnumTypeValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EnumTypeValidationError) ErrorName() string { return "EnumTypeValidationError" } + +// Error satisfies the builtin error interface +func (e EnumTypeValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEnumType.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EnumTypeValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EnumTypeValidationError{} + // Validate checks the field values on LiteralType with the rules defined in // the proto definition for this message. If any rules are violated, an error // is returned. @@ -254,6 +318,18 @@ func (m *LiteralType) Validate() error { } } + case *LiteralType_EnumType: + + if v, ok := interface{}(m.GetEnumType()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LiteralTypeValidationError{ + field: "EnumType", + reason: "embedded message failed validation", + cause: err, + } + } + } + } return nil diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index abda61049c..8878c75dac 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -4982,6 +4982,19 @@ }, "description": "This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.\nFlyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path\nAny outputs generated by the user container - within output_path are automatically uploaded." }, + "coreEnumType": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Predefined set of enum values." + } + }, + "description": "Enables declaring enum types, with predefined string values\nFor len(values) \u003e 0, the first value in the ordered list is regarded as the default value. If you wish\nTo provide no defaults, make the first value as undefined." + }, "coreError": { "type": "object", "properties": { @@ -5225,6 +5238,10 @@ "$ref": "#/definitions/coreBlobType", "description": "A blob might have specialized implementation details depending on associated metadata." }, + "enum_type": { + "$ref": "#/definitions/coreEnumType", + "description": "Defines an enum with pre-defined string values." + }, "metadata": { "$ref": "#/definitions/protobufStruct", "description": "This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking. This might be used by\nconsumers to identify special behavior or display extended information for the type." diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 6eebe85552..8c0485b724 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -205,6 +205,7 @@ Class | Method | HTTP request | Description - [CoreContainer](docs/CoreContainer.md) - [CoreContainerPort](docs/CoreContainerPort.md) - [CoreDataLoadingConfig](docs/CoreDataLoadingConfig.md) + - [CoreEnumType](docs/CoreEnumType.md) - [CoreError](docs/CoreError.md) - [CoreExecutionError](docs/CoreExecutionError.md) - [CoreIdentifier](docs/CoreIdentifier.md) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index f29cece06b..3f70e2d9e8 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -3845,6 +3845,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} updated_at: "2000-01-23T04:56:07.000+00:00" created_at: "2000-01-23T04:56:07.000+00:00" @@ -3922,6 +3926,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true spec: @@ -4060,6 +4068,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true security_context: @@ -4161,6 +4173,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} updated_at: "2000-01-23T04:56:07.000+00:00" created_at: "2000-01-23T04:56:07.000+00:00" @@ -4238,6 +4254,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true adminLaunchPlanCreateRequest: @@ -4304,6 +4324,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} updated_at: "2000-01-23T04:56:07.000+00:00" created_at: "2000-01-23T04:56:07.000+00:00" @@ -4381,6 +4405,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true spec: @@ -4519,6 +4547,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true security_context: @@ -4602,6 +4634,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} updated_at: "2000-01-23T04:56:07.000+00:00" created_at: "2000-01-23T04:56:07.000+00:00" @@ -4679,6 +4715,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true spec: @@ -4817,6 +4857,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true security_context: @@ -5099,6 +5143,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true security_context: @@ -6471,6 +6519,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -6497,6 +6549,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -7297,6 +7353,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -7323,6 +7383,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -7451,6 +7515,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -7477,6 +7545,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -7638,6 +7710,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -7664,6 +7740,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -8499,6 +8579,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -8525,6 +8609,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -9240,6 +9328,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -9266,6 +9358,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -9443,6 +9539,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -9469,6 +9569,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -9944,6 +10048,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -9970,6 +10078,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -10140,6 +10252,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -10166,6 +10282,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -11099,6 +11219,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -11125,6 +11249,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -11925,6 +12053,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -11951,6 +12083,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -12079,6 +12215,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -12105,6 +12245,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -12266,6 +12410,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -12292,6 +12440,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -13127,6 +13279,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -13153,6 +13309,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -14102,6 +14262,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -14128,6 +14292,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -14928,6 +15096,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -14954,6 +15126,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -15082,6 +15258,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -15108,6 +15288,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -15269,6 +15453,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -15295,6 +15483,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -16130,6 +16322,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -16156,6 +16352,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -17049,6 +17249,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -17075,6 +17279,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -17875,6 +18083,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -17901,6 +18113,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -18029,6 +18245,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -18055,6 +18275,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -18216,6 +18440,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -18242,6 +18470,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -19077,6 +19309,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -19103,6 +19339,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -19913,6 +20153,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -19939,6 +20183,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -20739,6 +20987,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -20765,6 +21017,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -20893,6 +21149,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -20919,6 +21179,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -21080,6 +21344,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -21106,6 +21374,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -21941,6 +22213,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -21967,6 +22243,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -22564,6 +22844,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -22590,6 +22874,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -23437,6 +23725,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -23463,6 +23755,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -24290,6 +24586,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -24316,6 +24616,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -25116,6 +25420,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -25142,6 +25450,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -25270,6 +25582,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -25296,6 +25612,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -25457,6 +25777,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -25483,6 +25807,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -26318,6 +26646,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -26344,6 +26676,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -26546,6 +26882,21 @@ definitions: output_path: "output_path" enabled: true input_path: "input_path" + coreEnumType: + type: "object" + properties: + values: + type: "array" + description: "Predefined set of enum values." + items: + type: "string" + description: "Enables declaring enum types, with predefined string values\nFor\ + \ len(values) > 0, the first value in the ordered list is regarded as the default\ + \ value. If you wish\nTo provide no defaults, make the first value as undefined." + example: + values: + - "values" + - "values" coreError: type: "object" properties: @@ -26945,6 +27296,9 @@ definitions: description: "A blob might have specialized implementation details depending\ \ on associated metadata." $ref: "#/definitions/coreBlobType" + enum_type: + description: "Defines an enum with pre-defined string values." + $ref: "#/definitions/coreEnumType" metadata: description: "This field contains type metadata that is descriptive of the\ \ type, but is NOT considered in type-checking. This might be used by\n\ @@ -26973,6 +27327,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} coreNode: type: "object" @@ -27474,6 +27832,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true coreParameterMap: @@ -27558,6 +27920,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} required: true corePrimitive: @@ -28159,6 +28525,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -28185,6 +28555,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -28265,6 +28639,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -28291,6 +28669,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} coreVariable: type: "object" @@ -28325,6 +28707,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} coreVariableMap: type: "object" @@ -28360,6 +28746,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} coreVoid: type: "object" @@ -29288,6 +29678,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -29314,6 +29708,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} eventExternalResourceInfo: type: "object" @@ -30337,6 +30735,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -30363,6 +30765,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -31163,6 +31569,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -31189,6 +31599,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: @@ -31317,6 +31731,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -31343,6 +31761,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -31504,6 +31926,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -31530,6 +31956,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} config: key: "config" @@ -32365,6 +32795,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} inputs: variables: @@ -32391,6 +32825,10 @@ definitions: blob: dimensionality: {} format: "format" + enum_type: + values: + - "values" + - "values" simple: {} connections: upstream: diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_enum_type.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_enum_type.go new file mode 100644 index 0000000000..98925eabcf --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_enum_type.go @@ -0,0 +1,16 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin + +// Enables declaring enum types, with predefined string values For len(values) > 0, the first value in the ordered list is regarded as the default value. If you wish To provide no defaults, make the first value as undefined. +type CoreEnumType struct { + // Predefined set of enum values. + Values []string `json:"values,omitempty"` +} diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_literal_type.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_literal_type.go index aa0a63a63f..0488ec3208 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_literal_type.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_literal_type.go @@ -21,6 +21,8 @@ type CoreLiteralType struct { MapValueType *CoreLiteralType `json:"map_value_type,omitempty"` // A blob might have specialized implementation details depending on associated metadata. Blob *CoreBlobType `json:"blob,omitempty"` + // Defines an enum with pre-defined string values. + EnumType *CoreEnumType `json:"enum_type,omitempty"` // This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking. This might be used by consumers to identify special behavior or display extended information for the type. Metadata *ProtobufStruct `json:"metadata,omitempty"` } diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index d1df8dd8f3..e252152947 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7d\x73\x23\xb9\x91\x27\x8e\xff\xef\x57\x81\x6b\x5f\xc4\x4c\xdb\x12\x35\x33\xde\x75\x78\xb5\x71\xf1\xfb\xb1\x25\x76\x0f\x6f\xd4\x92\x2c\x51\xdd\x3b\x77\xdc\xe0\x81\x55\x20\x09\xab\x08\xd0\x00\x4a\x6a\xda\xe1\xf7\xfe\x0d\x64\x02\x28\x54\xb1\x8a\xcf\x52\x4b\x3d\xdc\x8d\xf0\xb4\x58\x55\x78\x4c\x24\xf2\xf1\x93\xff\xfc\x1d\x21\x6f\xf4\x23\x1d\x8f\x99\x7a\x73\x4a\xde\xfc\xd4\xfa\xe1\xcd\x91\xfd\x8d\x8b\x91\x7c\x73\x4a\xec\x73\x42\xde\x18\x6e\x32\x66\x9f\x8f\xb2\xb9\x61\x3c\xcd\x4e\x34\x53\x0f\x3c\x61\x27\x34\x9d\x72\xd1\x9a\x29\x69\x24\x7c\x48\xc8\x9b\x07\xa6\x34\x97\xc2\xbe\xee\xfe\x49\x84\x34\x44\x33\xf3\xe6\x77\x84\xfc\x0b\x9a\xd7\xc9\x84\x4d\x99\x7e\x73\x4a\xfe\x2f\x7e\x34\x31\x66\xe6\x1b\xb0\xff\xd6\xf6\xdd\xff\x86\x77\x13\x29\x74\x5e\x7a\x99\xce\x66\x19\x4f\xa8\xe1\x52\x9c\xfc\x4d\x4b\x51\xbc\x3b\x53\x32\xcd\x93\x35\xdf\xa5\x66\xa2\x8b\x39\x9e\xd0\x19\x3f\x79\xf8\xf1\x84\x26\x86\x3f\xb0\x41\x46\x73\x91\x4c\x06\xb3\x8c\x0a\x7d\xf2\x4f\x9e\xda\x39\xfe\x8d\x25\xe6\x5f\xf0\x47\x2a\xa7\x94\x0b\xfc\xb7\xa0\x53\xf6\xaf\xd0\x0e\x21\x6f\xc6\xcc\x44\x7f\x12\xf2\x26\x65\x3a\x51\x7c\x66\xdc\xaa\xdc\x30\xa3\x38\x7b\x60\xc4\x4c\x18\xc1\xee\x08\x76\x47\x6c\x77\xc4\xaf\x9a\x9e\xb1\x84\x8f\x38\x4b\xc9\x70\x4e\xb8\x98\xe5\x86\x28\xf6\xf7\x9c\x69\x43\x46\x3c\x33\x4c\xe9\x96\x5b\x32\xe8\x45\xce\x98\x82\x79\x76\x53\xdb\xcb\x07\x66\xda\xd0\xf6\x05\x34\x7d\x9d\x51\x11\xbf\xad\x98\x9e\x49\xa1\x99\x2e\x0d\x95\x90\x37\x3f\xfd\xf0\x43\xe5\xa7\xc5\x19\xb4\x89\xce\x93\x84\x69\x3d\xca\x33\xe2\x5b\x8a\x07\x03\x1f\xc1\x26\xd3\x85\xc6\x08\x79\xf3\x3f\x15\x1b\xd9\x76\x7e\x7f\x92\xb2\x11\x17\xdc\xb6\xab\x91\x96\xa2\xd1\x96\xbe\xfa\xd7\xef\xea\xfe\xfd\xaf\x68\x46\x33\xaa\xe8\x94\xd9\x65\x09\xbb\x8f\xff\x57\x99\x8b\xdd\x2f\xdb\x79\xb1\xa7\xd5\x81\x57\x66\x7b\x49\xa7\x8c\xc8\x11\x6c\x97\xfb\x02\xfe\xad\x98\x96\xb9\x4a\x18\x19\xb2\x4c\x8a\xb1\x26\x46\x2e\xac\x01\x87\x16\x2c\xa9\x55\x9f\xd8\xad\xe4\x8a\xd9\xbd\x32\x2a\x67\x95\xa7\x66\x3e\x83\x41\x6a\xa3\xb8\x18\xc7\x4b\xf1\xaf\xa3\xb5\xa6\x86\x14\xba\xc1\xcc\xf0\x83\xc6\x89\xf5\x45\xdb\xbf\x92\x50\x41\x86\x8c\xd8\x73\xc9\x53\xa6\x58\x4a\xa8\x26\x94\xe8\x7c\xa8\x99\x21\x8f\xdc\x4c\xb8\xb0\x7f\x23\xf9\x26\x7e\xcd\x5e\xce\xda\xc0\x3f\x97\xaf\xcc\x9d\x66\xca\x0e\xfc\x81\xa7\x2c\x25\x0f\x34\xcb\x19\x19\x49\x55\x5a\x9e\x56\x5f\xf4\x26\x76\x1d\xa6\x43\x2e\xe0\xe4\xd9\xb5\xf4\x14\xf2\x47\xbf\x5c\x7f\x24\xb6\x3f\x92\x0b\xfe\xf7\x9c\x65\x73\xc2\x53\x26\x8c\x3d\xd7\xba\xda\xda\x1f\x25\xf4\x4f\x33\x72\x4c\xec\x3a\x33\x65\x60\xbd\xa5\x30\xec\x8b\xd1\xe4\x98\x64\xfc\x9e\x91\xef\x2e\xb8\x36\xa4\x7d\xdd\xfd\xee\x88\x7c\x77\x51\x30\x0e\xfd\xdd\x33\xac\x70\xf8\xf7\x7f\x47\x47\xcf\xd0\x71\xf5\xd0\xbd\x69\xdb\xd3\x7c\x8b\xd7\x44\xd1\xc2\x7f\xff\x2e\x6e\xc7\xed\xd7\x72\xde\x5b\x30\x5e\xc7\x75\x37\xe1\xb5\xef\x99\x49\x26\x2b\x18\xad\xde\x91\xd3\xda\xed\xa8\xb2\x5a\xfd\xba\x78\xad\x9d\xc2\x53\xf3\xdb\x5d\x98\x2d\x35\x70\x0a\x28\x17\x78\x68\xc2\x19\x2a\xef\x0c\xf9\x7a\x6c\x65\x17\x7e\x1b\xcd\x26\x62\xb9\x9e\x93\x46\x2b\xf1\x42\xe6\x9a\xf1\x29\x5f\xb5\x8f\x5d\x91\x5a\xb1\xcb\x31\x39\x91\x4f\x87\x4c\xd9\xa9\x7b\x76\x07\x33\x1c\x5a\xf6\x67\x72\x25\x58\xda\x30\xb5\xbf\xe7\x4c\xcd\x97\xcc\x6d\x44\x33\xdd\x34\x39\x2e\x0c\xb3\x72\x6d\xe5\xf1\x48\xaa\x29\x35\xee\x85\x3f\xff\xdb\xa6\x93\x37\xf2\x9e\xad\xda\xe7\x2e\xee\x5a\x42\x35\x6c\xf7\x34\xcf\x0c\x9f\x65\x8c\xcc\xe8\x98\x69\xb7\x0a\x79\x66\xf4\x11\xbc\x66\x65\x69\xa6\x8e\xc3\x6d\x03\x3d\xf8\x5b\x36\xd7\xf0\x0b\x19\x05\x46\x26\xd8\x17\x03\x2d\xf5\x05\xdc\xb3\xb0\x44\xf1\xed\xf1\x04\x4b\xb9\x1d\x9d\x68\xa9\xcc\x60\x38\x6f\xdd\xb3\x85\x7e\x1b\xa9\x85\x0a\x42\x8d\x51\x7c\x98\x1b\x66\xe7\x6d\xdb\xf0\xf7\x24\xb0\x3e\xbc\x8c\xb5\xbd\x7c\xaf\xce\xaf\xbe\xbf\xa7\x46\xc9\x31\x15\x6f\x4f\x49\x3b\x4d\x09\x0e\xd4\xbe\xc3\x53\xbc\x92\x27\x4c\xb1\x16\xe9\x4d\xb8\x26\x7a\x22\xf3\x2c\x25\x82\x3d\x30\x65\xd7\x96\x4d\x67\x66\xfe\xe2\x56\x2b\xe5\x8a\x25\xb0\x30\x9b\x9c\xb0\xf0\x95\x5d\x34\xab\xf4\xcc\x71\xe9\xee\xd9\x1c\x04\x97\xc5\xe5\x7b\x06\x7a\xa9\x3c\x65\x22\x9f\x56\xee\x0a\xf8\xfd\xbc\x73\x7b\xd6\xb9\x3c\xef\x5e\x7e\xa8\x7c\x61\xc5\x88\xf0\xa8\xf4\xe4\xbf\x17\xd6\x66\x44\xf3\x0c\x4e\x75\xd4\xda\xb3\x09\x2e\xc9\x84\x67\xa9\x62\xe2\xc4\x50\x7d\x3f\x60\x5f\x58\x92\xe3\x3d\xfb\xcf\xf2\x0f\x03\x2b\x7d\xca\x94\x95\x7f\x29\xfd\x51\x88\x3b\x1b\x7f\x1a\xb4\xd2\x8d\xbf\x04\x1d\x76\xbd\xef\xe0\x17\x9e\xd6\xbe\x0d\xbf\xac\x98\x83\x7f\x67\xc9\x60\xfd\x2b\x8d\xa3\xf2\x2f\x38\x01\xae\xf6\x1d\xc5\x8c\x9a\x0f\xa8\x31\xf6\x94\x6f\x21\x33\xc2\x96\x12\x3b\x5b\x52\xec\xa7\x13\x1f\x51\x50\x04\xde\x1d\x24\x47\x3b\x82\xe2\xcd\x55\xf2\xe2\xa5\x4c\x59\x27\x34\xfb\x5e\xaa\x1e\xd5\xf7\xaf\x41\x66\x2c\x0d\xfc\x39\xc4\xc6\x6d\x0f\xd0\x37\xa7\xd4\x6f\xc9\x0e\x0e\x26\x80\xdd\x57\x72\x5d\x83\x81\x54\x44\xcf\xb5\x61\xd3\x95\xa6\x83\xd7\xb3\x10\x8e\xdf\xbf\xd4\x01\x57\xae\x9c\xdf\xc0\xa9\x2f\x5f\xa0\x87\xe3\xbd\xc1\x92\xed\xcb\xf0\xf7\xd2\xe7\xe9\x5d\x30\xcb\xa7\x7a\xeb\xb7\xcf\x3b\x1c\x1c\x9d\xbc\xf8\x69\x96\x44\xbb\x7d\x0f\xf2\x89\xac\x06\x8d\x7b\xe5\x57\x7b\x00\x03\x58\xa1\xf2\x95\x4d\xc7\xe1\xfc\xd9\x4f\x63\xe3\x0a\x5a\xcc\x8c\xd5\x79\x9d\x6d\x89\x29\x92\x48\x85\xa2\x60\xea\x8e\x7b\x5f\x90\x63\x72\xde\xee\xb5\x6f\x3b\xbd\x53\xd2\x26\x29\x35\xd4\x9e\x6f\xc5\x66\x8a\x69\x26\x0c\x68\xe3\xf6\x73\x33\x27\x53\x99\xb2\x8c\xa5\x84\x0b\xf2\x3e\x9b\x1b\x46\xce\xa9\xa1\x67\xd4\xd0\x4c\x8e\x5b\xa4\x0d\x7f\xda\x8f\xb9\x26\x34\xd3\x92\x50\x4f\x55\x2c\xf5\x4d\x50\x91\x7a\xce\x42\x49\x22\xa7\x33\x9e\x05\xab\x79\x30\x91\x70\x91\xf2\x07\x9e\xe6\x34\x23\x72\x68\x99\x8a\x55\x55\x3b\x0f\x4c\x98\x9c\x66\xd9\x9c\xd0\x2c\x23\xae\x5b\xff\x82\xd7\xeb\x87\x2c\x8c\x52\xf3\x29\xcf\xa8\xb2\xba\x30\x8e\xf6\xca\xb5\x45\x7a\x13\x16\xc6\x0a\xe3\xb2\x8b\x39\xa5\xf7\x4c\x13\x6e\xc8\x4c\x6a\xcd\x87\x59\x71\xe4\xef\xba\x04\xc6\x7d\x76\xd1\x05\xc5\x3a\x31\x44\x22\x0b\xf5\x9d\x3b\x2b\x8c\xef\x71\x4a\x85\x60\xd0\xb1\x34\x13\xa6\x5c\xf7\xee\xe5\xaf\xad\x68\xdf\x5d\xde\x5e\x77\xce\xba\xef\xbb\x9d\xf3\x45\x4d\xbb\xd7\xbe\xfd\x65\xf1\xd7\xcf\x57\x37\xbf\xbc\xbf\xb8\xfa\xbc\xf8\xe4\xa2\x7d\x77\x79\xf6\xf3\xe0\xfa\xa2\x7d\xb9\xf8\xd0\x91\xd5\xda\x4a\x7b\x3c\xb2\x0d\x8f\xd6\xc1\x1a\xb9\x4f\x6b\xe4\xd1\xb7\x6b\x8e\x74\xae\x9c\xf5\x4d\x91\x24\xe3\xda\xd8\x05\x72\x5f\x92\x19\xd5\x1a\x85\x21\x1c\x41\xab\x2f\x3e\x4a\x65\x99\xd6\x48\x5a\xbe\x60\x05\x26\xa3\xf2\xc4\x70\x31\x0e\x1f\x9d\x92\x7e\xfe\xc3\x0f\x7f\x4a\x2e\xb8\xb8\x87\x7f\xb1\x97\xb8\x38\x07\x5b\xed\x36\xab\x75\xb0\xd5\xc6\xcf\x5e\x87\xad\xd6\x8a\x39\x27\xb1\x89\xf6\x69\x82\x7b\xd0\x8d\x6c\x65\x07\x99\x1b\xfb\x4f\xdb\x2f\x19\x29\x39\x05\xa9\xea\x0b\xd7\xc0\x25\x1e\xa5\xba\x1f\x65\xf2\x71\x3d\xd3\xe1\x07\x66\x82\xf1\xcd\x4a\x31\xaf\xc1\x62\xf8\xd9\xcd\x30\x0c\xfc\x03\x33\x76\xec\x37\xae\x97\x43\x9c\xcf\x21\xce\xe7\xeb\xc6\xf9\xbc\x28\xb3\xdd\xd3\xf3\xbe\xb2\x8d\x0f\x19\x60\x83\x0b\xaa\xd1\xc3\xd4\xe0\x40\x8a\xfc\x43\x4f\xc9\x34\xcb\x5e\x99\x15\x0c\xb3\xe4\xb1\x78\x2d\x4c\xb3\x34\xe8\xe7\x67\x98\xbf\x09\x87\xca\xc1\x5f\xb2\xe5\x42\xbd\x4a\xbe\xba\xe6\x95\xf1\x6c\xde\x8e\xa7\xe7\xf3\x0b\xb1\x08\x9b\x04\x1f\x6c\x10\x6d\xb0\x76\x78\xc1\x8a\x78\x82\xda\x00\x82\xba\x88\x81\xc5\x10\x81\xda\x98\x80\x9d\x82\x00\x36\xbd\x92\xd6\x77\xff\x7f\x60\xa6\x47\xf5\xfd\xab\xbb\x92\x4a\x83\x7e\xfe\x2b\xe9\x37\xea\xf5\x3f\xb8\xf9\x9f\x70\xe9\xbe\xf5\x8b\xec\xe5\x3a\xf2\x7f\x03\x9e\xfb\x83\xab\x7e\xa3\x35\xfa\xb6\x7c\xf3\xdf\xaa\x33\xfe\x75\x7a\xdf\x0f\xee\xf6\x83\xbb\xfd\xe0\x6e\x5f\xc3\xdd\xfe\xa4\x4a\x29\xb3\x64\xa5\xc1\xfc\x18\xeb\x36\x6f\x66\x52\x2f\xd7\xc5\xce\x14\xa3\xc6\x52\x71\xd9\xee\x47\xa0\x41\xa2\x58\x22\x55\x6a\x75\x30\x4a\x66\x13\xaa\x19\x31\x8a\x0a\xcd\x57\xe9\x61\xd8\x2a\x18\xda\x6c\x3b\xaf\x41\x05\x2b\x59\x05\x61\xd4\xcf\xa5\x80\x0d\x65\xba\x70\x66\xf0\x38\xd5\x3d\x59\xce\xeb\xf7\x36\x75\xc8\xd0\x5c\x67\xe6\x4f\x48\xcd\xf6\x5e\xd9\x92\x9a\xcb\x26\x83\xbd\x50\x33\xe8\xe8\xaf\x85\x9a\x4b\x06\x85\xdf\x16\x35\xd7\x4d\xfd\x25\x50\xb3\xf7\x46\x6f\x49\xd1\x8b\xce\xec\xbd\x50\x75\xf0\x20\xbf\x16\xca\x5e\x70\x79\xff\xb6\xa8\xbb\x69\xfa\x5f\x97\xc2\x83\x21\x7c\x5f\xb4\xbd\x9a\x70\xc3\x02\xbc\x06\xa2\x0d\x83\xc5\xb1\xff\x66\xa8\x75\x61\xde\x2f\x84\x4c\x4f\x14\xc3\x6c\xc3\x8d\xe8\xf5\xc6\x7d\xb4\x31\xc5\xfa\x0f\x0f\x34\xfb\x9a\x68\xd6\xef\xda\xcb\xa1\xda\xa6\x70\xba\xcd\x33\x70\x97\xc4\xc8\x69\x32\xa5\x26\x99\xd8\x87\xe8\x9f\x5b\x13\xa6\xa5\x48\xb9\x7d\x55\xd4\xfd\x1c\x79\xb6\xdf\xb6\x25\xfe\x60\x81\xff\x0d\xc2\x61\xbd\x98\x70\xf1\x43\x8a\xca\x1e\x53\x54\xb8\x3e\xa4\xa8\x1c\x52\x54\xd6\x5d\xa0\x43\x8a\xca\x21\x45\x25\x7a\xf6\x3a\x52\x54\x9e\x3e\x3b\x65\x3f\x29\x28\xaf\x4a\x88\x3e\x08\xd0\x07\x01\xfa\x90\x67\x12\xa6\xb6\x2f\x06\xe6\xbf\x7e\x93\xb2\x8c\x19\xb6\x94\xfd\xf4\x98\x9a\x5a\xdd\xa0\x04\x7d\x5d\xe3\x34\x28\x50\xb5\x02\x05\x81\x79\x63\x19\x5f\x0a\x6d\xbf\x4e\xee\x14\x86\x7f\x48\x8b\x3b\xb0\xab\x03\xbb\xda\x66\x6a\x2f\xc7\x2a\x1b\x1d\xe6\xaf\x6a\x96\x8d\x80\xb4\x07\x3c\xdd\x0f\x96\x76\x10\x1b\x63\x24\xed\x62\x29\x4a\x60\xc6\xdb\x19\x69\x0b\x58\xea\x6e\xfa\x2a\xec\xb4\x96\x8f\xa4\x1d\x88\xba\x0b\x21\x83\xea\x00\xa9\x7d\x80\xd4\x5e\x7f\xae\x07\x0b\xe1\x1e\x2d\x84\x07\x48\xed\x83\x0d\xec\x60\x03\x7b\x7a\x1b\xd8\xd7\x32\x68\x3f\xf3\xb1\x7c\x2e\x11\x6d\xbb\xc0\x24\x91\x12\xc5\xc6\x5c\x1b\xa6\xec\xea\xd5\x0a\x65\xab\x23\x95\x5e\x6b\x91\xa8\xb5\xe3\x3e\xe2\x6e\xdf\xfc\xdb\x1a\xc3\xbf\x71\xb7\x28\x1c\xf5\x21\x4d\x43\x45\x18\x10\x9d\xa6\x74\x4e\x26\xf4\x81\x91\x11\xe5\x19\x2a\x46\x8e\x3b\x2e\x99\xe1\xb2\x01\xfd\xc7\x66\x03\xa2\xe5\xe1\x28\x36\x62\x8a\x89\x04\xb9\x3d\x0a\x3f\x09\xcd\x7c\x2a\x08\xbc\x33\xb1\x6a\x6a\xa6\x18\x4d\xe7\x64\xc8\x98\x08\x64\x53\x23\x29\x34\x8c\x79\x2f\x42\xeb\x57\x57\xd3\x16\xa9\xe7\xa5\x28\x69\x4f\x12\x3d\x53\xcf\x12\x76\x57\xce\xf4\x4f\xaf\x8b\x55\x1c\x82\x68\x0e\x46\xb5\xaf\x6f\x54\x3b\x04\xd1\x1c\x54\xe4\x17\xa0\x22\x1f\x82\x68\x0e\x41\x34\x07\x03\xc2\xda\xab\x75\x30\x20\xc4\xcf\x5e\x47\x10\xcd\x13\x56\x70\x7e\x2e\x09\xfb\x20\x60\xfb\xf7\x0e\x02\xf6\x41\xc0\xfe\x46\x05\xec\x97\xb1\xc2\x07\xe9\xfa\x20\x5d\x1f\xa4\xeb\x83\x74\x7d\x90\xae\x0f\xd2\xb5\xfb\x6a\x9f\xd2\x35\xfc\xcb\x43\xb3\xee\x1c\xb1\xbe\xb9\x97\xeb\x03\x33\xaf\xd5\xc5\x75\x10\xa9\x0f\x22\xf5\xcb\x16\xa9\x5f\xcc\x84\xbe\x3d\xa8\xc5\x03\x58\xe1\x01\xac\xf0\x00\x56\xf8\xb4\x60\x85\xfe\xeb\x37\xb3\x7c\xb9\x2c\x72\x37\x4b\x7d\xee\x8a\x36\xd4\xe4\xa0\xf6\xad\x21\x97\x90\xb6\x21\x53\x69\x95\x20\xc1\x4a\xef\x78\x06\x84\x11\x1d\x63\xfe\xc0\x04\xf1\x31\xda\x47\xee\x9a\x39\x02\x4b\xc4\xbf\xc2\xe9\xc0\xa4\x19\x6a\x08\x25\x86\x4f\x59\x8b\x74\x47\x78\x9a\x13\x4b\xfe\x9a\x19\x5d\x09\x03\x42\xd2\x84\x8f\x44\x5a\x8c\xd5\xf7\xcd\x8b\xa8\x10\x7c\xed\xc8\x33\xc3\x3c\x33\xc8\x1a\x7d\xe3\x8f\x3c\xcb\xec\x18\x1c\x07\x81\x93\x30\x65\x2a\xf3\x5f\x96\xba\xf5\x2f\x4f\x69\x6a\x4f\x6e\x34\x84\x22\xbb\x27\x7e\x1f\xee\x5c\xae\x43\x5c\x4b\xe9\x7b\xfc\xba\x45\x9c\x12\x8e\xa0\x62\x6b\x0d\x63\x42\x53\x7b\x02\x93\x09\x4b\xf3\x8c\x11\xaa\xb5\x4c\x38\x35\x96\x5b\xe1\x1d\x4d\xb8\xf1\x2a\xbb\x7f\xc9\x77\x9d\x72\x4d\x87\x19\x4b\xdd\x1a\xb3\x22\xcc\x66\xe9\xc8\xb9\x26\x43\x66\x97\xd8\xf2\x91\xf2\xea\x4f\x50\x42\xa8\x19\x4d\x34\x14\xb6\x38\x12\x26\x70\x20\x4b\x24\x5c\x24\xce\xd7\x2a\xe4\xe2\xe8\x0f\xb9\x4f\x07\x91\xf7\x20\xf2\x6e\x34\xa1\x6f\x4a\xe4\x7d\x41\xa1\x81\x9e\x21\x7d\xd5\xd0\x40\x70\x20\x5a\xce\x3f\x08\x16\x42\xbd\x9d\xf1\x24\x18\x61\x3f\xfa\x26\xdb\xa1\xc5\x33\x29\x46\x7c\x9c\x2b\x27\x70\x3b\x69\x78\x85\x97\xb2\xa6\x9d\x57\x71\xe3\xd4\x0f\xfd\xb9\x2e\x9e\x4d\x14\x3a\x72\x4c\xac\xd8\x3d\xb8\xe9\xdc\x5e\xdd\xdd\x9c\x75\x4e\x49\x7b\x36\xcb\x38\x7a\x59\x92\x5c\x1b\x39\xe5\xff\xb0\xd3\x40\x20\xe1\xc0\xb9\x9d\x18\xa2\x41\xe0\x00\xb7\x8e\x55\x93\xc8\x31\x39\xbb\xb8\xbb\xed\x75\x6e\x1a\x1a\x74\x44\x00\xb5\x8c\xd8\x74\x96\x81\x54\x72\x9f\x0f\x99\x12\xcc\x30\x4d\x92\x2c\x87\x18\xf3\xe0\xec\xc1\x46\x3b\xff\xd5\x39\xbb\xeb\x75\xaf\x2e\x07\x7f\xbd\xeb\xdc\x75\x4e\x89\xa7\x26\xdb\xac\x1d\x97\x1d\x45\x3a\x17\x74\x6a\x75\xd1\x32\xe2\xf1\xdf\x73\x96\x83\x10\xc4\xc7\x62\xca\x84\xa9\xb6\xe8\x07\x7c\xd1\x7e\xd7\xb9\x28\xb7\x3c\x61\xe4\x97\xbf\x14\x83\xca\xe8\x90\x65\xce\xfb\x04\xce\x15\xcb\xb0\x8b\x8e\x9c\x5b\x2a\x47\xb5\xf6\xaf\x77\xed\x8b\x6e\xef\xd7\xc1\xd5\xfb\xc1\x6d\xe7\xe6\x53\xf7\xac\x33\x70\x0a\xc6\x59\xdb\xf6\x5b\xea\xc9\xe9\x21\xe4\xef\x39\xcd\xac\xa2\x2a\x47\xe0\xda\xe1\x09\x23\x8f\x13\x26\x48\x2e\x80\xc6\x50\xfb\x05\x5d\x20\x4e\x62\xc7\x19\x5d\x5f\xdc\x7d\xe8\x5e\x0e\xae\x3e\x75\x6e\x6e\xba\xe7\x9d\x53\x72\xcb\x32\xd0\x0f\xfd\xa2\xc3\x2e\xce\xb2\x7c\xcc\x05\xe1\xd3\x59\xc6\xec\x6a\xe0\x71\x1c\xb2\x09\x7d\xe0\x52\x95\x74\x04\x58\x47\x4b\x42\xd8\xbe\xd7\xc3\x06\xd1\xd2\x5d\x5d\xbe\xef\x7e\x00\x0f\x41\x98\x83\x86\x36\x4a\x94\xe3\x73\xef\x8f\x17\x72\xef\x13\x8a\x31\x0c\x50\xf8\xea\x81\x29\xc5\x53\xd6\x94\x18\xf8\x7c\x4a\x6a\xe9\x40\x2c\x6a\x96\x55\x0a\x5f\x7c\xa3\x42\xae\xcb\x5e\x28\x51\xdf\xe2\x8b\xab\xa8\x68\xf1\x8b\x0a\x19\x34\xeb\xd3\x0b\xfb\xb8\xb6\xaa\x5c\x5e\x9f\x67\xbb\xa7\x2c\x7b\x4b\x07\xde\x64\x72\xf2\xcf\x12\x9b\xfb\xd7\x93\x61\xd8\x90\x28\xf1\xd6\xdd\x5b\xab\x6a\x81\x16\x1f\xbc\x86\xdb\x2a\x1e\xee\xd7\xbc\x99\xf6\x24\x0d\xbe\x12\x4b\xd4\xe6\x42\xf8\x41\x99\x3c\x28\x93\xf5\x2b\x73\x08\x49\x6a\x58\xe1\x7d\xdd\x47\xdb\x18\x6f\x47\x9c\x65\xa9\x5e\xb0\xbe\x95\xee\x93\x95\x96\xb6\xd7\x7b\x95\x3c\xaf\xad\x6d\x13\x95\xe7\x26\xf8\xa8\x9c\xd3\xca\xee\xd6\x94\x19\x0a\x35\x57\x8d\x24\x39\x0c\xfd\x70\x3d\xb9\xff\x3b\x5c\x4f\x87\xeb\xe9\x70\x3d\xfd\x56\x8d\x95\x35\x2c\xfd\xab\x5a\x2b\x57\x69\x81\x3b\x81\x4f\xd5\x98\x32\x17\xb5\x3f\x4d\xf4\x84\x2a\x2c\x33\x94\xc8\xe9\x54\x8a\x28\xec\x61\x3e\x63\x47\x24\x38\x57\xc1\x2c\x05\xc3\x58\x65\xe9\x2c\xba\xe1\xaf\xc3\xc6\x19\xad\xcb\x73\xa4\x64\x1c\x34\x47\xff\x7f\x9b\x5e\xcd\x07\xf8\xae\x03\x7c\xd7\x21\x7b\xe2\x00\xdf\xb5\x9c\x5a\x0e\xf9\x01\x87\xfc\x80\xf8\xd9\x01\xbe\xeb\x05\xc1\x77\x09\x99\xb2\x41\x05\xae\x3f\xfc\x39\xa8\xfa\x3d\x4a\x4f\x62\x27\x48\xe9\x41\x91\x30\x01\xad\xf3\x74\xf7\x84\x89\x72\xe1\xe4\x55\x4e\x92\xb8\xd4\xee\x0b\x17\x78\x47\xd9\xdc\x30\x9e\x66\x8b\x35\x82\x9f\x21\x86\xac\x6e\xa3\xbf\x45\x23\x4b\x0d\xd9\x1e\x2c\x2e\x2b\x17\xea\x5b\x85\xd9\x2e\xf8\xd2\x2b\x72\x13\xac\xc7\xbc\x7d\x38\xc4\xa0\x81\x85\xd7\x3f\x0f\x8c\xbc\xfe\xf1\xae\xe8\x12\x65\xde\xbd\x2d\xaa\x44\x89\x37\xbe\x0e\x33\x46\x3c\xe2\xe7\x30\x64\x2c\xdd\xfd\x6f\x8e\xaf\x2f\xa3\xe5\x03\x77\x5f\x73\xb9\xbe\x55\x1e\x7f\xb0\x67\xec\xd3\x9e\x71\xf4\xed\x1a\x34\x0e\x68\x10\x4b\x16\xe7\x60\xed\xd9\x66\xb5\x0e\xd6\x9e\xf8\xd9\x73\x5a\x7b\xd0\x77\x3b\x98\x51\xc5\x84\xa9\x91\xef\xab\x37\x1b\xbc\x1e\xd9\xea\x83\x00\x04\x0d\xa0\xe0\xea\x64\x83\x70\x6b\x7e\x5b\xe6\x1f\x27\xa3\x0c\x50\xc4\x89\xb2\x34\x4e\xfe\x59\xfc\x3b\x52\x20\xa2\x1f\x6b\x7c\xa0\x1b\x84\x30\xf9\x28\x6e\x96\x16\x62\x57\xd1\x78\x4d\x68\x93\x1b\xc3\xb1\x17\xc6\x0a\x6f\xfe\xca\x48\xa7\x6b\xfc\xf4\x1c\xbe\x7c\x5d\xe9\x1e\x0d\x43\x7f\xde\x08\xa8\x45\x4a\x58\xef\x60\x79\x3d\x82\x63\x3a\xc3\xe3\x84\x83\x78\x00\xe0\x52\x70\x85\x46\x1b\xee\x13\x45\x29\x64\x74\x34\xc9\x5a\xcf\x2d\x46\x2e\x90\xfb\x7a\x13\x77\x34\xfa\x7a\xe7\xfd\xd5\x43\x43\x56\xd0\xfd\x57\x0d\x13\x59\xc2\x33\xf7\x13\x21\xf2\x7c\xfc\xf1\x03\x33\xdf\x1e\x73\xfc\xc0\xcc\x73\x71\xc6\x6d\xd9\xe1\x52\x96\x50\xd4\xc2\x78\x21\xdc\x60\x3b\xd6\xf7\xba\xe6\x78\x48\x6c\x3c\x24\x36\x1e\x12\x1b\xb7\x57\x01\x0f\x89\x8d\x5f\x3b\xb1\xd1\x7f\xbd\x4e\x1d\xeb\x73\x78\xe5\x19\x05\x0d\xec\xf0\xdb\x93\x35\x70\x5e\x07\x71\xe3\x20\x6e\x6c\x36\xc7\x97\xaa\x60\x79\x7a\x7e\x09\x0a\xd6\x46\x48\x21\xe8\x73\x2e\x2a\xc2\x79\xf2\x5f\xe9\x57\xbe\xf6\x9d\xbd\x1e\x26\xa4\x9f\x9a\xcf\xec\xe2\x3d\xf3\xeb\x7e\x70\x9e\x1d\xa0\xd4\x0f\xce\xb3\x83\xf3\xec\xe0\x3c\x73\x4f\xbf\x09\x28\xf5\xa0\x64\xac\x2c\xef\x7b\x53\xd4\xf4\xad\x09\x84\xa9\xde\xc4\xfe\xed\xeb\x05\x09\xf7\xa5\x5f\xc6\x7e\xe4\xcf\xa5\x03\xbc\x14\xc9\xb1\x98\xf7\x8b\x90\x15\x4f\xfe\x59\x09\x33\x5f\xf0\x45\xea\x7c\x3a\xa5\x6a\x0e\xf7\x96\x0b\xba\x6e\xc1\x84\x5a\x6e\x46\x11\xd4\xb2\xbb\x96\x86\xb9\x89\x62\xc4\xb4\x25\xe4\x19\x53\x66\x1e\xbd\x09\x5c\xf4\x3f\xfb\x82\x17\x80\xaf\x7c\x2c\xa4\x42\xb3\x93\xfd\x78\x42\x45\x9a\xd9\x73\xa0\x43\x3b\x09\x15\x42\x1a\xb8\xfd\xc1\xa1\x91\x92\x07\x4e\x51\x56\x68\x5f\x77\x4b\xe7\xa4\xde\x83\xba\xd6\x99\x2a\x39\x3f\x5f\xd1\x89\x7a\x6e\x28\xd5\x83\x46\x18\xaf\xfe\xd7\x3a\xc8\x86\xea\xfb\x6a\x22\x4a\x39\xbe\x79\xb0\x34\x35\x65\xc5\xbb\x25\xc4\xae\xe5\xaf\x56\xd2\x57\xca\xcf\x5c\x42\x0b\x3c\x86\x21\x57\xc7\xe1\x7f\x8c\x3b\xf4\xbf\x15\x2d\xfb\x5f\x7c\x45\x11\xf8\x51\x31\xa3\xe6\x03\x6a\x8c\x65\x2a\xbb\xe7\xcc\x94\x6d\xfa\x2b\x72\x66\x7a\x54\xdf\xbf\xca\x9c\x99\xf2\xc0\x9f\x9c\x59\xac\x49\x93\xdf\x5c\xb4\xf5\xba\x27\xec\x10\x79\xbd\xc5\xd2\x7d\xab\x51\xd8\xcb\x58\xe8\x8b\x19\x61\x85\x8b\x7f\x8b\x27\xb7\x7c\x27\x1d\x8e\xe8\xb2\x35\xfa\xe6\x00\xd6\x2b\xa2\xc6\x8a\xb9\xbd\x12\xa0\xf5\xaa\xb4\xb4\xef\x51\x3d\x8d\x6d\x39\xda\x8d\x43\x65\xa4\x43\x65\xa4\x43\x65\xa4\xa7\xae\x8c\xb4\x9e\xa6\xb9\xb6\x9a\xb9\xae\x8e\xb9\x9e\x82\xd9\xac\x5d\xee\x90\x6c\x5b\x56\xfa\xb6\x4d\xb6\x2d\x29\x55\xaf\xc2\x35\x5a\x1a\xf1\x73\x24\xdb\xfe\x46\xf5\xc0\x83\x12\xf8\x24\xeb\xf6\xad\x6a\x80\x2f\x5c\xfd\x3b\xa4\x09\xef\x31\xd2\xe1\x1b\x86\x3d\x3b\x04\x3a\x2c\x59\x9c\x43\xa0\xc3\x36\xab\x75\x08\x74\x88\x9f\xbd\xb8\x40\x87\x66\xcd\x81\xa7\xbb\x26\x7a\xd5\x89\xec\x85\x40\x5b\xc2\x0e\xdd\x5e\x7c\xef\xa6\xaf\x42\x6e\x8f\xb0\x7e\x83\x99\x43\x3d\x87\xfc\x7e\xc0\xae\x3d\x60\xd7\x1e\x84\xb8\xdf\x92\x10\x77\x90\x53\xb6\x59\xad\x83\x9c\x12\x3f\x3b\x60\xd7\xbe\x20\xf0\x12\x2b\x38\x95\x92\x44\x56\x06\xa5\x9e\x29\x06\xe1\x73\x22\x0d\xa9\x22\x84\x56\x05\xb0\x65\xd2\x15\x36\x60\xe5\xab\xd7\x20\x5c\xd9\x71\xe2\x88\xd7\x88\xa6\x8b\x3b\x7c\xf3\x6f\x6b\x0c\xfc\xc6\xdd\x95\x70\xa0\x87\x34\x0d\xf5\xe3\x41\x40\x9a\xd2\x39\x99\xd0\x07\x46\x46\x94\x67\x68\xa6\x72\x3c\x70\xc9\xdc\x96\x0d\xe8\x3f\x36\x1b\x10\x2d\x0f\xa7\xc8\x00\xb3\x3c\x1d\x45\x9c\x84\x66\xde\x49\x05\xef\x40\x71\xfb\x4c\x31\x9a\xce\xc9\x90\x31\x11\xa5\x13\xad\x3b\xe6\xbd\x88\xa6\x5f\x3d\x14\x30\xa6\x9b\xaf\x1a\xdd\x0b\x27\xbc\xb1\xfc\xe6\xfe\x74\xae\x5d\x14\x2d\xfd\xd3\x6b\x61\x05\xcf\xa1\x56\x7d\xc3\xae\x8f\x83\x7b\xe3\xb7\x59\xad\xeb\xc5\x88\xe4\x07\x45\x77\x8f\x8a\xee\x21\x2f\xf3\xe0\xae\x38\x98\x01\xd6\x5e\xad\x83\x19\x20\x7e\xf6\x7a\xdc\x15\xcd\xd2\xf3\x76\xc5\xeb\x9f\x50\x8e\x3e\x88\xd1\x07\x31\xfa\x20\x46\x7f\xb3\x62\xf4\xcb\x58\xe1\x83\x0c\x7d\x90\xa1\x0f\x32\xf4\x41\x86\x3e\xc8\xd0\x07\x19\xda\x7d\xb5\x17\x19\x1a\xfe\xe5\xb3\xb9\xf7\x93\xba\xbd\x9e\x47\xca\xe5\x6e\xbf\x16\xe1\xf9\x20\x38\x1f\x04\xe7\x97\x2d\x38\xbf\x98\x09\x7d\x7b\x09\x9b\x87\x94\xc7\x43\xca\xe3\x21\xe5\xf1\x2b\xa4\x3c\x7a\x56\xb2\x6d\x35\x8a\x4f\x8e\xb7\x7c\xcf\x45\x92\xe5\x29\x88\x28\x13\x46\xde\xe5\x3c\x4b\x09\x28\x34\x56\x2f\xe5\x52\xbc\x05\x7a\x02\x52\x80\x71\x7a\x48\xf6\xe5\x02\xcc\xa7\x05\x4e\xf7\x62\x65\x98\x62\xb4\xdb\x02\x54\xed\x6b\x4f\x43\x41\xc7\x2d\x8a\x36\x95\x7e\xf3\x0d\x3d\x77\x29\xa7\x23\x2f\x7a\x58\xb6\xe3\x07\xb1\x51\x61\xa7\xcf\xee\xa3\xd7\x05\x25\xbe\x38\xea\x43\x39\x27\x12\xed\xda\xa1\x9c\xd3\x13\xce\xdb\x9f\xb3\x15\x33\xf7\x34\x8a\xe6\xe1\x57\x3a\xed\xaf\x1e\x47\xd7\x7c\xd2\xbf\x6a\x54\x5d\xed\xcd\xb1\x90\xd1\x54\x94\x03\x7f\xfe\x2a\x56\xbb\x5c\x0d\x1f\x98\xf9\x56\xee\x85\x43\x25\xab\x43\x69\x89\xad\x0b\x7d\x6f\xc4\xe1\x5f\xd7\x14\x0f\xc5\xba\x0e\xc5\xba\x0e\xc5\xba\xb6\xb7\x8e\x1c\x8a\x75\xfd\xc6\x8a\x75\xed\x22\x4f\x61\xf7\xdf\x8a\x48\x75\x28\xd8\x75\x90\xaa\x0e\x52\x55\xed\x14\x5f\xa0\xba\xfc\x22\xca\x91\x05\x75\x79\x5f\xc8\x1f\xb1\xa7\x3f\x30\xe3\xbd\x02\x80\xf8\x95\x3c\x80\x80\xb8\xff\x3b\x80\x80\xac\x33\xb9\x03\x08\xc8\x21\xae\xf3\x00\x02\x72\x88\x5c\x3c\x44\x2e\x1e\x40\x40\x5e\x0b\x08\x88\x17\xa0\xf6\x01\x04\x52\x23\x8c\xad\x06\x03\xf9\xbc\xa8\x19\xbc\x58\x41\xcb\x8f\xf5\x00\x0a\x72\x00\x05\xd9\x95\x76\x5e\x84\x4e\xf6\x24\xe0\x20\x35\x6c\x60\x57\x45\xec\x75\x80\x84\xf8\xd1\x1e\x32\x1c\x0f\x81\xda\x2f\x3f\x50\xfb\xc5\x65\x38\xbe\x18\xb1\xfd\xa0\x0c\xef\x51\x19\x3e\x24\x39\x1e\x92\x1c\x0f\xa6\x82\xb5\x57\xeb\x60\x2a\x88\x9f\xbd\x8e\x24\xc7\xd5\xd2\xf4\x5e\xc0\x42\x9e\x42\xae\x3e\x88\xd5\xf8\xde\x41\xac\x3e\x88\xd5\xdf\xa8\x58\xfd\x32\x56\xf8\x20\x53\x1f\x64\xea\x83\x4c\x7d\x90\xa9\x0f\x32\xf5\x41\xa6\x76\x5f\xed\x4d\xa6\xde\x2f\x78\xc8\x86\x5e\xac\x28\x5f\xe6\x35\x09\xd3\x07\x41\xfa\x20\x48\xbf\x6c\x41\xfa\xc5\x4c\xe8\x00\x24\x72\x00\x12\x39\x00\x89\x1c\x80\x44\xb6\x91\x6a\x7e\xe7\x4e\xe5\x9b\xe8\x22\x0e\x37\xf6\x9b\x77\x99\x1c\xf6\xe6\x33\x66\xff\x7b\xce\xa7\x4c\x68\x10\x1f\xb9\x99\xc7\x52\x4c\xc3\xca\x2f\xae\xf9\x9b\xdb\xee\xe5\x87\x8b\x38\xa5\xe7\xcd\xc7\xbb\x8b\x5e\xf7\xba\x7d\x13\xd6\x25\xcc\x2a\x5e\x0b\xf7\x5d\x49\x10\x3b\x93\xd3\x19\x55\x5c\x4b\xd1\xf9\x62\x4f\xa7\x1d\xda\x15\x88\x3e\x52\x6d\x37\xba\xce\x5f\xe3\x91\x5d\x96\xff\xfc\xd0\x2b\xff\x55\x9a\xc5\x45\xaf\xfc\x57\x67\xe9\x6c\xa2\x86\xab\xec\xec\x98\x7c\xe8\x9d\x92\x0f\x10\x82\xa1\x48\x6f\x42\x91\x25\x5d\xf4\x4e\xc9\x05\xd3\x1a\x7e\x29\x3e\x36\xdc\x64\x30\xb7\x77\x5c\x50\x35\x27\x7e\xfa\x98\xd7\x47\xc1\x36\xeb\x97\xa6\xba\x78\xe2\x6f\xb9\x00\xed\xa1\x58\xbd\x0b\x39\xe6\x09\xcd\x76\x5b\xc4\xf6\x65\x7c\x90\xde\x5c\xdd\x2c\x5d\x8a\xf8\xed\xc5\xb5\x68\x5f\x9e\x43\x96\xa1\x1f\x6a\xcd\xcc\x2f\x99\x36\x2c\xb5\xd2\x48\x8a\xc4\x0b\xfc\x6c\x1e\x49\x29\x7f\x93\x90\x77\x98\x6b\x2b\x3b\xb7\x2f\xcf\xc9\x09\xb9\xba\xe9\x8b\x2b\x95\xa2\xf1\x86\xd9\xeb\x1d\xb9\x2e\xd7\x44\x48\x43\xf8\x74\x26\x95\xa1\xc2\x58\xc9\x06\x18\x9b\x5b\x11\x4d\xa8\x62\xe4\x4c\x4e\xa7\xb9\xa1\x86\x3f\xb0\x85\x45\x15\xa8\x91\xdd\x32\xd3\x4d\xc1\x1c\x5c\xb3\x86\xc8\xf9\x8a\xb9\xcc\x94\x6d\xdf\x72\xdd\xb2\x2e\xc0\xd3\x05\xd9\xdc\x37\x41\x95\xa2\x65\xfe\xf8\x86\x1b\x36\xad\xbe\xbf\x66\xd8\xde\xbf\x6a\x15\x1d\x7b\x25\x5c\x48\x9a\x72\x31\xc6\x44\xcf\x0b\x6e\x98\xa2\xd9\x47\x3a\x7b\xef\xad\x4d\x5b\xd0\xc7\xff\xbe\x2d\x25\xfd\xbd\xf9\xb5\xfd\x31\x4e\x1b\x7c\x73\x7d\x73\xd5\xbb\x5a\x4a\x33\xa5\x16\x16\x89\xc6\x3e\x3e\x85\xff\x25\x27\xc4\xb6\x1e\x6e\xae\x29\x33\xd4\xde\xe8\xe4\x7b\x4c\xdc\x09\xe1\xfd\x5c\x64\x40\x23\x33\xc5\xa7\xdc\xee\xab\x53\x99\xdf\xe2\xe5\x18\x6e\xff\x40\x25\xf8\x01\x26\xe1\x81\xd8\x61\xa8\x48\xa9\x4a\xc9\xdf\x74\x35\x37\x14\xcc\x3c\xf8\x03\x4b\xc9\x31\x99\x18\x33\xd3\xa7\x27\x27\x8f\x8f\x8f\x2d\xfb\x76\x4b\xaa\xf1\x89\xfd\xc7\x31\x13\xad\x89\x99\x66\x98\x0b\x6b\x57\xe1\x94\x5c\x2b\x69\x24\x08\x10\x44\x33\xc5\x69\x06\xa9\x81\x43\x3c\xed\x72\x44\xfe\x5f\x22\x15\x6b\x15\x1b\xf3\xff\x48\x94\x66\x3b\xb2\xf7\x2c\x4f\xb3\x13\xfb\x52\xcd\xd1\xa9\xee\x27\x49\x59\xc2\x53\x27\x48\x31\x91\x48\xc0\x81\x42\xcb\xa2\x6d\xcf\x67\x3b\x31\xe7\xca\x09\xcb\x19\x09\x1b\x34\x65\x84\x3e\x50\x9e\x61\xc6\xb5\x44\x93\x21\xae\x33\x53\x56\x70\xe9\xa2\xd4\x99\x5b\x09\x1b\x62\xef\x40\x8f\xf4\xaf\xce\xec\x84\x13\x99\x91\x61\x3e\xb2\x12\x5a\x74\x2b\x1d\x59\x69\x84\x6b\xa2\x58\x22\xa7\x53\x26\xd0\xa8\x68\x1b\x82\x2f\x61\xc5\xdc\x68\x5b\x7d\x01\xfb\x6f\xc5\x14\xa0\x80\x54\xc2\xc1\x16\xcc\x6a\x2b\x62\x8e\xdd\x0c\xf3\x51\xc9\x53\x65\x24\x51\x8c\xa6\x84\x9b\xbe\x68\x67\x56\xaf\x9d\x4a\xc3\xe2\x20\x42\x30\x6b\x97\x16\x1c\x18\x82\x62\xb3\x8c\x26\x3e\x29\x33\x93\x09\xcd\xc8\x88\x67\xcc\x55\xf2\x8f\x1a\xf8\x1e\x54\x2d\xbb\x66\x5c\x93\x54\x3e\x8a\x4c\x52\x37\x8f\xea\x67\x6f\xcb\xbc\xa5\xe3\x33\x8f\x3b\x4a\x49\x05\xff\xf3\x0b\x17\xe9\x76\x67\xf0\xee\xf2\x97\xcb\xab\xcf\xa5\x63\x78\x77\xdb\xb9\x89\xff\xbe\xfd\xf5\xb6\xd7\xf9\xb8\xf4\x1c\x56\x5b\x29\x28\x0b\x86\x07\x22\xf8\x29\xb9\xc5\x45\x90\x8a\x58\xa5\xaa\x61\x52\x1f\x1d\x29\x15\x3f\xc8\x94\x6d\x37\xb7\x8f\xed\xcb\xbb\x76\x89\xa3\xdc\x9e\xfd\xdc\x39\xbf\xbb\x28\x09\x78\x7e\x7e\xd1\x2f\x37\x1d\x14\xdf\xe2\xdf\xce\x7e\xee\x5e\x9c\x0f\x82\xc0\xb7\x6c\x35\x2a\xfd\x56\xf9\x52\x0f\xf9\xcf\x44\xa6\x64\x38\x8f\x13\x07\x8b\x94\xf2\x47\xaa\x49\x06\x8e\x11\x96\x7a\x5d\x04\x5b\x3d\x05\x36\xe4\x73\xec\x8b\x2f\xac\x6c\x7f\xe4\xde\x81\x8c\x78\x54\x83\xa8\x29\xa7\xd8\xc7\x0d\xdb\xde\xa9\x88\x74\x0a\xcc\x8d\x0f\x6b\x64\xb5\x1e\x6d\x5f\xcc\xed\xf9\x55\x7c\x3c\x06\x15\xbf\x32\x54\x6c\xcd\x7d\x0a\x2b\x09\xdf\xe1\x56\xcf\x94\x84\x23\x6d\xbb\x75\xb6\xa1\xa0\x40\xe0\x87\x88\x2f\x57\x6a\x51\x51\xd0\x0d\x6a\x86\xe6\xf7\xe5\x14\x2d\xba\x0d\xd3\x82\xa3\x57\x44\xf8\x02\x87\xd2\x68\x99\x98\x29\xf6\xc0\x65\x1e\x7d\xea\x80\x1e\x4a\x9b\x5b\xdb\x7c\xb1\x00\xb0\x6c\xa8\xbf\x14\xcd\x94\xa9\xb9\x7b\x75\x6b\x14\x35\x6c\x3c\x3f\x77\x27\x7b\x7b\x2a\x3e\xbf\xfa\x7c\x79\x71\xd5\x3e\x1f\x74\xda\x1f\xca\x07\x33\x3c\xb9\xed\xdd\x74\xda\x1f\xcb\x8f\x06\x97\x57\xbd\x81\x7f\x63\x29\xb9\x36\x74\xb0\x78\x9d\x96\x5f\x3c\x25\x96\x33\x02\x07\xf3\x98\x50\x11\x1b\x1b\xb2\x91\x54\xc8\x8e\xa7\xde\x07\x08\x8c\x9f\x84\x95\x65\x29\xea\xd8\xe5\x59\x9c\x82\x02\x5a\xd7\x24\xda\x96\x8c\x62\x74\x0a\xec\x9c\x0a\xd2\x11\xe9\xf1\xd5\xe8\xf8\x16\x7f\x9c\x52\x75\xcf\x54\xf8\xf4\x51\x71\x63\x18\x98\xc4\xb9\xb3\x96\x83\x82\x0c\x43\xb6\xf7\x0d\xc4\x78\x17\x1d\xb4\xc8\x8d\x65\xcf\xf6\xfd\x70\xf7\x58\x42\x4d\x99\xa1\x3c\xd3\x6e\xb0\xa5\x75\x3d\x25\x17\x54\x8d\x0b\x75\xf7\x7b\x39\x1a\x61\x63\x6f\x71\x18\xf6\xaa\x29\xcd\xa2\x86\x45\x5a\xd2\xf0\xd7\x17\xf4\xe7\x5e\x0e\x42\xda\x22\x55\xdd\xcd\x76\xa3\xa9\xbb\x6b\x58\xf1\xab\xcb\x41\xe7\xbf\xba\x25\x85\xc5\x3d\xa9\xa1\x35\x98\x38\x3e\x5e\x7e\x17\xd4\xb7\xbd\x48\x4e\xe5\x17\x6b\xc8\x29\x9f\xf9\x9d\x1f\x59\x15\xa8\x86\x96\xd8\x17\x6e\x70\x63\xe2\x71\x57\x48\xa8\x68\x06\xac\x18\x74\x36\x63\x54\xe9\xba\xdd\x2e\x4b\x6b\x0d\x7b\x8f\x3d\xc5\x7d\xb8\x4d\xf6\xfd\x1c\x11\x29\xb2\x79\x7c\xd7\x57\x28\x72\x0d\x1a\xc0\xb6\x16\x28\xe0\x1a\x10\x4f\xae\x1c\xba\xc8\x47\xae\xad\x26\x83\x3f\xbe\x73\xb0\x27\xdb\x11\xc4\xfb\x76\xf7\xa2\x22\x03\x0c\xce\x3b\xef\xdb\x77\x17\xcb\xb5\xf1\xd2\x77\x35\x78\x3c\x51\x3b\xa7\xf6\xd6\x77\xa6\x39\xb8\x1d\x8e\x3d\x98\x0b\x4b\xc3\x85\x56\xc6\x72\xa9\x70\xd5\x6b\x34\x1f\xbb\xff\xdc\x1a\x6a\xb6\x24\xff\xf6\x59\xaf\xfb\xa9\xa4\xb5\xb7\x6f\xce\x7e\xee\x7e\xaa\x93\x0b\x06\x1f\x3a\x97\x9d\x9b\x76\xaf\xb3\x9c\xea\x2b\x4d\xd6\xdd\xf9\xda\x0e\xb8\xea\x3e\xe0\x3a\x78\xc0\x2d\x59\x2b\x99\x11\x6e\x34\x79\xe0\x9a\x0f\x39\xe0\xe7\x38\x53\xfc\x5d\x17\x98\x1e\xf8\x36\xb9\x99\x7b\xa9\x00\xfb\x3d\x25\xef\xe6\x7e\x0d\x8f\x80\xc9\xb9\xf6\x51\x4d\x8d\x0d\xf4\x89\x55\x6a\xf0\xd6\xf3\x93\x3e\x25\x6d\x95\x4c\xf8\x03\xa8\x3d\xd1\x67\xc2\x8a\xa2\x62\xcc\x14\x0e\x07\xec\x8f\xf1\x58\xa2\xe7\x76\x54\xb1\x0c\x50\xac\x5a\x10\xfb\xc6\x4c\x58\xd5\x39\xee\x04\xe5\x13\xc5\xc4\x77\x56\x94\x99\x65\x3c\xe1\x26\x9b\x93\x04\x6c\x1e\xa9\x15\x14\xa7\x54\xd0\xb1\xbb\x73\x41\x51\xa8\x90\xc4\x5f\x11\x64\xe8\x6a\xe4\x8c\x5b\x3d\xce\xb6\x3c\x01\x77\x97\xe7\x9d\xf7\xdd\xcb\x32\x09\xfc\xdc\xfd\x50\x12\x02\x3f\x76\xce\xbb\x77\xa5\x8b\x76\x95\x2c\xb8\xd8\x6c\xdd\x29\xf1\x2f\x9d\x92\x73\xfc\xf4\xd4\x2e\x6e\x0d\x82\x52\x50\x1f\x2b\xeb\x70\xe3\xc3\x4e\xfc\x3f\x3a\xc2\xa8\x5a\xcb\xdc\xba\x26\x07\x67\x84\x2f\xd9\x1c\xea\x7d\x75\x0b\x7d\x5f\x56\xbd\x2a\x8b\xbe\x4c\x67\x89\xb7\x9d\xb4\x0a\x4b\x44\xec\xc4\x03\xb5\xbb\xc9\xe8\x51\x63\xd8\x2d\x78\xe9\x27\xf0\xd1\x4c\x73\x6d\xd0\x98\x0e\xc4\x49\xee\xff\xa2\xed\x82\x82\xb1\xbd\x45\x6e\x19\xeb\x0b\xaf\x7f\x8f\xb9\x99\xe4\xc3\x56\x22\xa7\x27\x05\x7c\xd7\x09\x9d\xf1\x29\xb5\x02\x2a\x53\xf3\x93\x61\x26\x87\x27\x53\xaa\x0d\x53\x27\xb3\xfb\x31\x78\x7e\xbd\x3f\xe1\x24\x34\x3b\x96\xbf\xbf\xf8\xd3\x0f\xc7\x17\x7f\xf9\xe1\xcd\xa2\x45\xa5\x69\xff\x3b\x22\xa1\x33\x9d\x67\x2e\x42\x44\xc5\x6b\xe3\x8f\x7c\xce\x56\xed\xf7\x65\x79\xbb\x76\xd3\x00\xcf\xae\xef\x4a\x16\xce\xf2\x9f\x1f\x3b\x1f\xaf\x6e\x7e\x2d\x71\xca\xde\xd5\x4d\xfb\xc3\x72\x4b\xe7\x82\x8a\x58\x59\x86\x5f\x84\x7c\x14\xe5\xd9\xeb\xea\xa4\x73\x61\xf8\x94\x79\x0d\xd1\xfd\xd9\xc3\x99\x6e\x31\xf3\xab\xde\xcf\x65\x21\xe7\xfd\xc5\xaf\xbd\xce\xe0\xf6\xfc\x97\xa5\x33\xc1\xcf\x4a\x23\xbb\x05\xf7\xf6\x99\xcc\xf2\xa9\x88\xff\xbd\xfd\xd8\xba\x97\xbd\xce\x87\xea\xe8\xae\xda\xbd\xf2\xb2\xdf\x94\xa3\x26\xde\xbc\xbb\xba\xba\xe8\x94\x3c\x0e\x6f\xce\xdb\xbd\x4e\xaf\xfb\xb1\x74\xdb\x9d\xdf\xdd\x20\xe2\xd6\xb2\x69\xfa\x11\xd4\x4c\xd4\x4e\x2b\x9e\xe6\xbe\xf9\xcc\x5a\xc7\xbc\xed\x22\x12\xf1\xa0\x1c\x47\x70\x15\x18\x6c\x00\x46\x87\xe3\x60\xf1\x4b\x70\xa4\xb5\xbc\xc6\x94\xb7\x89\x34\xf3\xba\xa5\x1b\xbd\x8c\xe5\xf5\xc2\x10\x10\x86\x0e\x55\x4c\x9a\x65\xf2\x11\xe3\xc2\xa6\xdc\x5e\x79\x0e\x3b\xc8\xbe\xa2\x49\x92\x2b\xc5\x84\xc9\xe6\xad\x1a\x76\x52\xde\x16\x96\x28\x66\x3e\xca\x5c\x98\xed\x49\xae\x7d\x59\x3a\xd4\x9d\xcb\x4f\x83\x4f\xed\x32\x05\x76\x2f\x96\x1f\xf2\xb8\x89\x9a\x7b\xae\x7d\xf9\x6b\xb8\xe1\x20\x7a\xf0\x28\x68\x66\x28\x18\x26\x19\x67\xc2\x80\xc5\xde\xc8\x0c\xc4\x05\xc2\x38\xa8\xda\x53\x3b\x39\x2e\xc6\x04\x03\x97\x3c\x98\x22\x0e\xf2\xd4\xff\xa3\xd2\x9e\x86\x75\x01\x63\x9f\x0f\xc8\x84\x76\x9c\x36\x29\x08\x13\x0f\x5c\x49\xc0\x52\x24\x0f\x54\x71\x3a\xcc\x9c\x70\x64\xe7\x7a\x0a\xff\xbb\x59\x9b\x60\xb7\xab\x30\xae\x5b\xa9\xcc\x79\x08\xec\xda\xce\x0a\x50\x17\x25\xb5\x18\x1f\x55\xaf\xe0\x57\x62\xa2\xfc\xb0\x7a\x54\xdf\x2f\xd8\xdd\xba\x42\x1b\x2a\x12\x76\x96\x51\xad\xb7\x1d\x2b\x2a\x0e\x47\x65\x76\x76\x73\x73\x77\xdd\xeb\xbe\x5b\x41\x42\xd5\x8f\x17\x03\xdf\x92\x2c\xf7\xa6\xe9\xa1\x92\x34\x25\x76\x6f\xe4\x18\xcd\xe0\xee\xca\x2e\x30\x2d\x31\x02\x35\xc4\x02\x94\xf0\x34\x83\x9b\xdf\x6b\x28\xb1\x6d\x8d\xbb\x85\x20\x89\x5d\x09\x12\x29\x2b\x9e\xa5\x80\x55\x1d\x81\xb0\x9d\xca\x38\xcb\xa8\x19\x49\x35\x45\x12\x2a\x4d\x1a\x1b\x5f\xde\x28\x17\x86\x29\x95\xcf\x0c\xf7\x20\xa5\xd5\x2b\x10\x8a\x92\xca\xf1\x47\xa6\x35\x1d\xb3\x5d\x9c\x2f\x75\xd7\xfe\xed\xa7\xf8\x4f\x70\xae\xac\x73\xa5\x97\x46\xe8\x83\xb6\x3c\x3d\x5d\x89\xf7\x94\x67\xb9\x62\xd7\x32\xe3\xc9\x96\xce\x62\xab\x66\x0e\xba\x1f\xad\xf8\xdd\xee\x75\x2e\x4a\x7c\x0a\x9e\xb5\xdf\xf7\x3a\x37\x0e\x05\xb2\xfd\xee\xa2\x33\xb8\xbc\x3a\xef\xdc\x0e\xce\xae\x3e\x5e\x5f\x74\x56\xf8\x60\x1b\x1b\x5f\x34\x59\x54\x5f\x3d\x5d\xf8\x05\x76\x58\xe5\xa8\xdd\x78\x4d\x17\xe2\x9b\x29\xcf\xc0\x01\x24\xd1\x11\x44\x89\xb0\x3a\xbf\xfd\x59\x7b\xbd\xca\x87\xf3\xb5\x48\xd7\x7c\x97\x65\x84\xe6\x46\x4e\x29\x98\x31\xb3\x79\x5f\xd0\xa1\x54\x06\xb4\xbb\x70\x33\x10\x95\x0b\x61\xb9\xa2\x6d\x0c\xb1\x47\x93\x8c\x51\x41\xf2\x59\x14\x8a\xee\x8c\x71\x23\x2e\x20\x4a\x64\x4a\xd5\xbd\xaf\xeb\x11\x22\x08\xc3\xa1\xd0\x84\xea\xbe\x40\xd4\x06\xc7\x0a\xd7\x58\xe1\xd3\xb5\xde\x6a\x5c\x9d\x29\xbd\x67\x76\x55\xa6\x79\x32\xb1\xfa\xe1\x58\x31\xad\x9d\xc1\x26\xa1\x02\x9d\x6f\xee\xf5\x47\x9e\x65\x7d\x21\xa4\x5d\x0a\x6f\x17\x4a\xd9\x8c\x89\x94\x89\x84\x63\x00\x3a\xf8\xad\x82\xfd\x76\xac\xe8\x6c\x42\xb4\x04\x87\x0f\x2c\x3b\x68\x9e\xf8\x91\x0f\x59\x71\x38\x15\xf0\x38\x36\xeb\xa8\xdc\xf2\x89\x2b\xb8\x84\x70\x95\xe1\x63\x6f\xd3\xf1\xb6\x4c\xd4\xe0\xa7\xb3\x8c\x19\x44\xa1\x85\x25\x87\xcd\xb0\x6b\x5d\xda\x0f\xbb\x4d\x75\x9b\xd0\x17\xc5\x98\xa9\x76\x23\x6a\xd5\x98\x8b\xdc\x91\x22\x3f\x53\x91\x66\xb6\x15\x6f\x18\x2c\x9f\x45\x88\xa2\x6c\x5b\xaa\xf1\xa7\x71\x17\x49\x2d\xa1\xb9\xde\x48\x54\x5b\x9e\x35\x80\xfa\xfc\x71\xe1\x10\x05\xf2\x76\x29\x03\xb0\xba\x33\xcb\x22\x69\x26\xdd\x2a\xe1\xeb\x39\xd6\x1d\x20\x30\x9a\x06\xdd\x71\xa6\xb8\x48\xf8\x8c\x66\x5b\x09\x96\x95\x38\x32\x17\x9f\xf5\x3d\x1f\x59\xf2\x79\xbb\xe0\xc7\x30\x4c\x4d\x21\x7d\xc6\x0d\x33\x6c\xe1\x2a\xa1\x0d\x77\xc7\x12\x32\x2d\xc7\xda\x6c\xb1\x37\xe8\xa4\x6e\x9a\x6e\xa5\x15\xd7\x3b\x46\x49\xd0\xec\xba\xbe\xcd\xba\x05\x8b\x1e\xfe\x6b\xd9\x56\x7f\xa4\x33\xbb\xc5\x88\x61\x4b\x68\x31\x47\x27\x30\xb9\xe2\x11\xde\xd5\x1b\xf9\x7e\x42\x04\xe2\xfa\x0a\x74\xb1\x84\xce\x57\xbf\xd8\x49\xc9\x07\x16\x25\x2c\x39\x92\x1c\xe5\xc6\x9e\x26\x0a\x5e\x34\xf2\x3d\x6b\x8d\x5b\xc4\x83\x0e\x1f\x91\xf6\xf5\x75\xe7\xf2\xfc\x88\x30\x93\xbc\xf5\xc1\x24\xce\xb7\xde\x17\x46\x3a\xe1\x62\x4e\x26\xf2\x11\x58\x19\x53\x63\x56\x9a\xb3\x77\xc4\x03\x0c\xcd\x98\x6b\xa3\x5c\x38\x80\x48\x63\xc8\x6d\x3e\xad\xca\x8d\x48\x21\xb9\x99\xec\x42\x1a\x54\xeb\x7c\x6a\xe5\xda\x01\xa7\xd3\x81\x92\xd9\x2e\x67\xf8\x1c\xa6\x02\xa2\x73\xc8\xf5\xe2\x74\x4a\x6c\xb3\xce\x95\x19\xcc\xee\x41\x02\xb3\x72\x8c\x65\xa3\xf6\x9a\x8b\xae\x19\x6f\xe6\x73\xa1\x13\xdc\xbb\xf0\x20\x17\xac\xe1\x64\x17\xf6\x99\x81\x33\x89\x0d\x68\x92\x58\xf1\x7b\xcf\x93\x8a\x70\xdc\xbd\xed\xcd\x75\xf4\x64\xd3\x5c\x45\xe7\x7e\x98\x33\xcb\x70\x20\x4a\x6b\x11\x06\xba\xa6\xdf\xe1\x7c\xa1\x57\x8f\xb4\x7e\xa7\x83\x7a\x85\x77\xa6\x66\xb0\x93\x1a\x91\xda\xcd\x84\x39\x0c\xa7\xb8\x4b\x1f\x7b\x69\x1b\x9e\xcb\x5c\xd5\x88\x10\xad\xbe\x38\x67\x33\xc5\xac\x60\x5e\xb5\x54\x06\x9a\xbe\x29\x53\xe2\x81\xae\x0f\x74\xfd\xea\xe9\xfa\x0c\xab\x2b\x78\xa3\x6c\x84\xa0\xbe\x0b\xa1\xd7\xb5\xb2\xac\x25\xf2\xe4\xf7\xfb\x19\x5e\xec\x75\xc0\xf4\x65\x2a\xf2\x77\x30\x17\x0b\xe5\x30\x70\x23\xa1\xd4\x20\x5c\xb8\x7f\xcf\xa5\xa1\xfa\x6d\xab\x2f\xac\xf4\x70\xcf\xe6\xe8\x84\xb2\xf7\xf3\x1f\xac\xcc\x78\xac\x99\xd0\x10\x92\xf7\x07\xb4\x0e\xdb\xbd\xf5\x36\x1b\x54\xa1\xb0\x0a\x47\x19\x33\x1f\xc2\xa8\x5c\xa3\x4e\x3c\x28\x82\xd4\x0a\xa0\x7d\xff\x0c\x87\x3f\x66\x06\xb2\x58\x0c\x37\x20\xdb\xa7\x58\xe6\x63\x61\xe8\x2b\x0d\x73\x48\x15\x4a\x82\xb1\x30\xcd\x77\xe3\x78\x7a\xb1\x8d\x95\x2c\x21\x48\xb5\xb7\x2e\x2e\xf1\xc4\xdb\x37\x12\x25\x17\x6a\x67\x50\x2b\xac\xd8\x9d\x1e\xe2\x39\xf0\x1e\x12\x26\x5a\x8f\xfc\x9e\xcf\x58\xca\x29\x44\x29\xda\xbf\x4e\xec\xbc\x7e\x7f\x76\x73\x75\x39\x28\x62\x8b\xff\xb3\x2f\xda\x99\x96\xc4\xca\xe9\x52\x19\x4d\x84\x14\x21\x24\x72\xa6\x98\x97\x85\xdc\x5c\xec\xaa\x46\xf6\xd5\xbe\x68\x1a\x41\x2a\x13\xdd\xa2\x8f\xba\x45\xa7\xf4\x1f\x52\x80\xb3\xa6\x0d\xff\x3c\xcb\x64\x9e\x7e\xa6\x26\x99\x9c\x80\x0f\xc5\x9c\xb0\x07\x26\x0c\xda\x6a\xed\x72\xa5\x90\x20\xa1\x21\xa2\xf2\xf7\x76\xcc\x45\x98\xb3\xb6\x1a\x57\xc2\x66\x86\xfc\xff\x15\x1b\x4a\x69\xea\xb9\xb3\x1c\x8d\x34\xdb\x88\x13\x17\xca\xc4\xed\x15\xf9\xcb\x9f\x7f\xf8\xd1\x92\xd0\x36\x6b\xdc\xbd\xbd\x1a\xd8\xef\x7f\x7f\xee\xbe\xd7\x6b\x91\xdc\x39\x26\x7d\xed\x14\x72\xbc\x62\xbe\xb5\x2b\xb5\xa9\x35\xbf\x7a\x15\x70\x3d\xcb\xe8\x7c\xc1\x2f\xb8\xea\x0a\xb9\xb4\xfc\x60\x46\x13\x56\x24\x9d\x79\x07\x7b\x22\xa7\x53\x88\xc7\xf0\x6e\xf6\x94\x8f\x20\x30\xc3\xd8\xeb\x85\x0c\x99\x79\x84\x30\x20\xff\x6b\xb8\x16\xbd\xa9\xce\x32\x0f\x60\x50\x7d\xbb\x56\x69\x0e\x46\xdc\xfe\x9b\x23\xd2\x7f\x93\xb2\x07\x96\xc9\x99\x3d\x3f\xf6\x07\x66\x92\xba\x4b\xa1\x33\xa5\x3c\xbb\x94\x26\x44\x96\xec\xb2\x2d\x8a\x25\x7c\xc6\x2d\x3d\x0f\x98\x6d\xf7\x49\xc3\xc2\x57\x39\x34\x7c\x36\x3b\x8c\x84\xd0\x34\xb5\xc7\x0a\xea\x1d\xf8\x41\x16\x26\x58\x11\x2d\xc0\x7a\x6c\x33\x98\xa6\xf7\x4b\xc6\xf5\x8e\x9d\x44\xaa\x00\xef\x1a\x3a\x2e\x10\xea\x97\x52\xad\xab\x77\x51\xe0\xa8\x7b\x0b\x54\x8d\x04\x51\x7f\x6c\xac\xdc\xb2\xde\x38\xcb\x2b\x73\x6b\xbf\x5b\x3a\x34\x1d\x03\x2f\x84\xea\x49\x41\xfd\x74\xc1\x91\xd5\x78\x4c\xb6\x72\xc4\x49\x26\x75\xae\xd6\xf4\x9a\x95\x07\x7d\xe6\x3e\x5d\x36\xee\x4e\xac\xad\xe7\x99\xd1\x1b\x19\x04\x6a\x16\xbe\x92\xb7\x87\x87\xdb\x38\x09\xd3\xbd\x7d\x44\x8a\x9a\xc7\x34\x2b\x22\x47\x45\x4a\x0a\x69\xaa\x2f\x42\xb0\x3b\xd5\xe4\x91\x65\x60\xd5\x4d\xe4\x74\x06\x92\x82\x1b\xae\x6b\xc9\x5e\x74\x86\x1a\x76\x44\x64\x6e\x6c\x63\x47\x58\xdd\xcb\x6d\xc1\xf1\x90\x02\xfa\x43\x51\xb3\x13\x64\x57\xe7\x48\x0a\x49\xfb\x48\xeb\xc8\xc0\xb8\x20\x1f\x98\x81\x56\x00\x45\x25\x9e\x20\x56\x31\xab\x65\x41\xd5\xb5\xdf\xe1\x44\xb9\x99\x6c\xb0\xf3\x45\x8c\xfc\xbb\x4c\x0e\x97\xee\x7b\x9b\x4c\xd1\x74\xe4\x7a\xf1\x96\xf1\xc2\x68\x18\x65\x9b\xaf\xa2\x51\xa6\x54\x29\x1e\x6e\xc5\xf1\x2f\xc7\xd5\x2f\x27\x4f\x88\x6a\x8f\x8a\x61\x2f\x8e\xd3\x99\x93\x57\x8d\x11\x8c\x9e\x83\xd7\x63\x5a\xc5\xf1\x4e\x17\xcd\xc9\xab\x88\xa0\x6c\x86\x7e\xea\xc9\xc0\x01\x31\x13\xc6\x15\x59\x6b\x5a\xfe\xfc\x0e\xf0\xcc\xaf\x4f\x34\x05\x6d\x37\x09\x80\xc8\x44\x02\x83\xb0\x03\x73\xa8\x2f\xa5\x92\x7b\xad\xbe\xa8\x0c\xc2\xf9\x27\x34\x01\xf2\xf2\xa7\xa1\xc4\xfb\x8f\xc8\x88\x7f\x71\x8d\x16\x7e\x4b\xff\x6a\xa4\x19\x37\xd8\xc9\x27\x74\x91\xec\x36\xb8\x1f\xaf\xe1\xfb\xa5\x86\x60\xa9\x8d\x15\x07\xac\x60\xa5\x58\x22\x95\x65\x89\xd0\x6d\xf0\xa2\xae\xbc\x1b\x0d\x55\x76\x51\xe8\x46\x02\x78\x81\x82\x94\x52\xc3\x8e\x0d\x5f\x19\x92\x66\xd5\x15\xcb\x60\xa7\x56\x9d\x8d\x32\x9c\x0a\x0e\x3b\x64\x63\x2a\xbc\xc7\xad\x61\xb4\x9e\xb5\xef\x70\x98\xad\x64\x45\x21\xa4\x00\xe4\x08\x3b\xa0\xf2\x38\xf4\x0c\x96\x73\xe9\x38\x9c\x95\xe4\xb9\x56\xcd\x2c\x59\xb6\x47\x1a\x8c\x36\x0d\x83\xcd\xa1\x54\xf2\x8b\x19\x6c\x46\xb5\x21\x6e\x4c\x0d\x23\x8e\xa5\xd9\x3d\xa4\x66\x2e\x2b\x98\x14\x2b\x0e\x9b\x08\xe7\xf1\x10\x89\x66\xc6\x70\x57\xd8\x27\xd7\xcc\x45\xd4\x4f\x99\x1a\x7b\x81\x0f\xb1\xde\xc3\xd1\x76\xa0\xef\x9e\x8f\xc6\xbc\x04\x7c\xaf\x8b\x4d\xb7\x48\x5b\x2c\xe4\x05\x79\xfb\x5d\x69\xbd\x90\x6b\xd3\xec\x91\xce\x35\x99\x29\x0c\xc3\x47\x87\xac\x9f\x3c\x38\x56\xca\x1f\x05\xcb\x81\xf1\x1e\x71\x28\x20\xba\x86\x71\x35\xaa\xea\xb5\x3e\xb3\x5b\x53\xf6\xaf\x38\x0b\xeb\x6a\x7c\x05\x15\xa8\x96\xd3\x2d\x08\xb3\x45\xea\x5c\x1c\x18\xea\xe0\x39\x40\xb6\x74\xda\x45\xa7\xec\x68\x6c\x12\xf8\xc0\xea\x76\x41\x87\x2c\xdb\xd9\xc1\xb8\x95\x05\x04\xba\x76\xc0\x29\x56\xfd\x66\xe8\x30\x85\x6a\xb0\xaa\xca\xda\xbc\xdd\x50\xe5\xeb\xb9\x4f\x8b\x79\x96\x4a\x15\xec\x30\x51\x8f\x04\xb4\x3d\xff\x6e\x42\x09\x8a\x2f\x92\x02\x26\xa8\xfe\x16\xa9\x9a\x6f\x76\x19\x43\x84\xe7\x53\x3b\x84\x7d\x00\xfa\xec\xc5\x18\x14\x48\x66\x4d\xf0\xca\xee\x88\x08\x29\x18\xe1\xba\x78\xd9\x94\xe3\x44\x42\xd6\x81\x15\x23\x51\x4d\x5f\x2c\x8d\xf3\xcc\x3a\x79\x3b\xe8\x92\x64\xc4\x59\x96\x6a\x22\x98\x55\x69\xa8\x9a\x43\xf6\x2f\xf2\xb3\x75\x44\xa3\x7d\x09\xab\x35\xb7\x87\x93\x22\x83\x53\xc4\x48\x02\x82\x58\x65\x5c\x04\xb3\xa3\xdd\x4b\xee\x23\x17\x7a\xdf\x17\x41\x09\x06\xf2\xe3\xda\x2a\x77\x2d\x02\xdb\x66\x8a\xaf\x30\x95\xc4\x84\x3d\x3c\x2a\xca\x2f\x03\x94\xdd\x26\xaa\xbf\xbf\xb6\x8a\x75\x2c\xa7\xbf\xfa\x2c\x7d\xac\x0a\x5d\x57\x32\xd7\x13\x45\x56\xb2\x42\x2e\x67\x3a\xae\xb6\xce\x0b\x30\x53\xad\xbf\x52\x76\x93\xf3\x05\xc3\x15\x56\xce\x29\x74\xec\x28\x1b\x27\xd6\x54\x5c\xe6\x3e\x56\x3e\xa5\x9a\xfc\x41\x48\xf3\x87\x08\xdb\xc0\x6b\xc3\x58\x7a\xc9\x59\x26\x8e\x4a\x98\x4b\xdc\x67\x6a\x3a\x22\x21\x34\xca\x10\x5a\xb9\xf2\xbb\x02\x6a\x14\xfe\xc4\x27\x15\xde\x3a\x8b\xb1\x40\x4d\xa0\x75\x88\xbb\xba\x37\x13\xc0\x73\x14\xfd\x23\x48\x06\x8a\xf9\x6c\xb1\xa9\x54\xac\x82\xfd\x8a\xcc\x3b\x04\xcb\x21\xe6\xe6\xfa\x54\x5a\x63\x0d\x43\x3c\xcb\xe2\x98\x97\xac\x60\xcb\xad\x5f\xfb\x88\x82\x9b\x96\x93\x6e\x97\x50\xc0\x0a\x48\x83\x7a\x8d\x7c\x9b\xc8\xb5\x26\x91\x34\xd8\xa1\xe3\x22\x57\x4d\x89\xfc\xad\xbe\x78\x2f\x95\xbb\x3b\xb5\xc3\xc8\x19\xd2\xe4\xfe\x98\x89\x94\xd0\xdc\x4c\x30\xa1\xde\x99\x8e\xe7\x6e\x67\xad\x5c\x00\x24\x10\x12\xb6\xb9\x4e\xa8\x72\x4c\x7f\x44\x1f\xa4\x1f\x45\x5f\x44\x8d\x00\x0a\x0f\xc0\xae\x01\x34\x74\x93\x00\xc1\x00\xe6\xb2\x69\x2d\xea\x00\x90\x17\xe0\x8f\x97\x9f\x99\x12\x88\x33\xe0\x07\x09\xa6\x9d\x84\x5d\x59\x9d\xae\x37\x45\x79\xd5\x46\xc7\x65\xe4\xc2\x9b\x47\x2e\x1e\x15\x8d\x31\x6e\x06\x56\x44\xf9\xc1\xf3\xcd\x12\xb4\xc0\x28\x57\x10\xa7\x50\xd7\xe6\xf7\xc9\x84\x67\x85\x79\xfa\xed\x51\x18\xa6\x6d\x32\x63\x0f\x2c\x43\x04\x9a\x44\x81\x0f\x17\xfd\x89\x3f\x90\xff\x85\xa0\xc0\xe4\xc7\xbe\xf8\x00\x2c\x35\xcb\xe6\x47\x84\x8f\x8a\x96\xa9\xa9\x34\x73\x5f\x3b\x00\xe3\xa2\x25\x48\x79\x20\xb8\xd7\x13\xfa\xc0\xfa\xc2\x37\xf3\xbf\xc8\x3d\xf9\x23\xf9\xb1\xc9\x86\xe3\x5d\xb1\x4f\xac\xe2\x03\x05\xfb\xbe\x22\xae\x70\xe4\x44\x47\xe0\x1a\xde\x02\x50\x32\xbf\xd5\xe4\x0a\x04\xec\x0b\x2e\x1e\xe4\xa2\xe3\x2a\x3e\xb5\x54\x31\x61\x06\x42\xa6\x6c\xc0\x6a\xbc\x56\x4b\x98\x84\xbd\xd0\x2f\x65\xca\x56\xfa\x9c\x82\x70\xfc\x19\xac\x16\x3a\x1f\x86\xed\x80\x90\xe5\xa0\x6f\x97\x09\xac\x7e\xc0\x21\x37\x7d\x9b\xe1\x6e\xeb\x26\xbb\x72\x92\xd5\x11\x70\x73\x37\x80\x7a\x57\x4d\x46\x8d\x8f\x0e\xad\x9e\xc2\xaa\x71\xd8\xbe\x6c\x67\xee\xee\x9b\x28\xeb\x1e\xe0\xba\x14\x1f\x73\x2b\x69\xaf\xef\x8a\x03\x06\xb8\x8d\x85\x1b\xf3\x9c\xd7\x32\x71\x17\x4b\xe1\x33\x46\x8e\x03\xd9\x15\xee\xa5\xa1\xcc\xab\xf2\xb6\x5b\x00\xae\xe3\xb8\x55\x27\x5a\xcf\x2d\xfb\x1d\x63\x6c\x14\x9b\x70\x44\xc8\x68\x9f\x5d\x10\x7b\x28\xe4\x94\x21\x24\xb4\x5d\xb4\xdc\x4c\xa4\xe2\xff\x68\xf4\xc5\x36\x4b\xd7\x85\x0f\xad\x88\xf8\xc1\x71\x96\xe5\x6c\xa0\x51\x94\x0a\x4c\x49\x89\xa8\xd3\x6e\xc8\x30\x87\x34\x70\xcb\x5d\x47\x79\x86\xe8\x4b\x89\x54\x29\x16\x28\xd0\xa5\xf8\x22\xfb\x1e\xd5\x9a\x8f\x5d\x44\xad\x6f\x90\xbb\x6c\x59\x87\xef\x94\x4c\xa8\x18\x2f\x97\x21\xff\x9a\xb3\x7c\x4f\x21\x5a\x0e\x73\xf1\x2b\x79\xe2\xe9\x58\x17\xe1\x7a\xb8\x36\x96\x25\x17\xeb\xfb\x77\x3b\x53\x1d\x45\xf3\x79\x5b\x5a\x48\x9a\x44\x15\xba\xaa\xcb\xaf\x61\x77\xb9\x71\xc7\x6f\x0f\x96\x97\xe7\x70\xd5\x2f\xca\x46\x35\xfc\x07\xe8\xcf\xe1\x1a\x3d\xab\x65\x23\xf0\xf0\x8a\xdc\xb1\x6f\x2b\xc7\x06\x5a\xb4\x1f\x94\x1b\xa1\x63\xae\x8b\x7e\xcd\x7a\xea\xb8\x2d\xdb\x50\x36\x26\x09\xec\x7b\x00\x1e\xac\x9d\x2d\xb7\x91\x45\xb2\x88\x18\xc5\x54\x01\x9f\xc4\xf3\xb4\x66\x96\xb2\x4f\xb0\x9c\xac\x10\xb9\x04\x9b\x92\x48\xa2\x11\x6d\x71\x3b\x2d\x2a\x41\xf5\x63\xf3\x8f\xd7\x1d\xca\x52\x4f\xc8\x9a\x7e\x0d\xd0\xe6\x97\x1d\xdb\x0b\x17\x68\x54\xf6\x08\x60\xf4\x84\x8c\x7c\xa2\xe0\x1c\xc8\x35\x31\x8a\x42\xac\x28\x44\xf8\x7d\x46\x29\x96\x6b\xd4\x15\x1d\xb2\x27\xa8\xa2\x0e\x47\x10\x98\xa7\x83\x1d\x33\x13\x2a\x5c\x9e\x58\x9d\xf7\x21\x00\xa3\x87\x93\x10\xfb\x1f\xea\x3a\x83\x8e\x9c\xe8\x5e\xdb\xa4\x5f\xe8\x38\x90\xb9\x12\x3f\xdb\x64\x26\xe6\x1a\x02\xe0\x69\xd6\xa8\x2f\x0e\xa5\xcc\x18\x15\x4d\x62\x75\xed\xe3\x05\x4b\x11\x8f\x63\x66\xad\xc6\x67\x25\x33\x95\x33\xab\x53\x50\xcc\x94\x8b\xe6\x45\xa1\x7e\x89\x09\xb0\x8c\xa8\x14\xda\x81\xa6\x2b\x7c\x21\x47\xf1\xc9\x1f\xb2\x6c\xa3\x20\x13\xfc\x60\x29\x15\xc1\x2b\x45\x89\x8c\xb5\xb2\x8f\xe2\xd8\x87\xda\x5c\xad\x55\x03\x8b\x33\xbc\x96\x9a\x85\xcb\x59\x52\xdb\x0d\x51\xb3\x24\x57\xdc\xcc\x07\x4e\xb1\x5e\x9f\x69\xdd\xba\x2f\xcf\xdc\x87\xeb\x88\xaf\xa7\xc4\xf7\xe7\x15\x79\x22\x1d\x36\x55\x34\x85\x75\xb6\xdb\x8a\xa4\xb5\x39\x1c\xcb\x16\xd6\x27\x91\xac\x37\x54\xdb\xc5\xb6\xc3\x73\x48\x3c\x03\x39\xf2\xe9\x19\xeb\x2f\x6c\x15\xa2\x68\x03\x8b\x84\x42\x84\x13\x32\x53\x5c\x2a\x87\x04\xd4\xe8\x17\x58\x75\xa9\xb7\x2b\xb1\x23\x80\xeb\x3a\x85\x7b\x47\x17\xb8\x78\xde\xf6\x17\x6e\xfd\xd2\xea\x40\x1a\x2e\x7c\x9c\x4a\xa6\x23\x41\x1b\x16\x16\xb9\x18\x1f\x31\x3b\xe8\xbe\xb0\x9a\x46\xac\x14\x60\x36\xaf\x4f\xee\xb5\x9d\x26\x4a\x6a\xed\xc2\x41\xb0\x1d\xdd\x5a\x2a\x4f\xf4\x5c\xae\xe5\x3e\x1c\x7d\xcf\x17\x19\xba\x58\x33\x2d\xc2\xf1\xaf\x97\x3f\x87\x2c\xe4\x95\x36\x72\xff\x5d\x83\xc6\xfc\xd1\x20\x8a\x51\xed\x2c\x20\x10\x5b\x55\x89\x2a\xd9\x40\x5a\x0c\x63\xc6\x18\xcb\xe3\x90\xc9\x1d\x91\x90\x43\x3e\xc1\x72\x45\x5c\x13\xae\x14\x83\x6a\x08\x08\xbd\xd1\xad\x50\x0d\x2f\x6a\xf2\x17\x2b\x12\x94\x7d\xec\x19\x6e\x4b\xcd\xa7\xf6\x3c\x03\xe4\x93\x90\xc7\x72\x06\xda\x63\xf5\x2d\x48\xc3\xe7\x23\x4b\x89\x91\xa9\xc0\x7e\x21\x8e\xa1\xac\x0e\x13\xa6\xce\xd5\xe1\x1b\x01\xd7\x08\x20\x7f\x4c\x98\xa3\xdc\xfe\x9b\xf6\xbb\xab\x9b\x5e\xe7\xbc\xff\xa6\xf0\x5f\xfb\x58\x27\x7f\xb9\x87\x2c\x61\x29\xfa\x22\xb8\xa1\x42\x5a\x16\xec\x25\xa1\x69\x5a\x24\xc5\x62\x04\xe4\x00\xcd\xe9\xeb\x9e\x8a\x95\x9e\xa8\xc5\x66\xde\xf3\x2f\x2c\xbd\x69\xc0\xd2\xdb\x4b\x78\xc0\x5a\x76\xda\x5a\x12\xcf\x05\x5f\xf3\x0a\x2b\x4f\xe5\xce\x7e\xb7\x3e\x05\xe3\x49\x80\xbd\xf2\x46\x3f\xcc\x78\xa3\x86\xd0\x50\xc6\x70\x04\x34\x20\x92\x39\x81\x74\x00\x4b\xb4\x73\xf2\x13\x99\x72\x01\xa1\xbb\xcb\x96\xf6\xae\x3c\x8f\x4d\x30\x8c\xbb\x97\x77\xe5\x02\x03\x3f\x5f\xdd\x95\x91\x39\xdb\xbf\x2e\x47\x23\x2e\xb7\xb0\xcc\xa6\x13\x4d\xb1\x08\x8f\x92\xb8\x12\x61\x65\xea\x26\xfa\x81\x99\x4f\x58\xd0\x64\x1f\xce\x50\x07\x84\x08\x6a\x1f\x1b\xf8\x92\x36\xeb\x93\xc1\xa7\x9a\x22\x38\x85\x82\xd3\x73\x30\xe4\x4a\x66\x20\x6b\xb3\x50\x05\x27\x8a\xe7\x6d\x61\x69\x12\xa8\x9b\x01\x66\x25\x6f\x93\xb4\x57\xa6\x14\x76\xb9\xfa\xf0\x76\x40\x35\x2f\x9a\x93\x23\xfc\x78\xad\x20\x9f\x9b\xd8\xad\x65\xdb\x2a\x96\x92\xb4\xaf\xbb\x35\x6b\x7d\x51\x95\x8c\xbf\x2d\xb0\x80\x2c\x08\xe9\xfb\xc6\x09\x88\x02\x91\x5e\x04\x44\x80\x9b\xe9\x6e\xe8\x00\x68\xcb\xb8\x2e\x1b\x48\x9e\x54\x16\xaa\x8d\x36\xd8\x3e\x6e\xa6\x98\x00\x18\x8b\xea\x25\x9d\x8d\x93\x4d\x8a\x56\x7d\xc6\xc3\x06\x82\x32\x29\xbe\xf6\x26\x37\x07\x4f\x46\x67\xd4\xa1\xb2\x82\xb0\xe3\xd3\x4d\xeb\x50\x74\x5a\x7d\x11\x97\xb6\x45\xf1\xc4\xd2\x80\x4f\x6d\x06\x2c\x33\xcb\x2e\x14\xfa\xcd\xc3\xcd\x73\x14\x27\x9e\x54\x03\x27\xcd\xa4\x9c\x9c\xbc\xd0\x8f\xa3\x3e\x3d\xa1\x3e\xb6\xc6\x8b\xf4\xce\xf3\x1b\xe7\x52\x43\x7b\x51\x56\xa6\xeb\x98\x3d\x30\x81\xa9\xd2\x34\xc2\xa6\x89\x42\x1a\xad\xf4\x2f\xbe\x33\x21\x70\x89\x67\x2e\xa1\x9a\x06\xcf\x67\x61\xdb\xd4\x94\xbb\x96\x97\x13\xf0\x1e\x72\x53\x74\x05\x13\x78\x03\xe2\x83\x2f\x9b\xcc\x75\x0e\x3d\xdc\xd2\x40\x6c\x3c\xc4\xf8\xf9\x5a\x92\x65\x5f\x66\x2c\xd9\x26\xa1\xe0\xda\x17\x2f\x5c\x66\x3e\x2c\xe3\xd1\x81\x69\xcc\x6d\x9d\x91\xde\x98\x59\x1d\xed\x8a\x71\x6e\x94\xd6\x63\x07\xfa\xc9\xa5\x5e\x6f\x38\x4e\x9f\xd8\x33\x52\x72\xba\xde\x10\x9f\x27\x94\xbd\xb7\x10\x14\x5e\xb2\xc7\xbd\x90\x18\xf6\xd5\xa3\x6c\x0a\x5e\x5f\xc5\xf5\x3e\xe1\xbd\x18\xf2\x54\x00\x5e\xc1\x63\xdc\x79\x2f\xa5\x8b\x1b\x8f\xfb\x8c\xef\xac\xe0\xaf\xf3\x31\x5d\x95\x53\x50\xf2\x04\x0e\x19\x71\x92\x27\xc6\x71\xd7\x07\xa0\xc3\xf5\x59\xe7\x82\x88\x82\x19\x5c\x1a\x9e\x5d\x3c\x6d\xe8\x34\xe4\xf9\x57\x41\x24\x2a\xcb\xb5\x82\x1b\xed\x2b\xa0\xf8\x09\x82\xce\xeb\xcc\x0a\xa5\x40\x78\x17\xf1\xb3\x9f\x6c\xd3\xca\x0d\xbd\x74\x60\xa5\x74\xd3\x78\x40\x0e\x48\x3f\x4e\xb1\x5c\xdc\xca\xd2\xcd\x87\x15\x36\xbc\xa7\x63\x4b\x83\x04\x52\x27\x53\x95\x3c\x01\x12\xdf\xf1\x60\xcf\x9a\xd2\x79\x14\x89\xe8\x80\xdc\xe0\x72\xe6\x22\xfc\x55\x66\xb5\x9e\x98\x63\x12\xad\x8b\x08\x6a\x45\xe0\xec\x60\x68\xcb\xe2\xfb\x1a\xab\x06\xe1\x28\xd1\xbf\x80\x38\xf1\xdd\x4b\x84\x76\x87\x28\xbb\xb9\xcc\xc9\x23\xd7\x56\x1b\xeb\x0b\x30\xc0\x07\x3c\x79\x23\x1d\x06\xfc\x11\xbc\x05\xb1\xb7\x3a\x1f\x4e\xb9\x55\x5d\x8b\x49\xde\x01\x47\xb8\xf1\x91\x98\x78\x8e\xed\x07\x70\x6d\xfb\x18\xcf\xba\x6c\x8a\x15\xe7\x63\x0b\x8b\x43\xd1\xc8\xae\x61\x9c\x91\x7f\xf0\x69\x03\x39\x23\x31\x3b\x56\x6b\x6a\x8f\xd7\x21\x92\xb3\xfe\x50\x96\xb3\x99\x21\xe5\x9c\x6b\x53\xb9\x4c\x9a\x73\x98\x8b\x2d\xd8\x47\x18\x67\x13\x96\xca\xb2\xf8\x1e\xff\x49\xbd\xb4\x73\x1b\x4a\x25\xd5\x8a\x60\xd7\x8d\xf2\xcd\x4b\xcb\x25\x8b\xaa\xc2\x6d\xed\x75\xdd\x44\xdd\x2a\xd2\x21\x62\x52\x88\x42\x7e\xca\x69\x04\xac\xca\xba\x85\x34\x10\xee\x90\x00\x1e\xea\x42\xac\x51\x5f\xd4\xcb\x0d\xcb\x69\x6c\xd7\xc8\x85\xbd\xe6\x9c\x45\xd6\x22\x3f\x0b\x67\x11\xf9\x1c\x42\x35\x51\x19\x0d\xc5\x8d\x59\xe5\x5c\x79\x53\x77\x83\x16\x00\xe2\xc2\x36\x41\x6f\x35\xa7\x72\xcd\xb8\x82\x95\xe7\xc2\x5d\x99\x4f\xa3\x41\xed\x18\x80\x01\x69\xd7\xfb\x4f\x16\x07\x83\xf1\x11\x38\x23\x9c\xa7\x92\x62\xd9\x95\x80\xd2\xb1\xd6\xca\x6d\x0a\x86\x17\x81\x44\x01\xce\x55\x5c\x31\x0b\x0e\x8f\xcc\x42\x75\xa2\x0a\x77\x0b\xe2\x4e\x2e\x52\xa6\x04\xa3\x66\xf2\x7c\x0e\xfd\xb3\x5d\x4d\x86\xcf\xe6\xdc\x3f\xdb\x0b\x12\x6a\xc5\x61\xbe\xa1\xaf\x7c\x03\xc7\x73\x81\x8b\xb7\xa0\x44\xd5\x01\x46\x17\x39\x05\x9b\x60\x1e\xee\xe4\xf3\xaf\x57\x6c\x9e\x26\xfa\xa1\xc6\xa0\xb1\x10\xf7\x60\xcf\x66\x8c\x26\xb8\x62\x49\x5e\x6f\x98\x41\xcc\x66\xe8\xa3\x33\x1b\x0d\x2c\x67\x1f\x20\xbc\xd0\x06\xbb\x79\x43\x1f\xaf\xe0\x7b\x28\x97\x8f\x5f\xaf\x2f\x38\x2c\x53\x36\x83\xa5\x12\x10\xd1\x4b\xb0\x47\xc8\xf5\x57\xdc\xfe\xdb\xd7\x16\xf3\x7a\x5b\xec\xa2\x73\xbf\xb8\x1f\x1a\xaa\xad\xac\xa8\x20\x16\xeb\x90\x62\x5e\x35\xc1\x50\x95\x66\x2e\x71\x05\xd5\xc2\x8a\x02\xb0\x4c\x3d\xed\x8b\x9f\xe5\x23\x7b\x60\xea\x88\x50\x43\xa6\xd2\x0a\x7d\x91\x57\x0c\xa2\xec\x4b\xe9\xff\xe8\xfd\xa0\xe4\x92\x4e\x59\xda\x01\xd1\x21\x8a\xab\x75\x4a\xb2\x33\x40\xd7\xa5\x58\x42\xda\xa0\x2b\xab\xec\x06\xda\x17\x58\x98\x0c\x3d\xae\x40\x8d\xdc\x4f\x0c\x58\xe5\x1f\x82\x79\xfc\x0f\x2d\xd2\xb3\x32\x0e\xd7\xe5\xf1\x46\xe9\x1a\x4d\x63\xeb\x8b\xb1\x92\xf9\x2c\x28\x31\x72\x08\xda\x13\x9a\xc9\x6b\xcc\xe3\x30\x18\x6f\x1b\x4f\x68\x6a\x25\xa8\xe5\x84\x53\x52\xb3\x5f\x98\xd5\xa8\x1c\xfb\x1c\x13\x90\x65\x5e\xc1\xdb\xeb\x02\x7a\x80\x8c\x9a\x21\x59\xf6\x67\x66\x5f\x40\x83\xd5\x20\xbf\x07\xeb\x46\x29\x10\x6e\x4b\x88\xd9\xc8\x22\xe4\xad\x27\xf5\x11\x9c\x45\xb7\xce\xaf\xeb\xcb\x73\xd4\x15\xe1\x6a\xd8\xfb\xf5\x1d\xe0\x95\x51\x5e\xe7\x6a\x26\x21\x05\x22\x9b\xfb\xb0\x51\x97\xd6\x31\x93\xb3\x1c\x1d\xd0\x3c\xf6\x47\xd6\x0e\x88\x6b\xf3\x91\x9a\x64\x62\x45\xc7\x22\xbd\x61\x4f\x8e\xf9\x82\x91\x3e\xad\xaa\x5a\x33\x83\xb3\xb8\xf7\x06\x33\xcc\xda\x56\x08\x4c\x74\xf6\x51\x3d\xf0\x57\x96\x91\xa9\xed\xb5\x84\xf4\x1a\x61\xb3\xd5\xae\x75\x09\xd9\x6c\xef\x3e\xf9\x1d\x54\x09\x28\x4f\xca\x05\x89\x0a\x94\x3b\x67\x43\xed\x91\xce\x15\xdf\x4a\x63\x70\xc6\x2a\x80\x5c\x2d\x74\xcf\x29\x9d\x11\x6e\xf9\xb6\xbd\x79\xd4\x98\x1d\x91\x47\x7b\xe2\x4c\xae\x2c\x6f\xce\x15\xf7\x27\x0c\x14\xc6\x25\xdb\x57\xd6\xd8\x4e\x50\xda\xc0\x48\xc5\x84\x46\xa0\x7e\xae\x44\x64\x62\x72\x1a\x5c\xfc\xb0\xc3\x19\x17\xf7\xb6\x33\x04\x1b\xf1\x8e\x01\x65\xf9\x9b\x54\x3e\xe0\xbf\xb4\xa7\x2b\x29\x6f\x87\x5d\x6e\x86\x72\x5e\x75\x14\xb8\x18\x47\xa9\x4a\xf5\xfa\xf2\x3a\xa0\x21\xb5\x5f\xae\x87\x79\x52\xfb\xa9\x97\x27\xb6\xf9\x76\x49\x76\x47\xe3\xe7\xab\x0f\x78\x14\xce\xe4\x42\x4a\x9c\x44\x12\x27\x91\x39\xad\x0b\x52\x40\x11\x28\x9c\x3a\x09\xe5\x3f\xc3\xbf\x10\xaa\x0d\x97\xe6\x3f\x89\x54\x7d\x81\xbf\x1f\x05\x54\x17\xfb\x42\x91\x85\xd9\x80\x59\x10\xe8\xc9\xa3\x82\x6f\x27\x57\xf6\xda\xb7\xbf\x0c\x6e\x3a\xb7\x57\x77\x37\x67\x25\xe1\xf2\xec\xe2\xee\xb6\xd7\xb9\xa9\x7d\x86\x85\x78\xba\x57\x97\x83\xbf\xde\x75\xee\x1a\x1e\xf9\x06\x2e\xda\xef\x3a\xa5\x22\xc0\x7f\xbd\x6b\x5f\x74\x7b\xbf\x0e\xae\xde\x0f\x6e\x3b\x37\x9f\xba\x67\x9d\xc1\xed\x75\xe7\xac\xfb\xbe\x7b\x86\xe5\x03\xa3\x77\xaf\x2f\xee\x3e\x74\x2f\x07\x3e\x24\x26\x7e\xe4\xcb\xaa\x0f\xa2\x2e\xaf\x2e\xdf\x77\x97\x17\x2d\xab\x9f\x6f\x23\xc4\x7d\xc1\xb1\x81\x09\x15\x40\x36\xfe\x02\x1f\xce\x1d\x39\xf0\x7f\x80\x4d\xc5\x55\x11\x3e\x3e\xf2\xff\x42\xc8\xe4\x63\xcb\x36\xbc\x55\xad\x38\x71\x7d\x11\xcc\x9e\xe1\x8e\x30\x74\xac\x7d\x05\xb1\xd2\x68\x4f\x49\x7b\xe6\x0a\xf0\xcb\x72\xa7\x50\x7e\x2c\x8c\xd4\x5b\xbb\x81\x8e\xa0\x02\xa0\xab\x6a\x57\xdd\xd2\x72\x83\x6e\x4e\x30\x04\x67\xf5\x4b\x63\x5c\xff\x2a\xd0\xba\x2f\x95\x57\xa6\x85\x53\xe2\xb9\x9a\x6d\xd6\x8e\x0b\xb2\x27\xe7\x82\x4e\x17\xea\xa4\x61\x02\xa1\x4b\x2d\x9c\x32\x61\xaa\x2d\x96\x48\xa8\xdc\xf2\x84\x91\x5f\xfe\x52\x0c\x0a\x6c\x35\xce\xf6\x91\x2f\x80\x20\xba\x07\x2a\xc7\x55\x5d\x45\x80\xa5\x9e\xbc\x76\x54\x53\x35\x17\x42\x59\x72\x11\xe5\xf0\x94\xa2\xbd\x5c\xd5\x00\x72\x4c\x2a\x54\x7c\x4a\x6e\x59\x06\x95\x8a\x83\xe4\x63\x77\x71\x06\x05\xb7\xab\xd8\xe9\x43\x57\x80\xdb\x89\x16\x88\x30\x03\xeb\x08\x05\x1f\xa1\xfd\xc6\xa3\x70\x4a\xda\x69\xaa\x0b\xe0\x1b\xdb\x46\x89\x72\x3c\x9b\x39\x2e\x0f\x3b\x4e\xbb\x11\x69\x48\x6f\xa8\x15\x56\x6a\xee\x91\x9d\x52\x5e\xf5\xfd\xc0\x93\xd8\x60\xab\x8b\xad\x47\xf5\x7d\x4d\xa9\x84\xda\xbb\xc2\xd1\xcf\x8e\x3d\x36\xd7\x67\xa8\xed\x34\xac\xf5\x00\x0e\xc0\x76\x7d\x36\xe6\x1b\xaf\xe8\xd2\xcf\x38\xab\x40\xb7\xad\xdd\x5f\x09\xfa\xed\xe9\xed\x4d\xf5\x92\x05\x1c\x95\x41\xa0\xcb\x0d\xe6\x51\xae\x75\xdf\xb0\x5c\xc1\xcd\x12\xad\xdb\xa6\x56\xa8\x85\xe4\x8e\x8d\x2d\x51\x80\xb2\xc1\x13\x30\x06\x52\x2e\x1c\x8e\x12\x0b\xf8\x7d\x1e\x50\x1a\xcb\xba\x3a\xeb\x1a\x1d\xca\x87\x52\x66\xfb\x14\x8b\x3a\xd6\x9e\xdd\xc8\x9c\xb1\xcb\xa1\x0d\xa7\x67\xfd\x8a\xb7\x76\xaf\xfd\x79\x81\xda\xb2\xb5\xfb\xb0\xae\xb9\xa2\x3a\x99\x55\xc1\xa4\x5b\x78\xa4\xa2\xd6\x83\x4b\x6a\x1d\x0d\xe3\xdc\x15\x65\xd0\x25\x5c\x67\x2c\x1f\x00\x76\x88\xd8\xa6\x74\x54\x84\xde\xb8\xe2\xf4\x5e\x26\x3c\xf1\x62\x22\x39\x41\x43\xd7\x49\x24\x9a\xcc\x67\x56\x26\x99\x0e\x5d\x26\xc8\xf2\x8d\x8e\xd6\x66\x87\x2d\x7f\x3a\x3c\xc3\x30\xad\xaf\x06\x67\x58\x37\x82\x57\x8b\x66\x88\x79\x09\x81\x36\xec\x74\xfd\x6a\xff\xd1\xcf\xe8\x8f\x48\x52\x79\x43\x5a\x59\xd4\x5a\x48\xfb\x27\xc7\x50\x7c\xc7\xe5\xb0\x38\x77\x85\x26\xc7\x24\xe3\xf7\x8c\x7c\x07\x3e\xfe\xf6\x75\xf7\xbb\x23\xf2\x5d\x1c\x47\xfc\xdd\x06\xec\xaf\x00\x2a\x75\xe3\x76\xb0\x86\x20\x89\x97\x42\xd4\x20\x2f\x22\x1e\x66\x3b\xaa\xa9\x03\x29\x63\x86\x29\x04\xdf\x83\xb8\xa4\x10\xfb\xe2\x8c\xd1\xab\x78\x63\x71\x64\x76\x06\x88\xb3\xed\x2d\x66\x39\xec\x39\x1e\x63\x39\x23\x5c\x91\x37\xd1\x0e\xf5\x37\x0a\x48\x3d\xdd\x40\xbc\x87\x98\xa4\xba\x59\x95\x8c\x05\x7e\x31\x6b\x37\x65\x15\xe1\xbd\x36\x72\x5b\x23\xfa\xa7\x5d\xb7\x22\x2e\x7a\xab\x41\x1a\x3b\x50\xd9\xd3\x52\xd9\x3e\x02\xdf\xca\x83\xdb\xfc\x36\x3b\x43\x81\x28\x6a\xc6\xe7\x71\x5b\x09\xd7\xf3\xe9\x32\xf2\xe0\x6a\xac\xdd\x0d\x1d\x4a\xd1\x9a\xac\xf6\x28\xdd\xa2\x27\x12\x3d\x3b\x8b\x63\xad\x0e\xb5\x6d\x1c\x1e\x92\xe4\x18\x9a\x6e\xf8\x94\x1d\x11\xa8\x21\x55\x78\x4f\xdd\x79\x05\x72\x83\xab\xca\x15\x9b\xc0\x4e\x54\x32\xe1\x0f\xf5\xf1\xf7\x4b\x37\x78\x07\xbf\xf3\x65\xfb\x63\xe7\x7c\xd0\xb9\xec\x75\x7b\xbf\x0e\x16\x5d\xd0\xe5\xc7\x37\x67\x3f\x77\x3f\x75\xce\xe3\x17\x6e\x7f\xbd\xed\x75\x3e\x0e\x3e\x74\x2e\x3b\x37\xed\x5e\xe7\x7c\xa9\x71\x6e\x59\x67\x75\x40\xb3\x2e\x40\x50\x16\xb0\xb1\xa9\x07\xa5\xf4\xf0\x2b\x68\xd9\x82\x34\x4a\x6e\x34\x79\xe0\x9a\xbb\x54\x2b\x27\xec\xdd\x75\xbd\xb1\xad\xa6\xf7\xd3\x28\xc6\xfa\x08\x31\x49\x8a\x4e\xb8\x33\xf9\xc7\x82\xa0\xf3\x36\x8b\x14\x03\x97\x48\x54\xca\xab\x55\xd3\x89\x5b\xb0\x53\xd2\x76\x5b\x5b\xd7\xbe\x90\xc4\x8a\xa1\x4c\xe1\xe8\xd1\x15\x1d\x86\x4e\x8e\x49\x75\x8d\x4f\x09\x62\xc6\x45\xc8\xb7\xa1\x41\x10\x9e\xa8\x62\xe2\x3b\x43\xd8\x97\x59\xc6\x13\x6e\x22\x34\x5e\xa9\xc8\x94\x0a\x3a\xf6\xea\x47\xae\x99\x5a\xc1\x3d\xf6\xe6\x9b\xde\x87\x16\xd9\x14\xdf\x18\x6b\x4a\x8e\x5c\x02\x20\x9e\x91\x2e\xb1\xe5\xc9\x74\xd0\x06\x1f\xd7\x02\x68\xd8\xba\x43\xda\x93\xfa\xba\x22\xa2\xd2\x45\x54\x3b\xe7\x36\xf5\x68\xa6\x8f\x78\x71\xbd\x0c\x37\x79\x0d\x1d\x7e\x65\x3f\x79\x09\x75\x73\x6f\x75\xb1\x06\xab\x1d\xa9\xb5\x94\xb2\xc7\x5a\x55\x45\x01\x89\x85\x2a\x55\x5e\xed\xbc\x6c\x06\x20\xde\xac\x24\x50\x69\x11\x57\x97\x03\x82\xa2\x81\x54\x37\xd4\x02\x02\x64\xae\xf4\xa5\x54\x04\x5a\x4c\xb5\x2b\x0f\xee\x2b\x97\x03\xaa\x0c\xe6\xe5\xd4\x04\x5a\xb9\x6e\x2f\x37\x97\xb2\x66\xa0\x6b\xd4\x02\x0a\x36\x68\xc0\xff\xdd\x8c\xe5\x43\x7a\x25\x4f\xb3\x92\x21\xda\x1e\xaa\x1a\xd3\x65\xac\x68\x51\x7d\xbf\x73\x77\x3d\xaa\xef\x1b\xba\x5a\x75\x51\x9c\x95\x0c\xdd\x95\x65\x73\xa9\x7e\x0e\x36\x23\xae\xde\xd8\xcc\x7f\xa1\x44\xef\x5e\x44\x13\x68\xa2\x26\xeb\x62\x3d\x53\x1d\x82\x67\x76\xcf\x0b\x8e\x14\xa0\xe6\x23\xb7\xb2\x51\x34\x01\x94\x5d\xac\x1d\xeb\x7c\x27\x4d\x1e\x1d\x3b\xb5\xf5\xb6\x07\x5e\x5d\x5c\x97\x15\xf1\x72\x6e\xb5\x0b\xb4\xe0\x22\x16\x47\x26\x49\xae\xd4\x66\x89\xc0\x25\x21\x40\xa4\x80\x8d\x14\x95\x7b\x42\xb9\xb4\xba\xe7\xd8\xe7\x84\xea\x6a\x97\x2b\xb7\x7c\x8b\xfc\xc1\x52\x33\x1f\x18\x44\x0f\xef\xa5\x08\xc7\x06\xe9\x1c\x30\x90\x3b\x95\xad\xac\x68\x79\x8b\x48\xc5\xb9\xca\x0a\x73\x04\x25\xf6\xee\x6c\x45\xa1\x59\x90\x65\x55\x5a\x51\x1c\x4c\x03\xcb\xd9\xbc\x06\xe7\x53\x0e\xd5\x8d\xa6\x61\xac\x56\x4c\xdb\x5b\xa6\x4c\x23\x8e\x76\xd4\x0b\x5a\x6a\x40\x5f\x2f\x4b\x84\x20\xbb\xcf\x11\x69\x1a\x94\x3e\x1a\x8b\xae\x9a\xff\xc3\xde\xac\x8a\xe9\x89\xcc\x9a\x78\x3d\x74\xb3\x31\x54\xc2\x76\xb3\xf1\x48\x09\x4f\x38\x1d\x17\xee\x31\x68\x8a\xe2\x5a\xe3\x16\x39\xc7\x26\x6a\xef\xae\x75\x26\x5b\xa4\xb0\x39\x94\x17\x17\x3f\xe1\x86\x06\xbe\x80\x42\x3d\x8e\x33\xc5\x0b\x5b\x61\x21\x3a\xce\xd1\xf3\x10\x3e\x8f\x6a\x16\x84\x00\x44\x6e\x34\xd1\x46\xe5\x09\x20\xfa\x4c\x98\xda\x08\x45\x28\x44\x90\x16\x4d\xd8\x01\xd7\xf3\x24\x07\x3c\x07\x02\x86\x73\x0e\xeb\x52\x8e\xbb\x07\xc3\x80\x29\xd7\x0a\xbf\xcd\x9c\x6f\x57\x9b\x73\xb9\x5c\xc1\x93\x99\x9e\x4b\xd4\x52\x9a\xc0\x21\x95\x7a\x5b\x83\xb2\xc3\x22\x0c\x14\x08\x48\x07\x46\x71\x06\x10\x3c\x59\xc8\xdb\x2d\xdf\xd1\xce\xb4\xb4\x92\xb0\xec\xf9\x3d\xdf\xd1\xcc\x6c\x87\x33\x1f\x40\xba\xc5\x2e\x7e\xdf\xd2\x0c\xd0\xca\x06\x6d\xb2\xd4\x55\xc7\x45\x14\x25\x37\xfb\x60\x61\xc4\x82\x1c\x7d\x71\x63\x47\x81\x5f\x80\xa1\x11\xc5\xbb\x80\x7a\xcf\x0a\xd8\xda\x11\xa1\xee\x2b\x58\xb6\xa6\x82\x6b\x7a\x10\xd5\xfa\x68\x9a\xd8\x36\x98\xcb\x41\x04\x7d\x87\x4f\xc9\x28\xa3\x63\x9f\x85\x09\x15\x64\x46\x85\x8a\x62\xe5\x2c\x2c\xc9\x62\xff\xd4\x8e\xfd\xf3\x86\xd0\x6e\x3d\x63\x09\x2a\x0b\x5b\x4a\xc5\xb0\x0b\x3c\x0d\xe6\x5b\xf8\x53\xd4\xd7\xd7\x70\x98\x9b\x53\x3a\x83\x60\x45\xa4\x74\x39\x0a\x5c\xbe\xe7\x22\x16\x5b\x30\xf2\xff\xfb\x5f\xff\xdd\xe2\xe9\x9a\x40\x79\x85\x17\xa5\xc8\x18\x8f\xc2\x67\xa2\xaa\x21\x14\xd8\xf1\xd2\x02\x99\xa5\x54\xf8\x5d\xc2\x2b\x26\x54\x3f\x9d\xdb\x6e\x49\xd5\xe5\x98\x77\xae\xe7\x25\xc6\xa1\x62\x30\xbc\xbd\x90\x72\xcd\x14\x3a\x30\x42\x8e\x67\x0d\x4a\x79\x63\x50\x07\x9b\x52\xbe\x51\x5c\x9a\x7d\xbf\x1e\x81\xa0\x64\x80\xa2\x63\xa6\x06\x69\x5e\x0a\x74\x5a\xd5\xf6\xb5\xfd\xe8\x3c\x37\xf3\xd5\xed\xeb\x8c\x26\xf7\x9b\xa0\x3e\xd8\xf7\x1b\x9a\x5d\xcd\xa8\x23\xcf\x5f\x59\x5e\x68\xc0\x54\x60\x15\x4c\x05\x17\x17\x12\xf7\x8f\x3c\x4b\x00\xb6\x7c\x24\xef\x39\xa6\x06\x88\x95\x2d\xf2\x1e\xe1\x0a\x41\xee\xc4\x2e\x12\x99\x67\x69\x5f\xb0\x2f\x33\xa9\x59\x29\x88\xb8\x06\x62\xce\x05\xce\xbb\x9e\xea\x2f\x8c\x0a\x7c\xff\x4e\x82\xc8\x57\x07\xc0\x58\xdc\xd3\xc5\x29\xd7\x13\xd9\x4e\x77\x64\xc2\x67\xdc\x92\xc7\xa0\xf6\x30\x3d\x5b\x05\x99\x33\xab\xb1\x0b\x93\xcd\x8f\x48\x98\x64\x85\x2c\x32\xf6\xc0\x14\x1d\x5b\x69\x85\xf2\x2c\x86\x13\x2c\xdb\x07\xd6\x73\x79\x96\x63\x3b\x77\x0e\x43\xae\xf3\x43\x6d\x20\x65\xb4\x63\x08\xc4\x39\x33\x84\x7d\x31\x4c\xa0\x07\xaf\xe7\x03\xb8\xa3\x20\x9b\xa6\x2a\x60\x18\xeb\xda\x7c\xc9\x3e\xf9\x3e\xb6\x7d\xaa\x8b\x8f\x50\x4f\xb5\xe3\xf5\xae\x7c\xc3\x84\x8a\xd4\xa5\x21\x14\x45\xee\x70\x76\x42\x1b\x46\xc3\x1d\xef\x83\xe9\x23\x64\x2a\x6c\x13\x21\xe0\xe1\x4a\xf1\xf2\xab\x95\xbc\xc0\xdf\x22\x95\x15\x43\x72\x61\x78\x66\xa5\x29\x37\x06\xab\xdd\xe4\x22\xe4\xc1\x43\x48\x58\xc3\x0a\x42\xf6\xbc\x18\x0f\xdc\x4a\xfa\x88\xfa\xf5\xb8\x75\x99\xa6\x3e\x62\x53\xf8\xe3\x3b\xdf\xd0\x72\x43\x1a\xa6\x92\xd8\xe9\x87\x58\x7e\xc8\x1c\x10\xd2\x4f\x26\x80\x16\x86\xbd\x2e\xd5\x14\x81\x89\x6e\x22\xc9\x83\xac\xb4\x98\x70\x56\xf0\x75\x4d\x34\x64\x20\x60\x04\x31\x04\xc7\x99\x86\x04\x04\xdd\x98\x78\xd0\x15\x41\x64\x72\x48\xb7\xa1\x0c\x42\x25\x87\x81\xfa\xee\x5c\x1c\x1f\xcd\xb2\x21\x4d\xee\x03\xaa\x68\x50\x8d\xa4\xf2\xf8\x6c\x56\x8c\x03\x28\x64\x24\x2e\x3b\xd0\x04\xe4\x8c\xa2\xbc\x77\xea\x52\x7a\xdd\xb0\x8b\xce\x5d\x25\x16\x81\xb5\x41\x40\x89\xc2\xd1\x63\x9c\x60\xca\x66\x99\x9c\x4f\x1b\x6e\xa0\x6a\x7c\xf8\x2e\xae\xbb\xa6\xf0\xf4\xbd\x5e\x3e\x15\xa6\xb7\xf1\xf5\xb3\x10\xc8\xbb\x87\xa4\xf2\x75\x5c\x93\x9b\x06\xbe\x56\xcf\x15\xd7\xb3\x8c\x96\xaa\x29\x57\x7b\xc0\xe8\xd6\xa7\x5d\x7d\x4c\xef\x5a\x6d\x72\x58\x3f\x3e\xaa\xf6\xf3\x27\xa9\x5b\xe3\xef\x5e\x57\xc0\x06\xb8\x90\x33\xab\xb0\xac\x05\xcd\xb4\x30\x50\xbd\x35\x53\xd2\xde\xcd\xb2\x2f\x0c\x1d\xfb\x00\x62\x27\xd5\xc9\x47\xc1\x94\x9e\xf0\x59\x09\xe9\x7c\xe7\x88\x2c\x47\x98\xee\x3f\x18\xc2\xb4\x01\x0b\x94\xb3\x63\xac\x41\x6a\x09\x44\xcf\x68\x52\xd8\x5a\x92\x8c\x6a\xcd\x47\x73\x92\xf2\x11\x84\x21\x98\x22\x3e\x06\xc2\x97\x03\x0a\x72\x19\x2d\xbb\xd6\xc4\x51\x4a\xf3\xdb\x4f\x0e\xd4\xee\xb1\xf5\xce\xe1\xe4\x03\xbd\x79\x1a\x63\x31\x40\xdd\xa5\x85\xdc\xd5\x35\x4b\x43\xed\x1a\x72\xef\x46\xe6\x02\xcf\xf7\x37\x30\x9f\x3e\xb9\x5d\x32\xd5\xd2\x5c\xe8\x95\xbc\xb3\xba\xf7\xe7\x2c\x63\x7b\x89\x88\x7a\x0a\x42\x58\xba\xd6\x05\xa0\xdb\xb3\xed\xff\x6e\xe3\xd9\x22\x66\xac\x21\x7b\x7a\x0f\xfb\xfd\x95\x23\x8f\x1a\x46\xf7\x81\xad\xe3\x0e\x5d\x49\x8b\x5b\x9d\xab\x26\xe6\xb8\xc3\x62\xef\x2d\xdc\xf0\x89\x27\xd4\xb4\xd7\xb7\xcc\x68\x6f\x08\x89\x28\x1d\x85\x6c\x77\x4e\x8f\x7d\xa6\x51\x91\xb7\xb3\xc1\x86\xbf\x90\x40\x38\x37\xba\x1b\xa7\xea\x3d\x1d\x3b\x5c\xbd\x5d\x9b\xd0\x5b\x31\xde\x2d\x42\x08\x5c\x1b\x6b\xef\x40\x63\x0b\xfb\x90\x1f\x9e\x58\xed\xa8\x2e\xed\xc1\xd9\xb6\x9e\x91\xaa\x0e\x9d\x6e\xf7\xf8\xd0\xcc\x95\x92\x1f\xcc\x14\x1b\xf1\x2f\x5b\x39\x64\xae\xe1\x53\x27\x91\xd9\xd9\xcb\xd1\x28\x93\xd4\x2e\x23\x42\xac\x5a\x05\x21\xd7\x2c\x2a\x13\x12\x16\xe0\x51\x71\x63\x98\xe8\x0b\x00\x71\xd3\x7f\x3a\x3d\x39\x19\xe6\xc9\x3d\x33\x27\xf7\x6c\x0e\xa5\xc2\xa3\x9f\xb6\x4a\x02\x64\x1a\xfb\xd6\xcc\x18\x2e\xc6\x9a\xcc\x30\xf9\xd0\x21\x8b\x56\xc6\xfa\x3d\x6f\xb1\x16\x79\x97\xc9\xa1\x3e\x22\xb7\xc9\x84\x4d\xe9\x11\xee\x2e\x3c\x87\x9a\x3a\xad\xb7\xad\xbe\xb8\x65\x8c\x4c\x8c\x99\xe9\xd3\x93\x93\x31\x37\x93\x7c\x68\x75\x1e\x74\x2f\x4b\x35\xc6\x7f\x9c\x70\xad\x73\xa6\x4f\x7e\xfa\xf1\x47\x58\x1e\xa0\x87\x21\x4d\xee\xc7\x0a\x8c\x50\x8b\x8a\x4f\x69\xcb\x6f\x17\x51\xa1\x37\x07\xc9\x52\x52\x0c\xd8\x97\x99\x62\xba\xae\x6e\xd5\xba\x29\xa3\x9a\xb4\x3f\xdf\x12\x3d\x17\x86\x7e\x39\x25\x1f\xb1\xc8\x18\xf9\x59\xe6\x4a\x93\x73\x3a\x3f\x96\xa3\xe3\xa9\x14\x66\x42\x3e\xc2\xff\xba\x9f\x1e\x19\xbb\x27\xbf\x32\xaa\xdc\xfe\xe2\x6d\x15\xa0\xf1\xc0\xfc\xa6\x72\xa1\x5d\xf5\xb2\x1f\xff\xdd\x97\x2f\x3b\x25\x3f\x9c\xfc\xf8\xef\xe4\x0f\xf0\xff\xff\x3f\xf2\x87\x26\xc4\xc7\x8d\xd2\x74\x8a\xd2\x72\xb5\xad\xc1\x4a\x6d\x01\xc4\x7d\xa6\x64\xb1\x53\xb5\x2d\xdf\xf3\xe4\x5e\x8e\x46\x03\xc3\xa7\x0c\xa3\x82\x06\x54\x2d\x60\x02\x6c\x99\x80\xcc\x1d\x78\x30\x96\x3f\x29\x40\xaf\x5c\xa7\x18\xa2\xeb\x8f\x9b\xce\x0b\x80\xd7\x47\xac\x0d\x1c\x81\xe6\x72\x0d\x5f\xb1\xd4\x9e\x8a\x4d\x0c\x87\xde\x58\xb9\x58\x9a\xa0\x08\xf6\x8e\xa1\xb0\x83\xb1\x3e\x76\x31\xc9\x55\x65\xdd\x16\x7d\x5f\xdf\x98\xb7\x03\x26\xf8\xa4\x9e\x8e\x5b\xa9\x76\x12\xa5\xee\xd9\x82\x1f\x74\xa3\x2b\xd9\xe3\xbc\xc6\x88\xea\x10\xda\x29\x55\xc8\xe2\xc7\x78\x26\x87\x8b\xda\x17\xbd\xab\xf3\xab\xef\xef\xa9\x51\x72\x4c\xc5\x5b\x40\xa6\x71\xe5\xe4\xed\x3b\x3c\x45\xea\x82\xb8\x29\x12\xd7\x86\x16\x76\xe1\x6a\xef\xd8\x58\x2f\xe5\x0a\xed\xcb\xeb\x9d\x77\xbb\x7c\xe7\xe1\x93\x7a\x66\x59\x06\xb3\x0d\x1d\x14\xd8\x91\x30\x57\x7b\xbb\x59\x6e\xb8\x38\xdf\x6d\x2a\xe4\xdf\xce\x58\xc2\x99\xc6\xa6\xc1\xef\x01\x31\x1a\xc2\x47\xdf\xb8\xa8\xe1\xda\x43\x05\x29\x5f\xfb\x48\xe5\x5c\xc0\x8a\xd9\x81\x52\x3e\x83\x76\x5f\xf0\x06\x8f\xd7\x54\x2e\x00\x4c\x14\xb5\x6c\x63\xcb\xec\x57\x8d\xc9\x6e\x71\xa1\x75\x2b\x28\x1c\x8f\x68\x62\x57\x2f\x24\x55\x61\x28\x73\xcc\xaa\xea\xd6\xb1\x47\xf5\xfd\x7e\x8d\xe1\x3b\x23\xac\xf2\xb4\x40\x24\x44\x6a\x74\x11\x47\x7c\x21\x83\xcc\x50\x7d\xdf\x94\xa6\xb1\x71\xb5\x3b\xbb\x14\x3e\x83\x69\xd9\xf8\x7c\x84\x25\x8b\x65\x35\x00\xa6\xb1\x0a\x62\x04\xda\xe0\xc3\x77\xb0\x12\x0e\xcf\x58\x5a\xcd\x96\xad\x8e\x7f\x15\x19\xa0\x47\x27\xb2\xd7\x42\x3e\xe6\xd4\xaa\xaf\xe0\x74\x9c\x52\x31\xc7\x83\x64\x2f\x2c\xaa\xef\x75\x80\xf9\x25\x7a\x4a\xb3\xec\x88\x28\x96\x43\x15\xf9\x23\xa2\x59\x36\x3a\xf6\x60\x3b\x29\xc9\xe4\x98\x27\x34\x23\xc3\x4c\x26\xf7\xba\x2f\xec\x0d\x22\xc6\x78\xf1\xcd\x94\x4c\x98\xd6\xd1\x95\x5b\x44\x5f\xce\x94\x4c\xf3\x04\x8b\xd6\x61\x7d\x5e\xae\x0d\x4f\x2a\x95\xca\x2c\x47\x04\x7f\xa9\xd5\x4d\x12\x89\xc8\xc4\x30\x5c\x2b\x02\x30\x4c\xd6\xcc\x7d\x21\x7f\x00\x13\xa1\x19\xff\x07\xe4\x07\xa0\x17\xb1\x89\x7a\xf7\x90\x74\xe6\xb7\x67\x60\xca\xa7\x61\x05\x3d\x9f\xb9\xcf\xe0\x0c\x2d\xa3\x98\x9b\x32\x39\x07\x6a\x08\x64\x1e\x30\x3f\x3c\x51\x14\x3e\xd2\x12\x3e\x59\x70\x1d\xbe\xb0\xdc\x24\x18\x72\x43\x46\xd2\x2a\x9a\x3e\xc3\x5a\x69\x0e\x3d\x2f\x32\x84\x43\xeb\xbe\x9a\x94\xc3\x1c\xb5\x57\xc4\x83\x25\x12\xbf\x3c\x76\xed\xed\x35\x72\x14\x0a\x98\x51\xed\x5c\xa4\xc7\x01\x92\xc6\xf2\xc3\xbe\x00\x78\x6a\xdb\x49\xa5\x1a\xd6\x22\x45\xbd\xe0\xa2\x65\xfb\x61\x8e\x1b\xd6\x2e\xf3\x8b\xbc\x09\x91\x97\xe9\x16\x12\x81\x36\x64\x76\xa5\xb8\x2f\x55\x17\xad\x8b\xd4\x06\x4f\x1f\x78\x01\xb3\x1e\x75\xd4\xb8\xb7\x5b\x5b\x0b\x2b\xa3\x5a\x08\x63\xe7\x23\x24\x32\x18\x1b\x84\xa0\xb9\x5a\xe7\x4d\x23\xfa\x2a\xd9\xb3\xcb\x36\xf2\x9a\x1a\x2c\x58\xcd\xa6\xd2\x20\xb8\x30\xe2\xfc\x7a\x33\x09\xc2\x07\x0f\x33\x39\x84\x7b\x05\x20\x80\x7d\x64\x6d\x14\x7a\x87\xf3\x66\x29\xf9\x3e\xba\x26\x42\xb4\xfe\xdb\xa6\x80\xc8\xfd\xa5\xf0\x56\x6d\x2b\x8d\x89\xbc\x65\x9c\xce\x16\xb9\xae\xa4\x87\x44\xb3\x1a\x51\xcb\xb9\x9b\x62\x97\x36\x4b\xfb\x2d\xed\xfe\x1e\xd2\x7e\x2b\xd3\x68\x70\xad\xcb\xf1\x93\x06\xda\xda\x49\x5d\xc8\xf5\xf5\x48\xcc\xbc\x43\xf9\xa3\xb4\x39\x9e\xcc\xe6\x75\x5b\xf4\xb2\x52\x9a\x2b\x38\xaf\x5f\x37\xa5\xb9\x32\x98\x97\x9c\xd2\x5c\x19\xea\xcb\x4d\x69\xae\x19\xe8\x1a\x29\xcd\xe8\xf6\x1a\x58\xa2\x5e\x8f\x29\x40\xd8\xc9\x30\x1f\xdd\xc2\x6d\xb2\x74\x8c\xae\x14\x12\x32\x67\x2f\xe7\x38\x24\x09\x18\xad\x0b\x34\x6c\xf2\x23\x53\xbd\x13\xed\x05\x8f\x01\xd7\xa8\x62\xce\x32\x2a\xca\x4c\x15\x4a\x8a\x28\x96\x58\xf2\x43\x46\x55\x54\xb6\x3b\x72\x46\x13\x3b\x0a\x34\xf2\x25\x74\xe6\x62\xad\x9b\xb0\xd7\x5e\x4e\x88\xea\x66\xd9\xe2\x90\xd4\x5b\x62\xf5\x6b\x65\xf6\x05\x5c\x12\x8a\x36\xf7\x89\x7c\x74\xa2\x0d\x90\x9f\xab\x1e\xb6\xa1\xa4\x1d\xe7\x9b\x57\x68\x7a\xcd\x7c\xf3\xd2\x44\x0e\xf9\xe6\xf5\x1b\xfc\x62\xf3\xcd\x2b\x7b\xbe\x5e\xbe\x79\xdd\x96\x6f\xe1\xea\x2d\x35\xf3\xcd\xe4\x9b\x57\x56\xf4\x25\xe7\x9b\x57\x86\x7a\xc8\x37\x7f\x92\xd9\x3c\x55\xbe\xf9\x6a\x06\x50\x9b\x51\x5d\x7f\xea\x36\xcb\xa8\xae\x95\xbd\x9b\xcf\xf6\xae\x89\x4c\x70\xd3\x3f\x73\x46\x75\x69\x02\x87\x20\x8f\x1d\x8b\x53\x97\x49\xd0\x8d\x00\x0a\xe8\xb9\x24\xca\xea\x3d\xb4\x24\xa7\x1a\xf4\xc9\x3d\x50\xd4\xd3\x86\x07\x81\x09\x78\x5d\x95\xb7\x5d\x5a\x07\xed\x10\x15\xac\x68\xe2\x13\x18\x51\x3a\x8e\x9d\x5f\x07\x0a\xdc\xd8\x64\xd8\xb0\xc8\xc1\x74\x8c\x11\xff\x0d\x24\x57\x53\xdc\x62\x07\x02\xf4\x15\x49\x36\xb4\xb9\xfa\x41\x80\xed\xb5\xde\x9a\x03\xf5\x6e\xf6\xd3\xec\xef\xe2\xff\x36\x2e\xc8\xae\x25\xbd\x93\x59\xbe\x4d\x46\xc8\x78\xbb\xcf\xa6\x6c\x2a\xd5\x2a\xdf\x7f\xed\x97\xda\x48\x45\xc7\xab\xb4\xcd\x75\x57\x6f\xd7\x55\xf3\x25\x8a\x36\x33\x2e\x7a\x98\x80\xe5\xd6\x0e\x5f\xf3\x3c\x76\x3f\x81\xbe\x50\xeb\xe0\x0c\xfe\xe5\x2d\x5d\x98\x0d\xd9\xdc\x8b\x1d\x82\x6f\x43\x33\x75\x1c\x8b\x47\x25\xa7\xc2\xe2\x08\x4a\xeb\xee\x85\xe7\x1d\x96\x3d\x57\x8d\x01\x36\xeb\x98\x1b\xb0\x90\x9e\x95\xcc\x63\x44\xcf\x2a\xa5\x0d\xe7\x35\x41\xd9\xeb\xd9\xb3\xb8\x30\x7f\xfe\xb7\x8d\xbc\x32\x56\xbe\x74\xeb\x36\xe2\x19\x23\x34\x49\x98\x46\x0b\x88\x0b\xc0\xc2\x8a\x2a\xb9\xca\x76\xd9\x55\x2e\xc6\x30\x6f\x2b\x4c\x46\xb5\xaf\x03\xf1\xe0\x9d\x31\x51\x32\x1f\x4f\xbc\x06\x6c\xa9\xd0\x4e\xad\x6e\x2f\x3f\xa1\xdf\x7c\x97\xbd\x7c\x97\xf3\x6c\x3b\xfb\xc2\x2d\x52\x9d\xa3\xc9\x0f\xdd\x1e\xd1\x93\x40\xff\x43\x68\xb6\x76\x63\x17\x07\xbd\x7e\x9f\xee\xdb\x60\x4d\x83\x6e\x8e\x7c\x90\xd0\x48\x66\x19\xd8\x83\x34\x9b\x3e\x34\x55\x7d\x81\x09\xf7\xf8\x96\xf5\x36\xe0\x6b\xb0\x2a\x6b\x43\xa7\xb3\xb5\xd0\x45\xae\x51\x3e\xd0\xc4\x8f\xbe\xea\x6c\xc1\x48\x08\x29\x98\xa8\xb3\x10\x7c\x5e\xc4\xcf\x7a\x65\x2e\x57\x1f\x1f\xb1\xb7\x98\x14\xbf\x24\xcf\x1c\x97\x52\x37\x8f\x0d\x58\x40\x29\x3a\xb3\xe0\xf1\xde\x53\x88\xa2\x27\x60\x6c\xf4\x45\xbb\x14\xc7\xe9\x81\xb9\x87\xf3\x22\x1e\x0c\xe5\xb7\x98\x93\x00\x5c\x91\x53\x51\x8d\x74\x8a\x2b\xc8\x9a\x98\x3c\x8f\x11\x2b\x3e\x2a\x05\x42\xd9\x58\x7a\x4c\x93\x79\x92\xf1\x24\xd2\x3b\xc6\x8a\xce\x26\x75\xec\x66\xb1\x74\xe1\x4b\xcb\x6b\xfb\xd6\x13\x1c\xd7\xac\x88\xba\x34\x18\x2f\xae\x29\xfa\xaa\x13\x2f\x17\xc9\xf1\x90\x73\xb9\x01\x49\xee\x36\x9e\xbd\x53\xe2\x6b\x4a\x01\x6d\xa6\xbc\xaf\x9c\x6e\xb7\x38\xb0\xaf\x99\xf8\x59\x73\x5f\x6c\xb7\xba\x5f\x37\xdd\x73\xad\x69\x34\xed\xeb\x3a\x99\x9e\x47\x71\x51\xe8\x70\xef\xaf\xc8\xfb\x6c\x5e\xa5\x17\x42\x83\xfb\x8c\x40\xdd\x0c\x43\x36\x8e\x42\xdd\x44\x54\xdc\x2c\x20\x35\x6c\xd4\xeb\x0a\x4a\x2d\x40\x6b\xb7\x0b\x4c\x6d\x47\x95\x48\x27\x32\x03\x90\xcc\xd2\x6a\x85\x0e\x42\x6c\x5b\x58\x20\xbf\x19\x56\x75\x44\xd1\xb5\x40\x5b\x5c\x16\x7e\x1a\x36\xf1\xdb\x08\x41\x5d\xa1\x0f\x6d\x18\x86\x1a\x2f\xea\x6e\xa1\xa8\x3b\xea\x37\x9b\x85\xa3\x56\x3a\x5b\xba\xdf\x5b\xf8\xd5\x9b\x0a\xef\xee\x40\x34\x53\xfa\x65\x30\xa3\x8a\x66\x19\xcb\xb8\x9e\x36\x1d\x5b\x2e\x0c\x1b\x57\x89\xa5\x64\x9c\xfa\xd3\x4f\xcb\x83\x98\xca\x0e\x04\x5f\xb9\x0a\x5c\x08\xf9\x74\x88\x74\xe4\x07\xe2\x50\x5a\x8d\x24\x2a\x17\x31\xfa\x6c\x58\x5f\xcc\xa3\xc2\x52\x58\xa3\x1c\xdc\xe1\x34\x99\x00\x9c\xef\x88\x72\x25\x98\xd6\x1b\x9d\xff\x27\xaf\x25\xbe\xb0\x75\x87\x80\x9a\x10\x50\x53\xbf\x36\x2f\x31\xa8\xa6\x28\x67\xb7\x61\x60\x4d\xd3\xf6\xef\x83\x09\xec\x31\xc0\xe6\x2b\x87\xad\xac\x1b\xb1\xf2\x75\xe3\x80\xd6\x0c\x01\x3a\x84\xd5\x7c\x1b\x61\x35\xcd\xe7\x6d\xa3\xd0\x9a\x15\xc9\x99\xbe\x97\x5d\xe3\x1f\x42\xc2\xe0\x93\xc6\x40\x04\xf3\x7d\xf4\xc5\x9a\x71\x10\x45\x46\xe3\x21\x16\xe2\x49\x63\x21\x6a\x16\x7a\x75\x3c\x44\x49\xee\x7e\x56\x27\x76\x15\xef\xfe\x29\x1d\xd9\xab\x74\x95\x7c\x38\x78\xf2\x73\x54\x3b\xe7\x75\x8f\xd3\xe7\xb0\xb7\xbe\xea\x29\x61\xd3\x21\x4b\x53\xb0\x65\x18\xe9\xb0\x66\x0b\x12\x10\x0c\x89\xd5\x72\x52\xaa\x2d\xe5\xd2\x4c\x8a\xb1\xe6\x29\x8b\xea\x3f\x14\xf2\x0d\xa6\x17\xf4\x05\xec\x6f\x96\x31\xe5\x55\x61\x45\xbe\xd7\x5c\x24\x2c\x56\x8f\x15\x49\x25\xd3\xe2\x3b\x83\x85\x7d\xa9\x98\x93\x7b\x21\x1f\x33\x96\x8e\x61\x87\xaa\x83\x39\x26\x9c\x1d\x11\x6e\xc2\x67\x8a\xd1\x64\x62\xd9\x65\xdf\x8e\x1d\xbc\x45\x28\x88\x31\xf7\x6d\x84\xaa\x1c\x9a\x79\xdb\x22\xa4\x2b\xc8\x88\x26\xe6\x88\xe8\x7c\x58\xb4\x9f\x4a\x84\xc9\x7d\x60\x22\x9e\x78\xd1\xc8\x93\x05\x31\xd4\x06\x2d\x34\x28\x85\x96\x00\xda\x19\xa7\x3b\xf9\x9b\x1e\xe8\x2e\x18\x06\x1f\x73\x6d\x08\xb8\x39\x88\x14\xe1\x30\xb9\x6c\xac\x80\xd7\x02\x30\xa3\x88\x7d\xb2\xa4\xd2\x07\xad\x4c\x65\xd3\xb1\x14\xce\x41\x87\x6e\xea\x2c\x0d\xd0\x2e\x2e\x77\x2a\x1f\x85\x36\x8a\xd1\xa9\x53\x10\x2d\x27\x06\x2b\x3a\xba\x06\x09\x96\x94\x86\x1b\x78\x93\x2d\xbe\xe0\xe2\xde\xee\x6e\x81\x50\x03\x98\xcf\xd0\x73\xcd\xa6\xbd\xe3\x82\x96\x02\x8d\xb6\xd8\xb5\x2c\xdf\xc8\x55\x1f\xd5\x42\x99\x37\x81\x03\x19\xba\x0a\xaf\x67\x13\x7b\x98\x06\xa0\x6b\x62\xbb\x23\xc0\xea\x10\x11\x97\x12\x43\x01\x94\x6a\xc2\xb2\x59\x84\x32\x3b\xa3\xca\x84\x62\x32\x0e\xb6\x22\x91\xd3\x69\x2e\x00\x69\xc4\xe9\x69\x8f\x0e\x9f\xc0\x69\xf3\x45\xe3\xad\xbe\xe8\x9a\xef\xa0\xca\x94\x14\xe3\x6c\x4e\x68\xfa\xc0\x75\x81\x16\x94\x48\xa1\xf3\x29\x53\x15\x0c\x76\xcc\xef\x21\xd4\xd3\x8a\x1d\x9b\x15\xbc\x1c\xea\x8a\x4f\x92\x1b\x93\x21\x1b\xd9\x4b\x77\x46\x95\xf6\xa6\xbd\x1a\xb3\x9c\xdb\xdc\xd4\xae\xd5\x57\x3b\x93\x9f\xe2\x63\x47\xa6\xc5\x09\xa5\x4e\xdf\x38\xa9\x9e\xcf\xa8\xca\x4c\x53\xd8\xd1\xc2\xa4\xc8\xf2\x8b\xc9\xad\xc2\xf9\xaa\xcc\xa5\x73\x5f\xd2\x59\xc3\xa1\xb1\xfd\x78\x81\x06\x07\xb7\x91\x11\xa6\x32\x41\x37\x6a\xb4\xac\xc5\x67\x93\x71\xb8\x14\xb4\xa1\x86\x27\xbe\x62\x4e\xa8\x07\x86\x5f\x37\x6f\xed\xae\x85\x9a\x74\x42\xb3\xc5\x1d\x6e\x5e\xcb\x5b\x7c\x7f\x39\xef\x73\xc7\x0d\xdb\x5e\x1a\x42\x96\xc8\x2c\xdb\x04\x10\xa8\x32\xf3\xb3\xe2\xf3\xe5\x23\x2a\xfa\xb1\x1b\xe0\xf7\x02\x4e\x0d\x1a\xdf\x68\xe6\x24\x0b\x6d\xdc\x2e\xc5\x2f\x21\x0f\x9d\x3b\xe3\x5e\x5f\xc8\x11\xe0\x44\x65\x4d\xda\xf2\x4c\xc9\x29\xdf\x24\xa3\x1a\x91\x06\x6f\xbc\x0f\x75\x85\x91\xd8\x7b\x5a\x01\xcb\x1f\xc9\xcb\xf5\x88\xe5\xe0\x05\xca\x19\x4b\xce\xd0\x94\x2e\xd4\xe5\x5a\x6b\xc1\x57\x29\xbf\x6d\x32\x45\xb3\x82\x5b\x3d\x8d\x05\x23\xee\x19\x54\xfa\xa7\xd9\x23\x9d\x17\x81\x76\x9b\x1c\xa7\x22\x94\xcd\x9d\x17\xea\xa9\x2c\x3a\x31\xc1\x07\x8d\xfb\x85\xab\xb0\xce\x09\x3a\xab\x23\xc3\x8d\xcf\x92\x9f\xf3\x53\x0a\xd9\xf1\xb1\x8f\xe5\xeb\x4d\x6e\xc3\xf2\x61\x88\x5a\x24\x30\x9c\xe5\x4b\xf5\xb1\x44\x39\x7b\x5f\xa3\x4a\x3b\x04\x75\x39\xef\x82\xba\xae\x6f\xf5\x19\xd6\xcc\x91\xf5\x5a\x8b\xb5\x63\xec\xee\x66\x59\xba\xbe\xc7\xe5\x15\xa3\x37\x29\x4b\xbf\x5a\x87\x18\x59\xd9\xc5\x95\x12\x09\x70\x9e\x2e\x24\x64\xc4\x33\xa6\x5b\xa4\x5b\xa3\x4f\x80\x94\xe3\xa5\x2a\xc0\xe5\x00\x07\xa3\x97\x77\x72\xc5\x23\x4c\x53\x2f\xd5\x10\xee\xaa\x60\x15\x26\x07\xc5\xec\x98\x13\xf4\x55\x48\x01\x19\xc6\xe0\xcd\x53\x1c\xeb\xcd\x58\xf1\xd2\x80\xf5\xcc\xf2\x02\xee\x6a\xd5\x60\xc5\xc0\xf0\x81\x95\xb1\x0d\x53\x34\x31\xbe\x36\x8d\x1b\x55\xc3\x96\xee\x03\xb2\x6d\xfd\xd0\x17\xdf\x6b\xcf\x7e\xb1\xb8\x37\xb5\x23\xec\x95\x5b\xdf\x78\x74\x41\x2e\xdf\xdc\xf1\xf2\x1e\x3e\xf5\xc6\x24\x4a\x46\x8a\x81\xbd\x71\x1a\x62\xaa\x45\xca\x94\x36\x52\xc2\x0d\x75\x7b\xfe\xcb\xc9\x5d\x97\x30\x93\x40\x21\x87\xbe\x48\xf4\xc3\x91\x15\x68\xff\x9e\x33\x63\x7f\x6e\x42\x0f\x9c\x32\xa1\x81\x13\xf0\x75\x0b\xc4\xf9\x85\xb1\xff\x3d\x2f\x7f\xbf\x84\xe4\xc3\xc4\x42\x59\x20\x4b\xbb\xa1\x2e\x90\x25\x53\x80\x91\xc1\xa5\xd5\x35\x14\x83\x75\x1c\x3b\x75\x40\xb0\x5b\x04\x59\x88\xbf\xe5\x62\x43\x31\xe9\xac\xf8\x28\x1a\x45\x83\x14\x36\x9d\x51\xc5\x6b\x90\x15\x96\x47\x6f\xe0\x37\xb5\xad\xaf\x62\x22\x7e\x5d\x29\x71\xf5\x30\x49\x81\x99\x4b\x8c\x62\x0c\x58\x48\xa0\x27\x77\xd7\xbb\x48\xec\x30\xb1\xe8\xa3\x56\x5f\x7c\xf4\xf6\xcf\xe2\xd7\x50\xba\x08\x43\x75\x58\x4a\x72\xd0\x99\xca\xad\x60\xc5\x61\xae\xc3\x0f\x00\x22\xa4\xf3\xcc\x20\xa6\xe3\x08\x6a\x5c\xfa\x81\xe2\x93\x3a\x2e\xa1\xa8\x48\x26\x97\x72\xb7\x92\x66\x7c\x34\x60\xd9\x26\xb2\x63\x77\xd4\xc9\xb4\xa5\xef\xe4\xbe\xe1\x74\xfe\xd1\x63\xc1\x6e\xb0\x41\xc5\x64\x40\x72\xf3\xc8\x76\xa8\x95\xa0\x9d\x2e\x43\x84\x48\x46\xc0\xc8\x56\x8d\xb9\xc1\x18\x65\xbb\x8b\x4e\xb6\xf6\x05\x57\x95\xcc\x88\x37\xcb\x0d\xa1\x17\x42\x4d\x5f\xa8\x5c\x00\x14\x4c\xb0\x9f\x53\xa2\x99\xaf\xea\x9a\x48\x81\x32\x80\x33\x9e\x8c\x2d\x9b\xb0\x92\x1f\x38\x51\xa4\x00\x8d\x4a\xe6\x1a\x9c\xee\x53\x66\xec\x05\xf5\x3d\x40\x20\xa3\x07\xe3\x88\xcc\x14\x9f\x1a\xfe\xc0\x02\x7e\x53\xbc\x73\x67\xd4\xd0\x4c\x8e\xdb\xca\xf0\x11\x4d\x4c\x8f\xee\xa4\x32\x53\xd7\xcc\xb6\x5e\x6c\x3f\x0c\xd2\x3d\xb7\x6b\x5f\x94\xbf\x86\x52\x4c\xb5\x27\x78\xd3\x22\x4d\x05\xe3\x06\x60\xc6\x04\xa1\xec\x74\x30\x31\xd0\xdc\xc8\xa9\x55\x48\x69\x96\xcd\x01\xa2\xce\x3e\x99\x50\x3d\xf1\xfb\x8c\xb8\x76\xeb\x5c\x4d\x6e\x71\xcf\x68\x32\x61\xb7\x50\xd6\xb2\x6e\x71\x2b\xa3\x7c\xc3\x44\x3e\x7d\x73\x4a\xfe\x6f\x31\xc7\xb3\xf6\xd9\xcf\x9d\xc1\x79\xf7\xb6\xfd\xee\xa2\x73\x1e\xcd\xc7\x3d\xf9\xd8\xbd\xbd\x5d\xfc\xf5\xe7\x6e\x6f\xf1\xc7\xeb\xab\xeb\xbb\x8b\x76\xaf\xae\x95\x8b\xab\xab\x5f\xee\xae\x07\xef\xdb\xdd\x8b\xbb\x9b\x4e\xcd\xa7\x77\xbd\xf0\xd0\x3d\xfb\xef\xe8\x0c\x41\xd0\x05\x84\x88\xd4\x8f\xb6\x7a\xcc\x8e\x49\xf9\xc5\x53\x72\xe7\x3c\x31\xae\xf8\xaf\xb7\x19\x51\x88\xbf\x86\x90\xb0\x14\x8d\x49\x69\x5f\x10\xff\xb9\x9d\x7b\xd3\xa7\xe8\x22\x4a\x26\x8c\x64\x52\xde\xe7\x33\xc7\xc0\x30\x50\x50\x48\x34\xc8\x30\x1d\xb5\xf6\x73\xb7\x77\x1a\x3c\x42\x8b\x8d\x45\x79\x51\x9e\xd4\x61\x5c\xd4\x33\x4d\x2c\xa7\xac\xd8\x03\x1c\xc9\xe0\x29\x8c\x7a\x08\x1b\xb0\xac\x1f\x6c\x8d\x0a\x53\xe9\x26\x4d\x1d\xaa\xb5\x9f\x58\xd4\x70\x79\xfb\x96\xad\x66\x58\x0e\x44\x46\x23\x43\x96\xd0\x1c\x1d\x69\xf6\x36\x52\x4a\xaa\x78\xc0\xc5\xb6\xef\xd8\xe8\x9b\x45\x21\xa3\x0c\x61\x8c\xa5\x5f\xed\x27\xd1\xc9\xb1\xea\x32\xa8\xd2\x1e\x7b\x68\x32\x47\xdb\x94\xaf\xa2\x37\x1d\x32\xf4\x97\x00\x72\x42\x5c\x87\x9f\x70\x70\xcc\x51\x43\x1e\x19\x04\x8b\xe6\x0e\x7b\x0d\xf5\x63\x7b\x00\xb5\xaf\x17\xae\x03\x1a\x65\x29\x88\xb4\x91\x63\xee\x43\x28\xb6\xdf\x6b\x56\xc7\x2d\x37\x8f\xf8\x2b\xe4\x36\x6c\x14\x58\xa8\xf7\x92\xc2\x88\x1b\xec\xfd\x9e\x65\xd7\xd8\x9d\x97\xc8\x40\x8b\xd7\xc6\x0a\x8e\x6e\xa0\xaa\xf7\xea\xf1\xf8\x50\xf9\x12\xa2\xc4\x66\x39\xb4\xc1\xc3\xbf\x72\xad\x7a\x32\xa5\x73\x4b\x1c\x10\x9e\xa0\xf3\xd9\x4c\x2a\x43\x1a\xda\x20\x70\xd0\x71\x7c\x70\x31\xb8\x79\x04\x0e\x05\x8d\x58\x29\x40\xd7\xa0\x35\x2d\x8d\xcb\x0e\x03\x72\xeb\x5a\x1c\xfb\x38\x1d\x0f\x94\xb5\x80\x1c\x36\x2d\xa9\xbd\x25\x0a\xad\x13\x50\x77\x89\x26\x9a\xd9\x5b\x78\x5d\x88\xc7\xba\xde\xaf\x7c\x0b\xb5\x5b\x9e\xb1\x91\x19\xd4\xfa\x52\x96\x98\x0d\x6d\x8b\xa2\x21\x8b\x53\xf1\xf1\x64\x0f\x2d\xae\x2f\xc9\xff\xe4\x7c\x5d\x56\x7c\x8f\xb4\x78\x25\xa5\x41\x19\xb2\xd0\x33\x88\x5f\x4d\x30\x01\xb8\x4e\x11\x16\xda\x0a\x6a\x1c\x24\x35\x2b\x97\xdf\x0b\xf9\x28\x82\xbd\x5c\xb7\xfa\xa2\x43\x01\xa9\x3c\x28\x0b\x2e\xf6\x00\x25\xf5\x95\x32\x7a\x09\xfa\xf8\x85\xe4\xb5\x17\x74\xef\xca\x39\x64\x73\x52\xc0\x5b\x97\xbe\x5b\xe7\xf4\xa0\x2d\xd9\xcb\x69\x38\x61\x87\xe8\x6a\xd8\xcc\xd9\xbb\x71\x9e\x45\x3c\x34\xb8\x4c\x6d\x57\x2d\xf2\xd9\x5b\x67\x20\xb4\xa3\x80\x65\x37\x78\xe1\x64\x74\xee\x13\x77\xeb\x16\x76\x1f\xb9\xb0\xfb\x8e\xb7\x58\xbe\xc0\x21\xc9\xa9\x66\x95\x4b\x4a\xb2\x10\x68\x35\xdd\x20\x66\xec\x2c\x7c\x74\xcb\x96\xc7\x80\xbe\x07\x88\x57\x28\xf1\x9b\xc1\x0d\x6d\xf9\xe8\xff\xc0\xcd\x82\x1c\x58\x17\x1f\x9c\x7a\x60\x51\xe7\x97\xb4\xe7\x07\xfc\x6a\x56\x0a\x18\x42\x72\x3c\x56\xd3\x6d\x91\x36\x80\x94\x03\xfc\xb4\xbd\x0a\x7d\x40\x0e\x1f\x0b\xb9\x2a\x6c\xa0\x81\x98\x92\x88\x98\x6e\x9b\x89\x49\x03\x35\x15\xe1\xcd\xfb\xa1\xa8\x3d\x64\xab\x58\xde\x42\x17\x61\x35\xd6\xcf\x51\xd9\x40\xc1\xfe\x1a\x21\x38\x0b\xc3\x8d\x3e\xfc\x57\xfd\xd0\x3f\xe4\x54\x51\x61\x20\xb0\xc4\x09\xde\x8a\x45\xd1\x8a\xec\x0b\x44\x60\x09\x34\xd6\xc2\x4f\xf1\xe6\x7a\x47\x3a\x16\x6e\xe6\xe9\x11\xe1\x2d\xd6\x3a\x72\x05\x86\x74\x3e\x2c\xde\x9c\x58\xc9\xa1\x2f\x16\x72\x2e\x5a\xa4\x9d\x69\xe9\xbe\x60\x22\xc9\xa0\x28\x40\x14\x03\x13\x28\xdf\xb9\x7e\x86\x73\x50\x2f\x60\x2b\x8b\xe6\xa5\x7b\x10\x7d\xd8\x17\x54\xa3\xa7\x39\x83\x93\x5e\xfc\x5e\x57\xf4\xa3\x14\x7d\xf0\x84\xb8\x4b\x0b\xd7\xd0\x93\x6d\x12\x82\x6e\x2e\xdb\x20\x78\x03\x36\xa6\xc8\x85\xe9\x8b\x40\xce\xe4\x7b\x6a\x32\x46\xb5\x21\x3f\xbe\xdd\x28\xe0\xc2\xcf\xaf\x60\xae\xee\xf4\x16\xa1\xa5\x3e\x9c\xad\xa9\x66\x11\x60\x22\x13\x4a\x04\x8b\x02\xd4\x8f\xec\x36\x1b\x49\x1e\xb8\xce\xa1\xcc\x42\x14\xc6\x8e\x40\xf9\xdc\x68\x0f\x09\x8a\x0a\x53\x03\x1b\xf1\x88\x14\xce\x27\xe9\x86\x55\x43\x58\x4e\x77\xe2\xa8\x9c\x41\x12\x60\x11\x58\x36\xa1\xa6\x2f\x1c\x63\xf5\xb1\x18\x11\x1e\x77\x3b\xcb\xca\xc1\x5c\x56\xc0\x49\x99\xb0\x13\x86\x22\x11\xad\xb0\x40\x97\xa0\x7d\x85\xf8\x9f\x72\x9d\xa8\x70\x56\xac\xa2\xd6\x17\x21\x91\x2b\x6e\xbb\x56\xd8\xa9\x33\x01\x3f\xa3\x0c\x5c\xd3\xfd\x05\x56\xeb\x58\x43\x16\x6e\x2e\xa2\xb6\xc4\x65\xb2\x60\x76\x5f\x22\x1a\xef\xbb\x83\xf5\x25\xe5\x7a\x13\x36\xdc\xb2\x8f\xb2\xc6\x22\xde\xb0\xb9\x91\x68\xb1\x8b\xfe\x1d\x02\xd1\x9e\xcb\x29\x5b\x1a\x7a\x37\x85\x28\xf1\xd5\x4c\xb0\x88\xba\xf6\xac\x03\x6c\xd1\x3c\x8d\xe2\x46\xa3\xa0\x3a\x08\x0f\xf6\x7c\xcf\xbd\xd9\xe0\x1c\x9d\xbd\xee\xe9\x1f\x15\xf3\xf7\x53\x09\x91\x65\x8b\x13\x6f\x96\xf5\xda\xe9\xdf\x68\xc2\x44\x32\xc7\x9e\x3c\x82\xcf\x62\x9a\x9a\x07\x3b\xa1\x60\x6f\xaf\x95\x0e\x5d\xe1\x9d\x16\xe9\xc0\x3d\xe3\xeb\xf0\xd0\x91\xf7\x19\x44\x2f\xf7\x85\x55\x4c\xec\x15\xaf\x71\xd0\xbe\xfd\x32\x89\xd7\x9d\x00\xcc\x72\xdd\xc9\xdd\x32\x5d\x0d\x96\xd6\xa4\x4c\xf8\x24\x5b\x68\x03\x90\xa7\x48\x67\x7c\x4a\x52\x99\xdc\x33\x75\xa2\x58\xca\xf5\x29\xb8\xbf\x4d\xa3\xdf\x6d\x6a\x95\xed\x9d\x05\x8d\x6d\x4b\xe1\x61\xff\x2e\xa2\xd8\x23\x73\x1f\x11\x3e\x02\x6d\xc2\x67\x0a\x60\xfa\x80\xb3\x6d\x13\x26\x8c\x9a\xcf\x24\x17\x26\x58\xb2\x2a\x0b\xe1\x15\x0d\x2b\xb3\x35\xc5\xd7\xaa\x7d\x84\xc9\x6c\x39\xed\xde\x84\x69\xe6\x63\x02\x70\x52\x46\x12\xf4\x84\x20\xbb\x98\x51\x33\xd1\x90\xeb\x50\x5e\x03\xa7\x73\xc1\xa7\x76\x85\xe8\x0c\x42\x0a\xd0\x48\x51\x7c\x14\x82\xf8\xb5\xe1\x59\xd6\x17\x82\xb1\x54\x13\xc0\x6d\xfd\xae\x36\xa7\xc6\x7e\x7a\x44\x68\x9a\x92\xff\xf9\xfd\xfb\x8b\x5f\x7b\x9d\x41\xf7\x12\x2c\xce\xdd\x8b\xce\xdb\xa3\xf0\xe3\xd5\x5d\x2f\xfc\x8a\x06\x96\x07\xa6\xc8\x94\xde\x83\x86\x27\x34\x8a\x7f\x10\xea\x1e\x8f\xd4\x67\x1b\xd9\x27\x9a\xf9\xf0\x51\x27\xa6\x84\xdc\x70\xb7\x87\x2b\xd0\x3b\x36\xd0\x7d\x6f\xc2\x27\xcb\x69\xd0\x13\x4f\xe8\xc2\x8b\x81\x53\x26\x8c\xe5\x31\xce\xd8\x57\xa8\xbe\x05\xc1\x31\x31\xe6\xa2\x29\xc8\x8d\x89\x87\xa7\x94\xe1\x7f\x61\xf3\x4f\x56\xbb\xbe\xa6\x5c\xad\x4d\x7b\x1d\xf1\xc0\x95\x14\x30\xb5\x60\xd5\x2a\xca\x85\x32\xe3\x7d\x6d\xd1\xa1\xd2\x28\x0b\x43\x18\xc5\xac\x31\x90\xb2\x92\x3b\xfd\x32\xa6\xdb\x46\xd7\x2f\xfb\x62\x94\xcf\x6b\xd3\x8e\xdd\xd0\x07\xca\x33\x08\x82\xf5\x17\x4d\x41\x83\x58\x85\xf2\x94\xb0\x8c\x0e\xa5\x82\xd4\x18\x8c\xda\xf1\x4d\xb8\x05\x83\x7a\x6c\xa1\xa1\x56\x5f\x9c\xb3\x99\x62\x09\x05\x2e\x36\xb3\x9a\x0b\x70\xa1\x92\x0d\xad\x85\x6d\x10\x6e\x6f\x1d\xda\x58\x11\x47\xaa\xa7\x2b\xcc\x5d\xba\xbc\xae\xa5\x5a\xe7\xfa\xb7\xaf\xc1\xd2\xc9\x99\xd5\xe3\x2a\x9c\xd7\xdd\xcd\x23\x46\xb1\x18\x05\x3a\x85\x9c\x29\xdf\x45\x85\x66\x59\x09\xb9\xd8\x1e\x1c\xdd\x72\x5e\xf2\xe2\x4d\x29\xc8\x2f\x7f\xd1\x64\x98\x9b\xbe\x28\xb7\x21\x05\xd4\x24\x7e\x47\x4d\x32\x79\xdb\x17\x57\x56\xcb\xfc\xe5\x2f\x0d\x59\xd3\x29\x35\x74\x50\x4f\x94\xcd\x6b\x72\x4e\x0d\xbd\x90\x34\xe5\x62\xec\xb0\x00\xea\xd7\xe2\x5d\xa7\xd7\x3e\x25\x3e\xd1\x32\xe4\x4b\x16\x30\x09\x51\x43\xc0\x90\x61\x22\x9e\x8b\x00\x2b\x17\x81\xf5\x3b\x0b\x19\x48\x4f\xf6\xc2\xea\x0b\x58\x4a\xe4\xaa\xdc\x90\x99\x74\x30\x93\x56\x2b\xc3\x1c\x7e\x1a\x0a\xef\x66\x73\x62\x57\x07\xc8\x38\x6c\x86\x93\xc7\x40\x9e\x59\x64\xf6\x7d\x01\xfa\x79\xc8\x5e\xcb\x64\x42\x33\x08\x9b\x3b\x8e\x4c\x7a\x56\x6b\x97\x39\xe4\x20\x41\xbc\x8a\x98\x97\xa3\x5b\x3d\x08\x78\x21\x94\xc5\x1b\x05\xfa\x3f\xec\xa3\x73\xa5\x4e\xa5\xe5\x38\xad\xbe\xe8\x8e\x30\xaa\x2e\xc3\xd5\xb1\x1f\x32\x01\xde\x64\xbf\x2c\xf6\xa9\xe7\x47\x50\xa4\x07\xbd\x8a\x34\x01\xeb\xbd\x98\x43\x4c\x34\x40\xd3\x49\x88\xce\x28\xb8\xb3\x23\xca\x85\x5d\x0c\x77\x62\xf4\x59\x5f\x60\x30\x5f\x69\x5f\xe2\xcc\xdf\xa8\x77\x29\x20\xd6\xb0\xb8\x2e\x83\x80\x31\x73\xb1\x87\x4e\xd6\x9f\x29\x76\xec\x6b\x39\xda\x5f\xa3\x35\xb5\x37\x6c\x8b\xdc\xc4\xea\x75\x2a\x93\x7c\xea\x21\x63\x20\x57\xcb\x05\xa9\xb9\x4b\x34\x50\x08\x5e\xec\xb5\x14\xff\xbb\xf8\xbf\xb5\xb2\xe9\xf5\x8e\x15\x80\x03\x55\x0d\x66\xe5\x96\x4a\xad\xad\x46\xb4\x58\x01\xb7\x7a\x59\xc0\x56\x40\x69\x60\x69\xb5\x4f\x09\x66\x68\x4c\xa9\x93\xe9\x77\x9a\x74\xaf\xad\x90\x62\x95\xd2\x70\x4c\x72\x6d\x30\x44\x0b\xd2\x54\xf0\x6b\x0c\x93\x3f\x22\x3f\x90\x7e\xfe\xc3\x0f\x7f\x4a\xc8\x17\xff\x8f\x3f\xff\xfb\xbf\xff\xe9\xcf\xdb\x54\xba\x86\x76\x8b\x35\x0a\xa0\x9c\x65\xa9\x25\xde\x81\x45\x66\xb2\xc3\x2e\xb8\x33\xd2\xb4\xfc\x4e\x63\x6f\x4c\x73\xaa\x7b\x1c\x85\xe0\xd0\xb1\x3b\x84\x3a\x3e\x3c\xa4\x74\x7a\x0a\x57\xbf\x66\xe6\xa8\x7c\x88\x83\x3c\xea\x84\xee\xff\xb1\x04\x68\x60\x60\xa9\x79\xbb\x50\x21\x9e\x05\x09\xd8\x36\x42\xbe\x77\x26\x3a\x03\x2e\xbe\xb7\xfe\x0e\x92\x59\xca\x94\x2b\x8e\xe4\xad\x6a\xc1\xd6\x07\xe7\x97\x7d\x99\x65\xd2\x05\x71\x50\xa2\xd9\x8c\xc2\x1d\x6f\xcf\x6b\xab\x2f\x3a\x5f\xa8\x65\xae\x47\xbe\x86\x1d\x16\x5c\x07\xdf\xc8\x88\x26\x8c\xa0\x34\xfd\xfd\x97\x53\xfb\xdb\x11\x99\x9f\x42\x28\xe6\x11\xf9\xc7\xa9\xcb\x80\xa6\xca\x0c\xec\x4f\x6f\xbd\x38\xec\x9a\x80\x41\x73\x4d\xfa\x6f\x4e\x1e\xa8\xc2\x3a\x0a\x27\x0e\x83\xf3\x8d\x63\x7f\x01\x5f\x38\x16\xa0\x33\x29\xef\x5d\xa0\xea\xc2\x97\xee\x3f\x2d\x24\xf0\xe0\xdb\xc0\xcd\x77\x31\xc7\x56\xd8\x3b\x86\x17\x18\x69\xcd\x86\xa4\xf5\x37\x2d\x05\x69\xcd\xe9\x34\x73\xbf\xfa\xa7\x2e\x8e\x96\x6a\xe2\xab\x3d\xf9\x30\x9a\x6c\x8e\xe6\xcc\x77\x99\x1c\xc2\xbc\x3e\xfa\xb9\x62\x24\x2a\x0c\xb4\xb8\x22\x8a\x5b\xc5\x4d\xc4\x89\x3b\x98\x15\x0e\xf5\x11\xed\x2b\x70\xf7\xd6\xcd\xea\x4b\x18\xd2\x7f\xa1\xef\x16\x16\xc5\xa7\xaf\xa1\x05\x37\x84\x81\xd9\x46\xbf\x90\xef\x1d\x13\x7a\x6b\x2f\x02\x17\xf6\x8b\xcb\x50\xd7\xc1\x3c\x74\xf0\x6b\xd4\x01\x17\x04\x13\x12\x97\x7c\xf9\x8f\x93\x56\xab\x15\xbe\xbe\xb4\x53\xf9\x3f\x84\x1b\xcd\xb2\x11\xb6\xe4\xaf\x99\x79\x5f\x7c\xb4\x9a\x4e\x6c\x61\x2e\x20\x56\xa0\x66\x59\x22\x33\x72\x5c\x58\x5d\x53\x99\x68\xf2\x7b\x2b\x7b\x46\x4b\x09\x3f\x5a\x65\xab\xfe\x54\xb9\xd2\x95\xcf\x74\xac\x9c\xd5\xba\x7a\xb0\x62\x70\x86\xa0\x7d\x52\x0d\x11\x4a\x0f\x3c\xcd\x3d\x2d\x58\xca\x39\x71\x00\x0e\x50\x55\xd2\xb0\x2f\x06\x1e\x35\x20\x65\xd4\x86\x84\xd7\x4b\x70\x0b\x0c\xb7\x00\xcc\x40\xb2\x6e\x58\x00\x87\x62\xe0\x78\x03\xce\xf3\x28\x76\x71\xd8\xeb\x45\xc4\x40\x64\x3a\x9f\x4e\xa9\x9a\x9f\x14\xa7\x6d\x91\x38\x0b\x3c\x4a\xe0\x32\x99\x5f\x00\x70\xb3\x66\xee\x68\xb9\x48\x83\xa8\xf8\xfd\x24\x24\x10\x90\x94\x25\x80\x09\x0d\x21\x6f\x88\x88\xce\x44\x22\x53\x47\xd7\x45\xde\x65\x59\xac\x08\xef\x2c\x0a\x14\x3e\x6a\x45\x17\x16\x33\x61\x30\x19\xdb\xbd\xe1\x3f\x6e\x60\xe0\x72\xa0\x8d\x65\x95\xe3\x0d\x5c\x98\xdd\xab\x5b\xff\xcd\xfa\xd7\x2e\xac\x43\x59\xae\xa6\x5e\x95\xf3\x66\x03\x45\x1f\x8b\x0b\x18\xe2\x2f\xd0\x84\x92\x87\xac\x54\xfc\xfb\x4c\x5e\xf3\xcc\xde\x5b\x40\xe3\xad\xbe\x28\xfd\x7c\x44\x58\xc6\xa7\x5c\x84\xf0\x37\x64\xef\x72\x84\x22\xee\x3d\x37\x76\xcb\x74\x7a\x6f\x39\x98\x4f\xf0\x8f\xf4\x9e\xb6\x98\x7b\xd2\x09\xde\x23\x67\x26\xc8\xb5\x1d\x57\xa1\x48\x5b\x89\xd3\x36\x71\xec\xa4\x46\x1e\x11\x1e\x9c\xdf\xbe\xb0\xad\xf9\xb3\x54\xc4\xdd\x46\xed\x45\xcd\x1d\x7b\x2c\xaf\x88\x03\x40\x1f\xa5\xe0\xd9\x20\xa4\xd6\x88\x28\x9d\x4a\xc9\xd8\xcd\x33\x36\x20\xca\x70\x20\x64\xca\x36\x0c\x36\xae\x29\xc9\xe9\x4c\xc5\xde\xc3\xa8\x18\x66\xd5\x00\x9f\x68\x2c\x28\xa8\xf5\x86\xe6\xd3\xda\xda\xb6\xae\x1d\x00\xd6\x7f\x14\xdb\x02\x1a\x04\x9e\x06\xad\x78\xa5\x20\xca\x82\x2c\xad\x7d\xb9\xfe\xee\x4e\x12\x7a\xba\x9d\x01\x19\xe7\x9e\xc0\xb2\x87\x08\x50\x4a\xc6\x4a\xe6\xb3\x90\x2a\xec\x93\xa6\x70\x1b\xdc\x8d\xd6\x15\x23\x79\xea\x64\xea\x0b\x2e\xee\xf1\x2e\x7c\xaa\x3d\x0a\x95\x6e\xa3\xdf\x3d\x07\xc3\x15\x3f\x76\xe5\xce\xed\xa8\xb5\xa1\xc9\x3d\x42\xac\x2d\xab\x94\xbc\x69\xad\xe7\xe2\xbe\xcc\xb3\xcc\x75\x5b\xb0\xcf\xa2\x18\xc4\x03\xa7\x84\x92\xbb\x9b\x6e\x7d\xdf\xf7\x7c\xd1\xde\x5e\xcf\x3b\xcb\x04\x02\xff\xf3\x0b\xdf\x28\x32\xae\x82\xe6\xc8\x4a\xa4\x1e\xf4\xff\x26\x20\xa5\x0a\xef\xde\xd1\xc1\x67\x79\xd0\x60\x5a\x43\xa9\xf5\x93\x2f\x3a\x3e\x77\x1f\x7f\xb4\xdf\xd6\xef\xc8\x47\x48\x09\x09\x79\xf3\x53\x2a\xec\x04\x7d\xaf\x0d\x06\x22\x64\x8b\x5b\x0d\xe9\x6e\xb6\xd5\x80\xb0\xc7\xf5\x22\x50\x7d\x57\xbe\x95\x47\xb4\x18\xd1\x0c\xd5\x2d\x33\x01\x39\xfc\x88\xdc\x26\x13\x36\xa5\x10\x95\x30\x2d\xcb\xe3\x20\x97\x7c\x9f\x51\x35\x46\x29\x41\x33\xa3\xdf\xd6\xec\x70\x11\x9c\xbb\xc3\x0e\x6f\x81\xad\x1d\x5b\xe8\x21\x71\x70\x19\x07\x08\xa3\x2c\x03\xc3\x04\xe6\xe4\xfb\xf7\x77\x87\x55\x56\xf1\x13\xb8\x31\x15\x96\x9b\x4f\xad\x28\xd6\x9c\x31\xbf\x23\x9c\xfb\x25\x9d\x86\xec\x52\x8f\xe9\xee\xb2\x08\x70\x6c\x43\x06\x20\x41\xcd\x63\xd8\x19\xc0\x3d\x1e\x82\xc3\x8b\x6e\x1a\x41\x5f\xb4\xfd\x2b\x21\x43\x0d\xe4\x1b\x85\x7e\x55\x88\x63\xc2\xa8\x3d\x90\x31\xa2\x62\xc9\x6e\x72\x0d\x93\xd8\x34\x13\xa8\x8a\x41\x6f\x65\x9c\x00\x11\x86\xda\x9d\x17\x76\xfd\x3c\x1a\x7a\x7e\xd8\xbc\x6a\x4c\x7d\x92\x7f\x52\xad\xea\x51\xd7\xf1\x2a\xe6\xdb\x09\xd9\xc7\xae\xa1\xb8\x90\x08\xc6\x3a\x65\xf3\x22\xb2\xc6\xae\x38\xca\xa5\x95\xce\x16\x0f\xab\xd9\x89\x19\x73\x3a\x1d\x28\x99\xed\xb2\x47\xbe\x89\x92\x8e\x03\xb9\x1a\x56\xde\xfc\x7b\x4e\x33\xb4\xc7\x0a\x47\x8e\x7e\xd8\x20\x30\xfc\xf4\x67\xd2\x86\xdb\x92\x7c\x04\xb6\x08\x9e\x28\x68\xcd\x48\xc2\xa7\x33\xa6\xb4\xb4\xc2\x78\xc3\x26\xdf\xff\x45\x0f\x1c\x5e\xea\x80\x26\x89\xcc\x17\xb1\x51\x37\x98\x49\x4d\x6b\xf1\xa4\x28\xb9\xcf\x87\x4c\x09\x66\xc0\xc1\x09\xef\x11\xff\xde\x5a\xc3\x95\x34\x37\x93\x9f\x06\x49\xc6\xd7\x06\x71\x85\x28\xf8\xb6\xfd\xec\x0c\xbf\x5a\x36\x81\x52\xfb\xa5\xa1\x0b\x82\xcf\x08\x3e\x6b\x91\x77\x34\xb9\x67\x22\x75\xf5\xcd\x31\x31\x15\x2e\x28\xe0\x96\x91\x89\xa2\x3c\x31\xd4\x77\xb0\x7d\x7b\x0b\xf5\xc5\x94\xde\xdb\x5b\x88\x7d\x71\xc1\xc2\x56\xcd\xd8\x08\x1f\x38\xd0\xc3\x42\x86\xbe\xcf\xa2\xd4\x2c\xc9\x95\x7d\x03\xcf\x87\xc1\xf3\x01\x46\x05\x40\xa9\xca\x05\xa1\x90\xe4\xff\x9d\x26\xf9\xcc\x6b\xbe\xa0\xed\x66\xe0\x20\xc0\x49\x42\x3d\x1b\x6e\xa5\xc1\x09\xeb\x0b\x08\xba\xf2\x2d\xce\x03\x57\x89\x7d\x52\xc1\x37\x5a\x77\xf8\x46\x98\xe2\xba\x9b\x2d\x1d\x6d\x08\x7b\x0f\x28\x33\x13\x26\x40\x0d\x5b\xbf\x65\xc8\x13\x5e\x7f\xd3\x4a\xc1\x63\x38\x8b\xc2\x6a\x10\x96\x30\x17\xdc\xc1\x06\x3b\x43\x51\x14\xd7\xe1\xed\xa9\xc5\xf7\x5c\x13\x4d\x0d\xd7\x23\x5e\xab\x9e\xc6\x89\xc5\xbb\xac\x3a\xdd\x2c\x9b\xb9\x26\x93\xb9\xb2\x16\x21\x3e\xb5\x45\xde\x73\xa5\x4d\x34\x25\x23\x43\x5e\x70\x13\x4b\x30\x13\xd6\x08\x69\xb5\x0f\xcf\xae\x9f\x41\xf4\xfe\x52\x1f\x79\x88\x45\x6e\x91\x76\x61\xe3\xc2\xcc\x68\xb4\x5e\xad\x98\x11\xcb\x34\xdb\x86\xf8\xd6\x32\x08\x80\x27\x08\x08\x88\x80\xac\xa2\xed\xef\x05\xbc\x5e\x18\xe6\x23\xa4\xfb\xd0\x7b\x26\x96\x69\x7d\xeb\x8f\xb0\x53\xca\x95\xac\x1b\x62\x3b\xe8\xfb\x12\x55\xfe\x6d\x06\xb8\xfe\xb1\x2b\x92\xd1\xf9\xe8\xc4\x2e\xb9\x95\xf3\x93\x7b\x17\x65\x3c\x02\x3a\x74\xe9\xec\x8f\x13\xa9\xe3\x73\xe6\xf7\x0f\x36\xd3\xa8\x9c\xf9\x68\x62\x08\xd2\x0e\x0b\x8c\xee\x59\x21\xe3\x6c\x77\x18\x75\x38\xa4\x18\x85\x14\xf6\x9b\x78\x16\x0a\xcb\x00\xb6\x52\xdf\xd4\xe2\x69\xfe\xe5\x2f\xfa\x0a\x4e\xec\x3e\x72\x36\x33\x3a\x64\xd9\x13\x80\xf8\x6c\x19\xd1\x15\x42\x01\x70\x5c\x60\xf1\x4d\x43\x8e\xf0\x4c\xa6\xa4\x20\xaf\xa6\x88\x34\x21\x24\xba\x82\x5f\xe0\xb4\xa2\xc1\xad\x3d\xb7\x55\x94\xfd\x31\x72\x55\x61\x95\x46\x04\xc6\x88\x44\x2e\x97\xd7\x03\xca\xaf\xbb\xfe\xb9\x0e\xf7\x49\x3d\x8d\x5d\xcb\xf4\x79\xc1\x8f\x16\xe9\x7a\x8d\x70\x33\x5d\x57\xd7\x64\xc9\x4a\xcc\x64\x73\xa0\x50\x3a\x58\xbf\x1c\x08\x38\x9d\x86\xf9\xe8\x16\xa0\x57\x9b\x72\x97\x3d\xe6\xcc\x84\x85\x6c\x04\xbb\xcf\xb6\x9b\x10\x1b\xdb\xb4\x29\xce\x87\x51\x5c\xff\x94\xfc\xef\xdb\xab\xcb\xe3\x29\x55\x7a\x42\x21\x37\xcc\xb7\x75\xe4\xd1\xbe\x51\x01\xf5\x1e\x47\x2e\x48\x5f\x1c\x93\xb1\x3c\x42\x53\xfe\x29\x99\x18\x33\xd3\xa7\x27\x27\x63\x6e\x26\xf9\xb0\x95\xc8\xe9\x49\xb1\x36\x27\x74\xc6\x4f\x86\x99\x1c\x9e\x28\x06\x11\x57\xc7\x3f\xb6\x7e\xfa\x11\xb6\xe6\xe4\xe1\xc7\x13\x48\x2f\x6f\x8d\xe5\xef\x2f\x7e\xfa\x8f\x3f\xfd\xd9\x36\x3c\x9b\x9b\x89\x14\xa7\xce\x4f\xb0\xb4\xed\x63\x14\x7c\x4f\xf0\x93\x4a\x2f\xff\xd1\xfa\x21\x1e\x86\x7b\x75\x2a\x53\x96\xe9\x93\x87\x1f\x07\x7e\x67\x5a\xb3\x4d\x3c\x1f\x05\xc3\x0f\x4b\x5e\x29\x83\x63\x7f\x0f\x24\xe3\x73\x43\x56\x6d\x4b\xcd\x59\x89\xe3\xe9\x76\x38\x31\xf7\x6c\x55\x99\xe8\x65\xe7\x21\x48\x52\x0d\x3a\xfd\xa6\xd8\xae\x8d\xb2\xcd\x46\xe9\x43\xe0\x7a\xe1\x09\xe0\x06\xa2\x0d\x62\x46\x79\x5d\x90\x87\x73\x31\xee\xb2\x7e\x4f\x89\x80\xb9\x6f\xe8\x4b\x37\xdd\x2d\x61\x2f\x33\xfc\xda\x3b\x44\xe5\xa3\x87\xbb\xdc\x07\x48\xe4\x9a\xd5\x11\x02\x92\x1e\x12\x0f\x8c\xc5\x8f\x6b\x33\x1a\x29\x2d\x31\xfa\xc8\x5d\x08\x9c\x86\x70\x39\xcc\x45\x97\xa3\x80\xe9\x89\x91\x8e\x08\xff\x2b\x47\x35\xff\x78\x97\xc9\xa1\x7e\x1b\x10\x30\xa8\xf6\x7d\x14\x29\xe9\xcd\x24\xb8\x1f\x08\x49\xbf\x14\x4f\xa9\x9f\xf8\x33\x13\x4b\x21\x9b\x2c\x7c\x3d\x51\x15\x81\x88\x98\x91\x47\x95\xcc\x85\x87\xe0\x93\x82\xc9\x11\xb8\x88\xe1\x02\xf4\x4e\x10\x30\x82\x08\x69\xa2\xec\x3b\xc5\x66\xc8\x48\xc1\x5c\xd7\xbc\xdc\x3b\xc2\x50\xae\x5a\xe7\xa7\x80\xa1\xdc\x75\xdd\xdd\xc1\xf9\x4a\x0b\xbe\x2b\xb8\x20\x1e\xa5\x0d\xd8\x2c\xbc\xbf\xd2\x33\x11\xf8\x00\xb8\x22\xe2\x22\x4f\x08\x36\x01\xe1\xa3\xec\xd8\xc8\x63\xc8\x5a\x86\x5c\x58\x04\x86\x6d\x2a\x97\x00\x1e\x9d\x4d\xae\x03\xfb\xfe\x1a\xe3\xc4\x90\xe1\x2f\xd1\x40\xdd\xdd\xab\x89\xaf\xcd\x0b\xca\xa5\x10\x4c\x39\x63\xf5\xca\x9b\x63\x43\x7f\x4f\xbc\x95\xcb\x1d\xbe\x85\x00\x1a\x83\x76\x86\x60\x2f\x1a\x31\x81\x16\x81\xb8\xd8\x89\x9c\x4a\x7b\x6d\xcb\x5c\x47\x0f\x31\xae\x1a\x2e\x9b\x25\x95\x89\x67\x88\x52\xf2\xf5\x66\x63\x8f\x96\x7d\x84\xba\x7c\xfc\xd2\x6a\xe4\xe2\x68\x26\xc3\x32\xf2\xeb\x8a\xf1\x07\xc8\xce\xe5\x74\x03\xde\xc4\x29\xd8\x4e\xa1\x20\x85\x03\xe2\xe3\xff\xb0\xa2\xba\x25\xa9\x10\xc3\xec\xf3\x9e\x5d\xd4\x21\x82\xf1\xc4\x68\x5d\x95\x02\x8e\x0b\x1b\xb1\x91\xee\xb5\x4c\x95\xa9\x8b\x26\x42\x10\x8b\x22\x78\xd0\x2e\xf2\x82\x18\x1d\x3e\x7c\x28\xaa\xa1\xcc\x67\xec\x88\x0c\x73\x78\x7e\x79\xd5\x8b\x1d\x65\x5c\xc0\xe3\xe3\x64\xc2\x92\x7b\x08\xf6\x47\xa6\x88\xcb\xe5\xcb\xda\x0c\xe7\x7d\x51\x60\xee\x1b\xe9\xbd\x3e\xf3\x00\x6a\x18\x80\x3d\xa5\x22\x29\xd7\xb3\x8c\xce\xc1\xbe\x2e\x30\x4c\xa8\xb0\xcd\x87\xf8\x3a\x4b\x2c\xdb\x99\x91\xa0\x28\x80\xe3\x02\x5e\x0e\x83\xbf\xfc\x24\x42\x5d\xba\x10\xf2\x5a\x27\x76\xec\x0c\x33\xb9\x4b\xb8\x50\x53\x79\x8b\xa8\x90\x26\xee\x68\xec\x37\x0e\xd9\xa8\xd5\xea\x87\xfd\x37\x3e\x08\x17\x54\xad\xbe\x2f\xdc\x66\xff\xc6\xe2\x42\x4c\x3d\xb0\xb4\x2f\xca\xf9\xbe\xee\x2a\x2b\x76\x99\x14\xb0\xe7\x4d\xac\x73\x73\xf3\x42\x8c\xa4\xb6\x3c\x92\x09\x72\x9c\x0a\x70\x93\x10\x68\xba\x04\x86\xbd\xbe\xa0\xda\x13\xe0\x85\xaf\x6d\x72\x2a\x70\xd6\x1d\x48\xb2\xab\x82\x50\xf2\xee\x04\xc2\x0c\xd9\x8c\x08\x75\x10\x02\xf0\x5c\x40\xde\x42\x6a\x48\x5d\x1b\x7d\xe1\x73\x08\x46\x79\x96\x21\x7c\x4d\xc3\x72\xf9\xec\x66\x1f\xf0\xf6\xf5\x52\x48\x83\x5e\x4b\x22\x60\xfa\xe0\x85\x49\xd9\x2c\x85\xb0\xef\x64\x5e\x14\xa2\x04\xe2\x65\x42\xe7\x10\x18\xed\x41\xa9\x21\x57\x67\xcc\x0c\xb1\x72\x47\x9a\x67\x18\x14\x0f\x0e\x36\x48\x95\xa6\x59\x46\xb8\xd1\x7d\x11\x32\xbb\x11\xa6\x0f\xae\x02\x9f\x85\x94\x3a\x59\x10\xba\x80\x66\x5d\xe9\x22\xb8\x20\x78\xc2\x4d\x69\x48\xe0\x39\x9a\xc7\x48\xae\xb3\x19\xa3\x18\xc2\xe9\x4e\xa2\x88\xa5\xc1\xea\x36\xb8\x78\x47\xa8\x28\xb3\x98\x10\xba\x4f\xea\xc5\x8a\x42\x1b\x6f\x4a\x8b\xb4\x71\x76\x56\x14\xf4\x65\x55\x70\xb4\x2e\x71\xc4\x05\x57\x58\x79\xcb\xe8\x50\x9f\x31\x48\xd4\x33\xaa\x0c\x4f\xf2\x8c\xaa\x6c\xee\x8b\xb2\xf2\x51\x54\x21\x06\x36\x01\x13\x7b\x5d\x01\x58\x00\xbb\x76\x46\x59\x4d\xa7\x2c\x4a\x58\x70\x8a\x67\x16\x39\x75\x10\xac\x0c\xbd\x05\xb6\xad\xb7\x2d\x72\x5e\xad\x07\x04\xc7\x22\x02\x04\xe1\x1a\x39\x60\x18\x6f\x14\x69\x8b\x75\x85\xf8\xc8\x0a\xbb\xdf\x45\x07\xaf\xa9\xf0\x1c\xd5\xf7\x1b\x7a\x8c\x3c\xaa\xe4\xf2\x38\xa1\xda\x48\xfb\x1e\xd4\x33\x2b\xf9\x91\xc2\x89\x68\x18\xa0\xbf\x1c\x36\x1c\x64\x0c\xa6\xb2\xc5\x40\x3f\x47\x05\xc3\xaa\x83\x9d\x2e\x29\x48\x03\xfb\xb8\xe1\x50\x23\xb0\xe8\xcd\x07\x1a\x51\x4e\xec\x1f\x6c\x5c\xd9\xd5\xca\xe5\xe7\x12\x6c\x33\xb1\xe3\xb2\x82\x3d\x43\x8f\x72\xa5\x4e\x28\x8c\xc1\xe1\x3b\x03\x1c\x5f\x38\x6c\x43\x46\x32\x2e\xee\x7d\x6a\x8f\xdd\xf9\x23\x42\x8b\xd6\xe1\xf0\xe1\xe8\x91\x98\x1b\x24\x9b\x3a\xf0\xca\x1d\x84\x9d\xf5\x02\xa4\x6b\x37\x37\xcc\x7b\x23\x7c\xd2\x85\x32\x9b\xd1\x3c\xd6\xdf\x96\xa5\x31\x4c\x41\x88\xf5\x81\x4b\x78\xc1\x44\xd1\x14\x86\x87\xc2\x8b\x8d\xeb\x7b\x3d\xa1\xf5\x45\x76\x57\xe3\x31\xdf\x5d\x9e\x77\xde\x77\x2f\xcb\x20\xca\x7f\xbd\xeb\xdc\x95\x7f\xb9\xb9\xbb\xbc\xec\x5e\x7e\x88\x7f\xba\xbd\x3b\x3b\xeb\x74\xce\xcb\xef\xbd\x6f\x77\x2f\x2a\xef\xd9\x9f\xca\x2f\xb5\xdf\x5d\xdd\x54\x60\x9b\x6f\x7f\xe9\x5e\x5f\x97\x7f\xea\x75\x3f\x76\xce\x07\x57\x77\x25\xe4\xe7\xf3\x5f\x2f\xdb\x1f\xbb\x67\x03\x3f\x1e\xf7\xa4\x16\xbc\xb9\x98\x5a\xed\xea\xed\xc3\x83\xba\x35\x62\x77\x9b\x8c\x14\x67\x22\xcd\xe6\x18\xe0\xe5\x55\x92\x4a\x3c\x49\xcc\xed\xf9\x94\xc9\x7c\x97\x38\x2d\xab\x15\xcb\x07\xab\x6d\x67\xc4\xb5\xe6\xa2\xd3\xa9\xbe\x6f\x44\x8c\x30\x6a\xd1\x42\xb6\x34\x1a\xd5\xa8\x79\x88\x77\x5e\x1a\x67\x19\x92\x55\x5d\x27\x64\xc6\xd4\xb2\xb1\xc0\x5d\xac\xf2\x99\xe1\xc3\xe6\xc8\xbb\x35\x93\x38\x37\x57\xfa\x10\xfd\xa0\x3e\x0b\xed\xb2\x9e\x07\x96\x02\xd0\x76\x89\xbd\x81\x16\xb6\x05\xa2\x0f\x5f\xfb\x78\x85\x59\x3e\xcc\x78\x42\x78\x5a\x60\x36\x60\x64\x1a\x86\x49\xa3\xf9\xa4\x0a\x92\x32\x63\x0a\x84\x23\x2b\x73\xce\x14\x3b\xa6\xb9\x99\xf8\xa2\x76\xa1\x1a\x39\x82\x96\xb0\x44\x31\xe3\x8b\xe6\xb2\xd4\x43\x93\x47\x3d\xc1\x60\x5c\xb2\x44\x0a\x59\x79\xad\x08\xaf\xae\xc1\x5e\x86\x5f\x62\xeb\x1b\x58\xf6\xf0\xfd\xa5\x4b\xe3\x46\xcc\x75\xb5\xfa\x14\x88\x81\xf8\xd0\x03\x9c\xdb\x79\x5b\xa6\x9c\xf8\xa8\x3e\xdc\x64\x1f\x20\x58\x3f\x8d\x55\x34\x16\x13\x4a\x39\x9e\xcf\xb5\xee\x1e\x9d\x29\x06\xf7\x85\x73\xff\x78\xa5\x19\xdc\x95\x2e\xa0\x10\xe2\x08\xad\x72\x30\x64\x13\x9a\x8d\xd0\xfe\x62\xb7\xa6\x38\x57\x8b\x24\xda\x93\xf7\x4c\xec\xa1\xf0\xff\xd6\xec\x50\xa0\xac\x5d\xa4\xcf\x04\x53\x44\x61\xac\x81\x42\xc7\xca\x57\xb8\xc6\x80\x6a\xac\xbb\x88\x92\x69\xf4\x18\xa3\x1a\x0b\xfc\x22\x1f\x8b\x3d\x1a\xf1\x2f\xb6\xc1\xbe\x60\xb5\x08\x2e\xe0\x23\xf6\x69\xac\x81\x2f\x03\x82\x01\xe6\x02\xde\x33\x01\xe0\xea\x58\x1f\x69\x25\xcd\x6e\x66\x0a\x5d\xdc\x8b\x45\xc3\x62\x58\x31\x30\x36\xf1\x12\xe4\x7c\x6c\xf1\xf4\xeb\x04\x89\x13\xf7\xac\x45\xce\xf1\x5e\x04\xba\x39\xbb\xe8\x76\x2e\x7b\x83\xb3\x9b\xce\x79\xe7\xb2\xd7\x6d\x5f\xdc\xae\x7b\xfc\xf6\x11\x7c\x5b\x39\x7d\xd5\xf8\xe7\xc0\x21\x4e\xdc\xc9\x2b\x52\x40\xc2\xa4\x8a\x63\x07\x5b\xb2\x7a\xf4\x3c\x9d\x0d\x52\xae\x13\x7b\xfd\xcd\x07\x4c\xa4\x00\x7d\xb5\x15\xa9\xd6\x37\x55\x9d\x45\x78\x83\x84\x37\x3c\x07\xc1\xdb\xee\xc1\x53\x74\x78\x0e\xd8\x18\xae\xb4\x30\x94\x95\xef\x8b\xe8\xb6\x69\xad\x86\x3b\xb5\xcd\xed\x36\xb7\x72\x13\xd5\x39\xe1\x78\xb9\xd6\x39\xb5\xfc\xd1\xbf\x06\xd0\x06\x0d\xab\xe2\xc0\x0e\x62\xfc\x2d\x1e\x95\x77\x21\x56\x1b\x9e\x52\x91\x52\x23\xd5\xbc\x61\x8a\xeb\x31\xcf\xf8\xd8\x94\x59\x68\x7c\x65\x5b\x55\xdf\xef\x02\xbe\x4a\x45\x95\x94\x10\xa5\xab\x77\xf5\x4b\xe7\xf2\x76\xd0\xb9\xfc\x34\xb8\xbe\xe9\xbc\xef\xfe\x57\xc8\x62\x76\xc5\xaa\xcb\x95\x23\x98\xbd\x14\x2d\x77\xf1\x19\x75\xb5\xfc\x05\xeb\x37\xf8\x76\x1c\x66\x37\x1f\xf5\x85\xe7\x2c\xaa\x68\x7e\xa2\x64\x3e\x9e\xd4\x37\x54\x1d\xe5\x75\xbb\xf7\xf3\x56\xc3\x84\x6c\x57\x04\x79\xc7\xd3\xb6\x88\xdb\xc2\x47\x8e\xef\x21\xd8\x4b\x65\x78\x90\xb3\x0d\xaf\xd6\x99\xb7\x1b\x38\xda\x56\x8a\xca\x22\xd3\x5a\x2a\xfc\xd7\xbc\xde\x44\x40\xbd\x88\x6f\x96\xae\x11\x08\xc4\xc2\xf2\x21\x0b\xad\x9d\xd6\xfc\x56\xba\xc1\x7e\x3a\xce\xd8\x78\xcc\x52\x24\xaf\x6a\xc3\xce\xea\xe3\x58\x60\x52\xdc\xeb\x75\xab\xe8\xd0\xfc\x77\xb8\x98\x43\xec\xc3\xfa\x0c\xfc\x3a\x7c\x52\xcf\x2b\xce\x7c\x55\xaf\x44\x0a\x6d\xa8\x68\x40\x47\xdc\xb0\xf2\x70\x01\x59\xae\x8a\xfa\xdf\xce\x16\xe2\xed\xd4\xc5\x39\xd8\xc6\x77\xe3\xaa\x16\x08\x67\xdc\x88\xaa\x19\x44\x65\xc8\x6a\x36\xa1\x52\xdb\xf5\xc9\xed\x18\x4b\x55\x27\x97\xe4\x0d\xc6\x45\x84\x8d\x76\x10\x51\x68\xf8\x01\x2c\xf6\xc6\x60\xb0\x3d\x97\x82\x0e\xc6\xcd\xa2\x8e\x6d\xa8\x8c\xec\x85\xb7\xcd\x4d\x59\x95\x2a\xb0\x51\x85\xdc\x34\x4f\x1c\x16\x1a\x36\x5b\x78\x7b\x9d\xed\xca\x5f\xb0\x29\x39\x8e\x2b\x6f\xa7\xc7\x90\xae\xdb\x17\x4d\x3e\x8c\x9a\xaa\xd5\x31\x05\x5c\xfb\x5b\x6b\x97\xbd\xaf\x59\xfd\xe6\x23\xe8\x17\x7b\xbd\x34\x0a\xe2\x5f\x07\x61\xaf\xc1\x59\xee\xf6\x65\x48\xd1\x49\x59\xbe\x8e\x9b\x32\x2a\x03\x57\xdd\xcc\xa7\xbf\x96\x3f\x9f\x96\x21\xdc\xf0\x8a\x9c\x50\x8d\x92\xab\x49\x26\xe5\x81\x9b\xa2\xc6\x7a\x93\x59\x3c\x48\x82\x7b\x84\x79\x6a\xf2\x51\x1c\xa1\x4e\x0d\xd5\xc5\xed\xe8\x63\xe8\xf3\x50\xc6\x61\x33\xc2\x8f\x85\xa3\xa0\xbc\x20\xdf\x03\x86\x95\xd1\x5c\x24\x13\x32\xcb\x28\xa6\x0e\x4d\xa8\x46\x92\xf6\x6e\x70\x3a\xe4\x19\x37\x90\xf4\x8c\x0e\xa4\xca\x0a\x5b\x8d\x86\xaa\x7b\x0f\xb6\x43\x0b\xc8\x8d\x65\x44\xbf\x63\xa8\x56\x51\xd1\xef\x39\x83\xb5\x8a\x23\x1b\x7d\xb1\xd4\xfb\x54\x90\xa5\x0b\xd4\x2a\xb6\xc3\x72\x3c\x20\xcb\x62\x2e\x9b\xed\xac\x6b\xf1\xba\xfa\x79\x69\xbd\x6b\x2e\xea\xcd\xa3\x02\x1c\x8e\xdc\x06\x6c\xbe\x8a\x32\x57\x7b\xb2\x46\x99\xa4\x0d\xb5\x88\x7c\xdb\x08\x1a\xd7\xd4\x76\x2a\xf3\x61\x13\x48\x11\x8e\x6a\x79\xeb\xcb\x4c\xfc\xfe\xdc\xee\xcb\x2e\x18\x33\x40\x6a\x98\xe1\x9b\x99\x36\xa2\x49\x53\xc3\x8e\xe1\xf3\xfa\xc6\x1d\x34\xcf\xda\x73\x5e\x20\xb4\x02\x5d\x34\x40\x21\x59\x91\xb6\xa6\x9e\xed\x5f\x73\xa8\x99\x7b\x35\xba\xc5\x34\xdc\x5d\x88\xcc\xf0\x45\x0a\xab\x3f\x89\xd5\x5e\x7b\x65\xff\x49\x4c\x03\x6b\xa7\x60\xd4\xcd\xe6\xd6\x7e\xbd\xfe\x81\x2c\xd7\xeb\x9b\x29\x2e\x21\x59\xd6\x15\xf9\x5b\x82\xe7\x51\xdb\xef\x0e\x2b\xf9\xf7\x9c\xe5\xcc\xd2\xfe\x30\x4f\xc7\x8b\xb6\xcd\x0d\xa4\xb3\x62\x4a\x13\xf9\x48\xa6\x79\x32\x21\xbe\x71\x92\xb2\x8c\xce\x4b\x53\x03\x79\xc9\xc8\x0c\xf0\x91\xb6\x84\xeb\x49\x72\x6d\xe4\x14\xc2\xd8\x8a\x76\x55\x2e\x80\xe0\x09\x35\x46\xf1\x61\x6e\x6a\x63\x9f\x4a\xb8\x15\x5b\xfa\xae\x6e\xaf\x3b\x67\xdd\xf7\xdd\x8a\xe3\xa8\x7d\xfb\x4b\xfc\xf7\xe7\xab\x9b\x5f\xde\x5f\x5c\x7d\x8e\x7f\xbb\x68\xdf\x5d\x9e\xfd\x3c\xb8\xbe\x68\x5f\x96\xdc\x4b\xed\x5e\xfb\xb6\xd3\x5b\xe1\x56\x5a\xec\xb5\x79\x23\x68\x04\xab\x61\x65\x17\x67\xb8\x04\x67\x9f\xd7\x2e\x5d\xaf\xa7\xa4\xed\x41\x46\xe2\x2a\x4c\xd4\x7b\x01\xc1\x7b\x8d\x65\xa1\x9c\xb3\xf0\x9c\x1a\xea\xca\xec\xb5\x48\x9b\xf8\x72\x89\x10\xea\xa8\xad\xb0\xe0\x20\x18\xec\xee\x60\x13\x56\x62\x48\x0a\xcd\xad\x80\xfa\x97\x23\x87\x7d\x92\xb1\x18\x6f\xce\x95\xc6\x6e\xf5\x45\xe7\x81\x09\x93\x03\x18\x16\xcd\x32\x5f\xd5\xd2\xbf\x10\xa5\x2a\xf9\x51\x6a\x3e\xe5\x19\x55\x05\x2a\xfb\x95\x6b\x0b\x04\x76\x3f\xd6\x90\x99\xbe\x08\xd5\xeb\x95\x87\xbb\x2e\x81\x71\x9f\x5d\x74\x41\x04\x4a\x8c\xc7\x33\xf5\x9d\xf7\x05\x82\x6b\xb8\x1e\xa7\x14\xc2\x6f\x8d\x74\xf6\x34\xec\xbe\xb1\xca\xf7\x4d\x0d\x2a\xfa\x16\xe0\x2d\x68\x79\x7e\xaa\x40\x9a\x30\x48\xff\x8f\x8e\x30\x6a\xbe\xb6\x5c\xd3\x03\x24\x5c\x0d\xb2\xa9\x8b\x99\x29\x23\xb5\xa3\xb9\x83\xf8\xd6\x2f\x41\xd8\xf1\x31\x5d\xce\x1a\x1f\x8c\xee\x0c\x6a\x4b\x34\xc8\xdf\x99\xbd\x84\x5e\xea\x3a\xc4\x99\xc0\xb0\x0a\x43\x99\x8b\xd4\x97\x99\x9e\x72\x71\x32\xa5\x5f\xde\xfa\x99\x62\x66\x5d\x80\x62\x04\xd4\x04\x96\x59\x4d\x64\x6e\x99\xdc\xf2\xe5\xea\x8b\x25\xeb\xb5\x5a\x5a\xf4\x9c\x15\xd4\x9e\x42\x47\xc5\x38\xa5\x07\x36\xaf\xdb\xbf\x05\x40\x5d\x8c\x85\x72\x07\x1e\x1a\x99\x29\x66\xec\x9b\x21\x0a\x2a\xc3\xe8\xb6\xf0\x37\x44\xd9\x96\x80\xf9\xeb\x99\x77\xec\xe6\xdd\xe9\xdc\xd4\x3a\x98\x9f\x00\x12\xd9\xf5\x64\x37\x0d\xdd\xcd\xde\xd2\xe9\xa2\x8a\x9d\x1f\xcd\xee\xd6\xdf\xe4\x10\x6a\xff\x6a\x5f\x77\x4b\x31\xb0\x6c\xc3\x5e\x78\x0c\x37\x48\xae\x5f\xf0\x61\x7b\x1a\xc8\x98\x06\x7b\x2f\xd4\xa5\x67\x7f\xcf\x9d\xcb\xee\xc7\x1f\x36\xbb\x68\x8d\x9a\x13\x8f\x16\x19\x07\x81\xbb\x1c\x08\x77\xe9\xc2\xb8\x72\xc1\xeb\x10\x37\x6e\xb0\x22\xfb\x3e\xa2\x1d\xd6\x77\x67\x55\x3a\x75\x7f\xae\x8c\x93\xf7\x96\x58\x57\x45\xfe\xc9\x20\x8a\x3e\x55\x90\x89\x5c\x77\x10\xfe\xea\x5a\x8f\x6f\xb4\x21\x4d\xee\x1f\xa9\x4a\xd1\x58\x08\xe1\x07\x2d\xf2\xb3\x7c\x64\x0f\x4c\x1d\x91\x84\x29\x43\x1d\x68\x81\x06\xff\x2b\x1c\x28\xd7\x4e\x5f\x40\x44\x38\x22\x40\x08\xa8\x59\x66\xf8\x78\x62\x15\xca\xc8\x7b\x2e\x95\xe5\x47\x06\x11\x61\x66\x2c\x71\x69\xe2\x0d\x0b\x30\xca\xe8\xc3\x22\x0a\xc3\x36\x09\x9d\xa4\x1b\x32\x6d\xbc\x7b\xca\xf9\x6a\x96\xc6\x3b\xf8\x2a\xff\xc8\x35\x31\xaf\xf7\x88\x8c\x65\x46\xc5\xb8\xd5\x6a\x11\x66\x92\xd6\xdb\x8d\x08\xdd\x35\x18\x3b\xbc\x42\x1c\x67\x26\x35\xcb\xe6\x21\xb3\x39\xc4\xdb\xdb\x55\x86\xf8\x7e\xcd\xd1\xe4\x51\x43\xfd\xb7\xd5\xbc\xd0\xe7\x35\x9d\xd7\x6b\xaa\x1b\x27\x98\x34\xb4\x03\x18\xcb\x1b\xb4\x84\xef\xd7\x6b\x5e\x1b\x24\x4c\xf9\xaa\x05\x45\xe2\x54\x03\x88\x99\x14\x9b\x66\x03\x7d\x92\x4d\xe5\xbd\xb6\x02\x1e\xa9\x6d\xc9\xa5\x25\x6f\x95\x1f\xb3\x48\xd1\x35\x14\x17\x52\xc9\x76\x09\xf9\x91\x59\x3e\x6d\x06\xb1\xd8\x55\x8a\x2a\x06\x89\xff\x3a\x83\xee\xd6\x96\xa2\x8a\x2a\x66\x52\x61\x0e\x8f\x1b\x2f\xda\x42\x91\x98\x80\x5b\x2a\xae\x01\x6e\x65\x9b\x34\x9b\xd0\x0c\x36\x0d\x2e\x1b\x28\x73\x0f\x75\x25\x95\x14\xe3\x6c\x8e\x99\x43\xde\xc4\xef\x3e\xd1\x28\xea\x80\x9f\xa7\x99\x33\x54\x03\x89\x36\xde\x23\x80\x78\xdd\xca\xb9\x05\xa2\x43\x04\x33\xe8\x22\x1d\xa0\x41\x5f\x73\x5b\x92\x91\x4f\xda\xb8\x67\x51\xdd\x90\x14\x00\x08\x1f\x5b\xe4\xbd\x54\x50\x1c\xc4\x39\x6e\x9d\x6f\xbd\xb8\xb5\x4c\xd1\x09\x1a\x88\x1f\x7e\xf4\x21\x15\x38\x43\x6c\x02\x50\xbe\x53\x2a\x4c\x6d\x03\x45\xc4\x11\xb4\x85\x9f\x7c\xb2\xaa\x70\xed\xeb\xae\x7d\x78\xb5\x2f\xec\xbb\xed\xcf\xb7\x04\x97\xda\x41\xd5\xa9\x65\x03\x8d\x1a\x59\x1d\xd4\x01\xcb\x35\xd8\x42\x1a\x28\xed\x03\x2e\xba\xc7\x2a\xb4\xcb\xce\x4c\x32\x29\x6e\x9f\x72\xf9\x1c\x87\xd6\xee\xe6\x39\x2d\xc0\xf7\x30\x5e\x2e\x0e\x3c\x72\x15\x9a\x83\x1a\x2b\x05\x03\x4b\x3d\x35\x24\x95\x71\xb3\x84\x9b\xd5\xd1\x1d\x1b\x02\x44\xac\x22\x35\x23\xd1\x6b\xef\xe6\x59\x72\xb8\x80\x58\xc9\x31\xdd\xde\x87\xc6\xa1\x5c\xec\xc0\xbf\xab\x90\x71\xe5\x04\xc6\xbe\x28\x77\xb5\xb0\x48\x3e\xfc\x82\x2b\x86\x48\x4f\xda\x5e\xe1\x86\x3f\xd8\x83\xba\x48\xd6\x81\x40\x81\x03\x2c\xd2\x5e\x5f\xe0\xb0\x23\xb8\xa8\x7b\x36\xd7\x31\xd2\xb8\xa3\x28\xd2\x44\x90\xdc\xce\xc7\x57\xd4\x5e\xb9\x15\xb0\x70\x83\xa8\xbc\xd9\x7a\x57\x09\x76\xfa\xd1\x7e\xbc\x24\xae\x6b\xa1\x71\x4b\x83\x45\x4a\x4c\x61\x58\x2a\x4a\xf3\xbb\x75\x76\x7b\x58\x84\x6e\xd4\x94\xbe\x2b\x6c\x74\xa0\xfc\x58\x1d\xa7\x2f\x1c\xa2\x5c\xe4\x12\xb5\x0c\x67\x71\xdb\x5c\xaa\x1e\xe2\x58\xcd\x4b\xd9\xcf\x80\xf6\xe7\x6b\x34\xd5\x57\x1c\xf4\x85\x2a\x5c\xa5\x5d\xcc\x6e\xf5\x86\x9c\xda\x0e\xb7\x8c\x07\x72\x9b\xdb\x18\x03\x54\x88\xb1\x6e\xe1\x1c\xd0\x0b\x42\xd6\xa3\x04\x9c\x30\xbb\x7c\x6d\x51\x1b\x7e\xe3\x83\x6f\x6e\x3b\x67\x37\x9d\xde\xb3\xc5\x08\xf9\x00\x9d\x8d\x83\x84\xfc\x38\xcf\x3b\xef\xdb\x77\x17\xbd\xc1\x79\xf7\xe6\x29\xa2\x84\xdc\xa3\x2d\xc2\x84\x6e\x1d\x50\xe5\x99\x14\x86\x7d\xd9\xe9\x4e\x56\xb9\x18\xd0\x0d\xc2\xd5\x03\x18\xec\x32\x71\x07\x1b\x5d\x04\xda\x0c\x28\x98\x0e\x66\x08\x6f\xb4\x80\xab\x19\x95\x90\x1c\xf1\x2c\x83\x7c\xb1\x60\x63\x75\x49\x20\x76\x51\x81\xff\xf8\x5a\x58\x8e\xa7\xf6\xc5\xb0\x84\x34\x0a\x76\x9f\x89\x94\x1a\xf7\x87\xce\xec\x02\x28\x0e\xe9\x42\xcb\xb0\x38\xc7\x5c\xb0\x62\x18\x58\x5e\x26\x17\xa4\x11\x40\xcd\x6d\xe2\x53\xa6\x03\x3a\xc1\x6b\x5d\x59\xd3\x53\x5c\x89\x3e\xbd\xf8\xe9\x1f\x86\x19\xe2\x21\xe6\x02\x05\xd3\xd2\x69\xbe\xad\x27\xdd\x93\xe2\x08\xc0\xba\xdb\x9d\xa4\x60\x88\x86\x0a\x2e\xc5\x46\xba\x8d\x40\x14\xec\xc2\x42\x7d\xcf\x31\x94\x42\x8e\x2a\xeb\x6c\x59\xa1\x5d\x6b\x0e\xe6\x6a\x8a\x95\x30\x48\x92\xe5\xda\x2a\xff\xa8\x3a\xb7\x3f\xdf\xf6\x05\xd6\xe2\x73\xb7\x90\x43\x4a\xc6\x2e\xd0\x91\x2f\x4b\xfd\x7b\x09\x25\xe6\x60\xdf\xa3\xa1\x72\xca\xa8\xd0\x58\x5f\x2b\xcb\x98\x2a\x28\x03\xc7\xc3\x58\xea\x30\xf6\xa1\x4e\x5a\xf1\xbd\x2b\xb1\x24\xe1\xd4\xda\xf1\xba\xa7\xae\xc4\x50\x95\x9e\x9a\xd2\x11\x21\x4a\xf0\x29\x29\xa7\x26\x58\x7d\x5d\x2a\x72\x01\x96\xb5\x44\x54\x0e\x1d\x5f\x8b\x96\x7a\xd8\xdc\x81\x94\xf6\x48\x4a\x6b\xdc\xeb\xf1\x2d\x41\x26\xd2\x32\xd0\x00\x72\x5c\xf8\x1a\x43\x3a\x74\x06\x41\x30\x76\x19\x6b\x6f\x9d\x02\x9b\x66\x2b\xef\xe3\xe5\xd5\x65\x27\xf6\x1d\x76\x2f\x7b\x9d\x0f\x9d\x9b\x52\xea\xdb\xc5\x55\xbb\x94\xbe\x76\xdb\xbb\xa9\x64\xc7\xbd\xbb\xba\xba\xe8\x2c\x38\x21\x3b\xbd\xee\xc7\x52\xe3\xe7\x77\x37\xed\x5e\xf7\xaa\xf4\xde\xbb\xee\x65\xfb\xe6\xd7\xf8\x97\xce\xcd\xcd\xd5\x4d\xa5\xbf\xbb\xb3\xe5\xee\xcc\xd2\x34\xea\x55\xf1\xc2\x5b\x12\xc1\xf4\xd4\x2d\x69\x8f\xea\xfb\x3d\x27\x7d\x42\x92\xf3\x26\x49\x9b\xb5\x39\x9a\x25\xab\x54\xca\x06\xdb\xe5\x83\x36\xe5\xb4\xd6\xf6\xa3\x98\x51\xf3\x01\x35\x86\x4d\x67\xbb\x55\x7c\x5c\xff\x88\x6c\x96\x6a\x0a\xfc\x65\x8d\x54\xd3\xd2\xae\xbe\x9c\x54\xd3\x9a\x2c\xd2\xc5\x54\xd3\xee\x65\xb7\xd7\x6d\x5f\x74\xff\x4f\xa5\xc5\xcf\xed\x6e\xaf\x7b\xf9\x61\xf0\xfe\xea\x66\x70\xd3\xb9\xbd\xba\xbb\x39\xeb\x2c\x0f\x28\x5f\x1c\x7d\xa1\xb4\x1d\x93\xb8\x9f\x53\xd2\x8b\xc4\x69\x74\x0b\x38\x6d\xcd\x01\x4a\x02\x55\xd1\x8c\xff\x83\x8b\xf1\x11\xd4\x24\x3c\x25\x1d\xa5\xba\x53\x3a\x66\xd7\x79\x96\x81\xd2\x8b\x3e\xb8\x33\xc5\xa8\x81\xd7\xae\x65\xda\x8d\xbe\x83\xc8\x81\xda\x69\x40\xff\xae\xc2\x27\x76\x7f\xe4\xfa\x8f\x54\xbc\x10\x95\xe0\x4c\x1c\xa1\xfe\xf2\x29\x60\xdc\xcb\x91\x2b\x56\x74\x14\x7c\x9c\xe4\xef\xb9\x34\x94\xb0\x2f\x09\x24\x51\xd4\xd3\xc9\x85\xdc\xa9\x42\xe7\xea\x72\x42\xf5\x67\x7a\x75\xde\x59\xbd\x26\x8f\x80\x6a\x83\x4d\x0a\xe4\xb9\x59\x7e\xc4\x4f\x5d\x4d\xbc\x7a\x81\xc8\x64\x7b\x08\xea\xba\x90\xe3\x7a\xf0\x22\xc8\x7a\x73\x88\x4b\x45\x2d\x17\x08\x11\x95\x63\xa2\xb9\xb8\xef\x8b\xcf\x13\x26\x88\xcc\x15\xfe\x64\xa4\x02\x1c\xac\x51\x96\xeb\x09\x83\x4a\xbc\x47\xe4\x91\x91\x29\x9d\x63\xa8\xe8\x54\xaa\x08\xce\x09\x48\xc6\x12\x27\x7c\x9d\x71\x61\xb9\xc5\x8c\x7b\x17\x42\x75\xeb\xf7\xe1\x61\xf4\x29\x44\x74\xf7\x0c\xdf\xf5\xe2\xa4\x1e\x27\x0c\x42\x44\x0a\xeb\x96\x57\xe3\x1c\xe7\x06\x68\x4b\x29\xef\xad\x66\xe6\x93\x0d\xbf\xf3\xe0\x1d\xb0\xdc\x0f\x92\xa7\x24\xcd\x67\x19\x4f\x02\xdf\x7d\x94\xaa\x31\xa3\x1a\x5d\x5d\x1b\x64\x54\x57\x1c\xb8\xcb\x26\x56\xe3\x47\x8b\xec\x1d\x4b\x72\xab\x9f\x38\xbb\x3c\xaa\x2c\x96\x6b\xa6\x8e\x8d\xe2\xe3\x31\x38\x0e\xbc\x57\xfe\xe5\xa7\x9f\x17\xe9\x6d\xbb\x3b\xa0\xe3\xf8\xb0\x4c\x8e\x79\x42\xb3\xd8\x04\x5d\xc8\xae\x21\xbf\xd5\x1f\xfb\x59\xae\xb0\xa2\xf3\xa8\xc8\x31\x6c\x8c\xdb\xf7\x65\xf4\x07\x58\xac\x6d\xf7\x22\x72\xdd\x11\x16\x2e\x76\xe5\x4e\x8a\x00\x4a\x5f\x30\xca\xdf\x70\x45\xdf\x1e\xcd\x0d\x81\xed\xa1\x40\x32\x91\x8f\x50\x6c\xd2\x6a\x23\x56\x38\xb7\x33\x15\x12\x64\x93\x80\xf0\x16\xac\xc8\x1e\x03\x6f\x14\xcc\xe5\x18\xe4\x32\xe6\x0f\x4c\xbc\x00\xb8\x80\xc2\xd2\x6e\xa7\x1e\x4e\x69\x2d\x8b\xdc\x15\xee\x2d\x38\x81\xb6\x95\x88\x97\x3b\xf5\xc6\x99\x1c\x62\xb5\xcb\x05\x20\xb8\xf8\xd6\xd9\x2c\x82\x65\xe4\xe0\xfa\xca\x77\x96\x47\x4d\x80\xfc\x09\xb9\xa4\xe0\x81\x5d\xb6\x1e\x9b\xce\x32\x6a\xf6\x8c\x94\xb7\xfb\x82\xe5\x46\x46\xf5\x45\xed\xe4\xba\xa1\xcc\xa8\x77\x95\x00\x55\x74\xd3\xda\x62\x55\xc5\x89\xf1\x2b\xdf\xc4\x9d\x6b\x9c\xe8\x1b\x01\xfd\xcd\x14\xf3\xe1\x13\x73\x66\x42\xd4\x44\xe6\x61\x9d\x20\x99\x3c\xcc\xba\x1c\x36\xe6\x03\x43\x42\xa8\x2f\x60\x40\x84\xda\xb7\xd3\x99\x14\x4c\x38\xe3\x86\x90\x7d\xe1\x1a\xf7\xb0\xa1\xa1\x0c\x59\xc9\x87\x74\xe4\x74\x10\x57\xf0\x5a\xcb\xec\xc1\xd9\x29\xa3\x8c\x7e\x80\xf5\xb2\x03\x3c\xb3\xec\xdc\x0a\x2f\x54\xa4\xc1\xa1\x00\x26\x96\x0a\x76\xa6\x62\x63\xae\x0d\x8b\xdd\x6e\xf1\xf7\x7b\xc3\x13\x2c\xc9\x3b\xcb\x96\xbe\x11\x4f\x70\x15\xe3\x1a\xd1\x64\x13\x5c\xaf\xf9\x8c\xa5\xdd\xf0\xdd\x72\x62\x28\xf9\xce\xd3\x28\xb6\xb0\x74\xc8\x91\x06\x7c\x45\x7b\x08\xa4\xd5\x21\x17\x3f\x6c\x52\x28\x6c\xe7\xb1\xbe\x60\x8b\xc6\x34\xa7\x8a\x0a\xc3\x98\xee\x0b\x8c\x32\xc6\x14\x88\x52\xcc\xd3\xa8\x84\x20\x59\xc8\x52\x89\xd4\x06\x03\x2c\xe1\x93\x11\xe5\x59\xae\x1a\x45\x04\x24\xcb\xad\xa2\x39\x96\x2d\xd3\x19\x34\x4b\xea\x76\x2d\xb8\x86\xa3\x63\x14\x82\x92\x7c\xf1\x2d\x5f\x20\xac\xec\x39\x6d\x82\x02\x76\xca\xde\xfa\x1b\x1e\xf4\xc3\x06\x6f\xf1\x5f\xf4\x60\x26\x37\x60\x79\xae\xe6\x47\x3d\xf7\xa1\xfa\x1e\xe2\x78\x56\x09\x3e\xab\xad\x19\x7f\xfa\x69\x35\xc4\x6c\x23\xdb\x01\x82\x9b\x50\x91\x42\xfd\x4e\x6a\x22\xdb\x05\x12\x8a\x23\x5f\x00\xee\x33\x9e\xaf\x35\x3b\x3a\xc0\x6e\x38\x48\x16\x9c\x4e\x2b\x96\xaa\xea\xad\x5a\xe1\xbc\x28\xf5\x52\xf6\x21\xd5\xd9\x2e\x8b\x58\x5e\x87\x20\x19\xce\x5a\x33\xf1\x8c\xf8\x78\xff\x59\x75\xeb\x62\x6a\x16\xf5\x5a\x17\x99\x5c\xe2\x0e\x91\xbb\x7a\x02\x8a\xe6\x8e\xc7\x08\x6c\xce\x96\x0f\xc5\xb9\x8b\x7d\xe1\x20\x66\xe1\x45\xc4\x29\xc6\xf0\x5c\x4d\x7e\x0c\x8e\xc8\x1f\xff\xdd\x07\x67\xce\xc9\x08\xd6\x1a\x22\xa0\x65\x92\xe4\x0a\x20\x3d\x7d\x65\x5f\x86\xd7\xca\x26\x29\xe6\x6d\xbc\x4c\x35\x30\x17\x08\xf4\x6c\xae\x52\xe9\x94\xa2\xd2\xa4\x7a\x20\x0b\x23\x58\x6e\xb8\xc6\x1c\x1c\x8d\xd2\x86\x68\xc3\x66\xb5\xfc\xa4\x24\x2f\x95\x6f\x82\x9d\xb2\x08\xeb\x60\x6d\x57\x67\x2b\x7f\xa4\xb3\x65\x88\xa3\x3b\xb7\xb8\x6a\x1b\x42\xf8\x58\xf5\x9a\x03\xb4\x4d\x40\x59\x71\x48\xa1\x8b\xab\x17\x32\xae\x9f\x25\x4a\x7a\x13\xfc\xf3\x90\x78\xef\x2a\x07\x2c\xe3\x6d\xe5\x4f\x37\x8f\x19\x2a\xc2\x83\xf1\x35\x07\xe8\x3d\xc4\x6c\xf9\x38\xc1\x7f\x1b\x00\x86\xea\xc6\xf8\xb6\x96\x6c\xc7\x8e\xc9\xc7\x05\x5e\xc4\x33\xe6\x1e\x7f\x5a\x58\xa2\x4d\x53\x8f\x1f\x62\xac\x05\x90\xbd\x8a\xd8\x8e\xb5\x34\xd2\x90\x72\xfc\xa9\x0c\x98\x51\x5a\x62\xc9\xd7\x42\x16\x59\xac\x30\x0c\x37\x54\xca\x84\x34\x8c\x50\x22\x78\x76\x22\xf2\x2c\x3b\xb9\x94\xc2\x32\x66\xcd\xc7\x18\x8f\x02\x16\x49\x2c\xcf\xf3\xff\xb1\x77\x6d\x3d\x6e\xdb\xd8\xff\xbd\x9f\x42\xe8\x4b\x12\x40\xe3\x02\xff\x3f\xf6\xa5\x6f\xb3\x49\x8a\x4e\x91\x4d\x67\x33\x4d\xbb\x40\x55\x78\x68\x89\xb6\xb5\xa5\x49\x97\x92\x66\xea\x02\xfb\xdd\x17\x3c\xe7\xf0\xa6\x9b\x25\xdb\x93\x64\xdb\x3c\x14\x05\x26\x96\x78\x11\x79\xee\xe7\xf7\xf3\x34\x2f\x51\x28\x3a\xb8\x02\x20\x9c\xcd\x94\x30\x4a\x5e\x1b\x89\x69\x3e\x81\x38\x64\xd2\x3c\x81\x7a\x04\xd9\x31\x4a\x57\xba\x8e\xa3\x59\xb8\x52\x1a\x0b\xfa\x38\x0f\xe1\xcb\x7b\x0e\xd8\x18\xc2\xe7\x59\x35\xe3\x9f\x79\xb0\x3f\x19\x1e\x6c\xa5\x6d\x64\x77\x06\x23\xf6\xf0\xa5\x3a\x99\x92\xda\x39\x3a\xce\x6c\x9d\x70\x1e\x3f\x66\xba\xed\x29\xf1\x5e\x3d\xb8\x2b\xfd\x6d\x2e\x82\xab\xdd\xa9\x4b\x64\x1d\x7e\xc3\x86\xee\xa5\x5a\x5b\x1e\xeb\xd3\x9b\xd0\x27\x86\x7d\xc3\x2e\x9a\xb0\xf5\xbc\x7b\x48\x86\xfc\x5e\x25\x97\xe4\x19\x4f\x9b\x6c\x7b\xc3\xbe\x97\xdf\xe0\xe3\xb7\x4a\x94\xf9\x78\xac\xdc\xaa\x26\x60\x13\xe8\x64\x4a\x80\x77\x83\x5b\xd2\x3c\x9a\x14\x06\x81\x6b\x9e\xd7\x3e\xf4\xd3\x5d\xdc\x9c\x50\xa2\x75\x17\xdc\x5b\x00\xe5\xc8\xd3\xa1\x18\xb5\x02\xc5\xc4\xd0\x47\x85\x86\x34\x00\xf3\xb3\x3d\xe4\x66\xc8\xbf\x88\x26\x02\xb2\xe9\x71\xab\x04\x4f\x31\xb6\x04\x81\xe8\x4c\xee\xb9\xce\x95\x71\xd2\x92\x42\x3d\x52\xf1\x5d\x29\x0a\xdf\xad\xfc\x1c\xf2\x62\x10\xbd\x7e\x41\x90\x2c\xdc\xc5\xfe\x1c\x29\xc6\xf1\x63\x6b\x61\x19\xcf\x85\xfb\xb8\x54\xa0\x7b\xec\x14\xfc\x44\xb9\x32\xdc\x0a\x02\xb1\x6f\x05\x71\xcc\xa6\x47\xf3\x99\xf7\x85\xb9\xeb\x43\x05\x05\x83\x0c\x2a\x75\xeb\xbb\x52\x57\x44\x7b\x2b\xa1\xc0\x1e\xf1\x78\x30\xc0\x6c\x1c\x44\xc8\x67\x32\x34\x43\x7c\xb9\x2b\x7d\xd4\x4c\xfa\xb8\xd5\xb3\x2a\x34\x49\x7a\xbf\x33\xd6\x8f\x97\x80\x76\x96\xf3\x34\x79\x16\x2d\xf4\x19\x14\x60\x4b\x05\xe3\x51\x80\x22\xda\x1a\x38\xae\x69\x52\xd6\x99\x2c\x2b\x3c\x99\x9a\x0b\xfe\xc0\x64\x4c\xce\x4a\xb1\x70\xea\x93\x77\xcb\x86\x6c\x2c\xa3\x92\xef\xc2\xa1\x79\x42\xa9\x93\x0e\x0b\x79\x19\x14\x8c\x01\xb3\x41\x23\xa1\x0d\x95\xff\x8e\xfc\x11\xc6\xd1\x7d\xe0\x5a\x97\x45\x61\x86\xf3\xc4\x26\x04\x18\x06\xcc\xc5\x07\xd5\x20\xdd\x53\x41\x04\xaa\xb6\x31\xd1\x55\x55\x95\x68\x8c\xae\x54\xbd\x8d\x3e\x04\x21\x0a\xe1\x4d\xe2\xc6\xc5\xae\x81\x0f\x0b\xf6\x55\x72\x56\x6f\x93\xb2\x4e\xa1\x1c\xce\x0a\x8e\x4c\xb2\x82\x00\x19\xe9\x75\xa5\x23\xac\x1d\xfe\xce\xf4\xef\x2b\xf5\x30\x66\xd3\x9d\x9b\x6c\xc1\x5b\xbd\x17\x4c\x2e\x51\xa0\x7e\x84\x74\x4b\x00\xf6\x34\x14\xc7\x6a\x56\x4b\xc7\xb3\x70\x91\x79\x3a\x4b\xe7\x5d\x04\xc1\x66\x4c\x38\x3b\x50\xda\x66\xa7\xb7\x96\x39\xb4\x25\xdb\xbc\x40\x29\x8c\xb0\xa0\x28\xd9\x74\x29\xe0\x53\x46\xac\x15\x20\xb6\xa7\xf5\x58\xce\xc8\x9e\x80\x4f\x35\x6f\x34\xe5\xcb\xb7\x74\x48\xfb\xb3\xcf\x4f\x59\x74\x0c\xa6\x93\xd2\x16\x47\xa6\xf5\xb4\xa9\x8b\xc1\x10\x42\x37\x85\xf1\x93\xe3\xa5\x72\x31\x65\x2c\x41\xe0\x49\xa5\x8c\x5f\x63\x23\x1c\xfd\x60\x5e\xad\x7a\xc1\x27\xad\x6a\x8e\x21\xff\x27\x77\x5e\x22\x41\x56\x72\x23\x1d\xab\x71\x9a\x64\x5f\xe2\xc9\xaa\xb2\x2f\x11\xcd\xdc\x62\xc2\x59\xf6\x2d\xba\x3f\x45\xc4\xb1\xe8\x22\xed\x98\x7b\xf7\x17\x8e\x58\xa1\x66\x45\xf3\x3e\x26\xed\x55\xd0\x96\x8a\xe5\x39\x2b\x7c\x01\xa9\x49\xf4\x39\x0f\x96\x13\x0b\x70\x4b\x75\x93\xd7\x7e\xc1\x8e\x42\xe8\xef\xf6\x41\xb3\x45\xfb\x86\x34\xaa\xa3\xec\x51\x3a\x93\xf6\x6d\x9e\xc9\xf3\x5a\x88\xce\xab\xba\xec\x59\xc1\x59\x85\x18\xb5\x05\x8c\x00\x20\x12\x5f\x6d\xde\x96\x03\x10\xf3\x5e\x71\x8f\x66\xb9\x48\x3c\x7f\x1b\x98\x1e\x2d\xa2\xa8\x90\x27\x4a\x08\x4b\x92\x84\x56\x5b\xc0\x8c\x53\x35\x50\xc6\xbd\x6e\x8c\x38\x0a\x6a\xdd\x33\x09\x9c\x61\xeb\xd2\x5c\x12\xbb\x2f\x99\xfc\x87\xa2\x9a\x79\x30\xaf\xec\x22\x6d\x1d\x3c\x6d\xdb\x33\x87\x9b\x41\x7f\x78\x05\x6a\x7b\x8d\x79\xe6\x16\x92\x2a\xd4\x87\x40\x15\x5b\x6a\x6c\x0f\xed\x17\x95\x33\x99\xc9\x7f\x9b\xed\xb1\x44\x58\xf4\x59\xd5\x1a\x2f\xb1\x45\x9e\x4d\x9e\xdf\xe3\x4b\x9f\xff\xed\xc5\xfd\x0b\xa4\x19\x6c\x2a\xc0\x2a\x4a\x63\x15\xe2\xda\x9e\x1a\x21\xa0\x86\xd2\xae\x60\xad\xd5\x0e\xbb\x34\xdd\x10\xa3\xbc\x18\xe4\xe5\xcc\xa4\x0b\x3a\x4a\x14\xe4\x23\xaf\xd7\x49\xce\xea\x7c\x7b\x65\xad\xb9\x90\x1c\x2c\xa0\x24\x07\xcb\xd1\xd8\x5a\xfd\x9d\x3f\xc6\x03\xd3\x3b\x87\x05\x1a\x9d\x17\xb3\x04\xa2\x9a\xe7\x6d\x10\x54\x3b\x12\x1c\x4e\x0f\xc3\xe9\x2d\x3d\xf7\x73\x0b\x44\x12\x50\xab\x63\x88\x58\xb2\x1d\x2f\x92\x0c\x1b\xf7\xb3\x2f\xed\xe7\xcf\xe4\x7e\xb5\x10\x87\x75\xbd\x80\x26\x86\x85\xd9\x96\x05\x74\xeb\x1f\xd1\x74\xcb\xa2\xeb\x2a\x1d\xd9\xee\x41\x67\xab\xdf\xde\x71\xbb\xe3\x46\x9a\x6e\xb4\x60\x88\xc7\xed\xcf\x5d\x9c\x03\x8a\x3b\xc7\x80\x4e\x89\xc8\x9f\x8c\x91\x1b\x18\x56\xfe\x7e\x22\xd9\x46\x52\xd5\xac\x2e\x73\x44\xdd\x92\x4c\x1c\x00\x0e\x28\xcd\x64\x51\x6a\x74\xad\x59\x7e\xc8\x45\x99\x13\x91\x53\x6c\x0b\xf1\x07\x2e\xeb\xd7\xbf\xd7\x5c\x4b\x26\x6c\x19\xef\x8d\x5c\xab\x73\x0c\x22\x4e\xef\x3b\x0f\xc1\xf8\x26\xb6\x78\xa0\xe5\x18\xdf\xeb\x03\x8c\x96\x8d\x1f\xbc\x6a\x5b\x70\xe0\x8e\x78\x4a\xf8\x1f\x0c\x3a\x12\xfe\xd9\xac\x94\xe0\xc9\x6f\x0d\xd7\x87\xe4\xe6\x55\xa2\x34\xf4\x4e\xd6\x8a\xfe\x54\x16\xb3\xc0\x3a\x91\x7f\x94\x52\x81\x8e\xed\xb4\x65\x0f\x75\x66\x5c\x79\x78\x62\xa5\x1d\x9f\x65\x10\xec\x8c\x57\xd0\xf7\xb5\xa2\x16\x03\x80\x5c\xfb\x50\xc6\xeb\x50\x73\x43\xff\x5d\x79\x3f\x60\xb8\x3a\x8a\xc4\x38\xc6\xd9\xbe\xd4\xb4\x4f\xfa\x54\x4e\x1b\xec\xbe\xb4\xd1\x07\xa5\xcb\x4d\x29\x59\xad\x74\xf2\xfc\xd6\xb6\x2c\xbd\x70\x6d\xb6\xb0\x8b\xfd\xd3\x68\x45\x57\xe7\x6c\x11\x46\x66\xfb\x4d\x23\xc8\x26\xf3\x62\xd9\xad\x29\x9f\x0b\x19\x7a\xb4\x5a\xc2\xfc\xaa\xaa\xd9\x6e\x1f\x42\x06\x3a\x20\x2b\xda\x19\x81\x9b\x90\xd8\x89\x81\x13\x5e\x56\xbe\x78\x2d\x93\x14\xba\xc2\xef\xa6\x74\x0f\x16\x76\x7b\x95\x20\xe6\x97\x27\x56\xec\x13\xfb\xe4\xf1\xa7\x47\xc3\xfb\xef\xde\xd8\x88\x9e\x57\xdb\x91\x1e\x84\x85\x72\x99\x83\x54\x85\xca\xe4\x6d\x54\x1c\x9d\x49\x5f\x98\xfc\x52\xa8\xa6\x48\x48\xf6\x50\xaa\x40\x2f\x92\x92\x2f\xd2\xa4\xfa\xff\xaf\xbf\xfa\x6a\xb1\x18\xd8\x89\xb9\xd8\x34\xee\x7e\xc3\x73\xfd\x27\x1c\xfe\xad\xb7\xf0\xff\xc8\xd5\x8a\x48\x17\x97\xf3\xfc\x44\x8b\xec\x03\xa7\x25\x8c\xa3\xc4\x65\xad\xed\x21\x1d\x11\xe5\x39\xc3\xd9\xfa\xd8\xf1\xa1\xf6\x4c\x73\x59\x2f\x61\xc4\x79\x83\xc1\x20\xb7\xf0\x78\xd4\xd0\x34\xc9\x1f\xfe\xf9\x07\x85\x61\x0e\x5b\xd5\xfc\x4b\x40\x19\x4b\x28\x81\x46\xb6\x3f\x2f\x21\xeb\x18\x84\x84\x8f\x71\x64\xd2\x82\x4e\xd8\xbd\x60\x41\x91\x60\x9a\xb4\x20\x3f\x7b\x6c\xf0\x77\x7c\xa8\xae\xb0\xd3\x08\x0a\xfb\x37\xaf\xb2\xb0\x68\xd7\x27\x27\x12\x56\x27\x48\x1e\xfd\x07\xd7\xca\x77\xab\x12\xf2\x78\xf0\xe2\x91\x0a\xff\xc3\xf2\x74\x28\x1d\x84\xc8\x43\x10\x97\x10\xc5\x00\xfe\x42\x85\xe3\x68\x54\xad\x0e\xb6\xd2\x7f\x18\x7c\x78\x79\x02\x37\x83\x9b\x4a\x60\xd3\x04\xd2\xd3\xfa\x7d\x4e\x14\xdb\x0b\xfa\x15\x98\x6c\xc6\xfc\x36\xb6\x06\xdb\x53\x86\x9f\xe8\xec\xdb\x31\xac\x05\x2c\xe2\xe7\x7f\xfd\xb2\x18\x42\xc8\x82\xa9\x9f\xcc\xc0\xf5\x8d\xa5\x23\xd4\x9c\x15\x9e\xe1\x21\x24\x70\x38\x86\x7e\x75\xf4\x40\x9e\x61\xc9\x9c\xf3\x5d\xba\xb6\x8a\xc3\xb5\xf0\x47\xbc\x2c\x42\x78\x53\x77\xc0\xe9\xf3\x38\x80\x7f\xb5\x4e\xc0\x63\x19\xb0\x96\x16\x34\xcf\x9e\x11\x66\xec\x5e\xbf\x7c\xfa\x40\x76\xe0\x50\x0f\xef\x94\xe9\x5b\x1f\xe3\x56\x29\x71\xae\x9f\xc1\x84\x45\x8c\x59\x42\x83\xfe\x39\x76\x02\x1e\x00\xe7\x58\xdc\xbc\x72\x31\x2f\xd7\x14\x0b\x72\x3a\x80\xc7\x81\x84\x0c\x4d\x01\xd2\x20\x48\x0f\x35\x5c\xa6\x50\xed\x7b\xc2\x9e\x33\xcb\x2d\xe0\x1d\x98\x2f\x71\xd8\xb3\x1d\xc7\x27\x28\x11\x65\x7e\x8e\xd0\x38\xd4\x9a\xe1\x2c\x2f\x07\xdb\xe9\x5b\x43\x39\x8f\x27\x6c\x30\x74\xfb\x18\x8c\x6d\xf7\x13\x41\x7c\x8c\xcb\x44\x0a\x24\x93\x81\xb2\xc0\xce\x1d\x5b\xcf\xe2\x76\xad\xcf\x11\x8a\x8e\xe1\xd9\x8e\xd0\x39\x5d\xe4\xa3\x6e\xec\xab\x10\xac\x01\xa2\xb1\xb9\xda\xad\x8c\x33\x82\x20\x4b\x94\x0e\x01\x2d\x77\x6d\x3b\x0a\x5d\x3b\x94\xd5\x56\x88\xcf\xd6\xda\x7b\x57\x4b\x12\xf6\x3b\x85\x22\xab\x37\x8b\x3e\x60\x5a\x5c\xb6\xe1\xbd\x5f\xce\x5e\xb7\x57\x00\x38\xe4\x8f\xec\x50\x01\xb2\x85\xf1\x8a\xd7\x6b\x4f\xdc\x13\x5a\xe9\xce\x4f\x73\x0d\x60\x04\x13\xd5\x10\xe0\x0d\xad\xa5\x24\xee\x36\x61\x31\x3c\x7c\xa7\xc8\xb3\xaa\x7f\x73\x9e\xba\x3b\xbf\x7f\x2f\xe0\xfd\xae\x87\x94\x60\x82\xa3\xfa\xe7\x14\x3d\x8b\xff\xf3\x65\xeb\x3c\x57\xd2\xf5\x9d\x5e\xc4\x61\xed\xe9\xdc\xef\x9f\x2e\xfc\x5b\x07\x5f\xf8\x98\xf7\x7c\xa6\x13\x1f\xa8\x49\xad\x72\xc2\x4b\xae\x13\x00\xbc\x42\x71\x6c\xc6\x4e\x93\x1d\x2b\x25\x5d\x83\x5a\x1b\x01\x59\xf0\x55\xb3\xd9\x0c\xfa\x96\x42\x6d\x9e\x34\x2d\x61\xfb\xdc\x83\xdf\x0f\x94\xc4\x8b\xb1\xde\xed\x23\x27\xf4\x4f\x14\x44\x18\xed\x75\xba\x44\x18\xe0\xc6\x8e\x84\xa1\xe7\x75\x29\xf8\x87\xf1\xfc\x2f\x14\xc6\xb8\x99\x12\xc6\xb0\xb9\x0b\xa8\x9f\xc4\x75\xb8\xe8\xf2\x5f\x28\xbe\x81\x3d\x25\xcb\x32\x36\x2f\x47\xa6\x74\x62\xd3\x97\x6b\x53\x85\xcb\x4a\x88\x49\x15\x97\x45\x05\x78\xe0\x97\xef\x02\x03\xd9\x7e\x7e\x8b\xd5\x11\x3c\xfc\x3b\xb5\xe3\x09\x0c\x55\x21\xf2\x48\x42\x05\xa0\x29\xe4\x3a\xcd\x02\x3d\x48\x1d\x5c\x78\x4a\xe6\xe5\x5b\x26\x37\xbc\xf0\x26\xe1\x73\xc9\x1f\x13\x23\x6b\xd3\x30\xf9\x13\x7c\x9e\x34\xe1\x75\xfe\x82\x20\x4f\x7d\xad\x88\xe6\xb9\xd2\x05\xb4\xfe\x6f\x98\x2e\xa0\x42\x89\x0e\xbc\x60\xf9\xaf\x40\xba\x05\xea\x08\x47\xa4\x04\x95\xed\x8e\xc7\xa4\xa9\x7f\x5b\x29\x73\x84\x9f\x74\x3c\xd8\x76\x7e\xf8\x78\x95\xb0\x5c\xab\x8a\x58\x79\x89\x6b\x89\x48\x7e\x02\x9e\x13\x18\x71\x30\x44\xc1\xaa\xb3\xba\xfd\xaf\xa5\xaf\x37\xe0\xbf\xef\x05\x93\xf1\x89\xc7\xe5\xd6\x9a\x01\x0c\xea\xa0\x3d\xe7\xfa\xf0\x3e\x68\x2b\x70\x08\x63\xe8\xaf\x15\xda\x76\x9a\xb3\xe2\x10\x76\x2b\x95\x92\xb0\xc9\x58\xb1\x2b\xa5\xf9\xf4\x46\xbb\x20\xef\x0d\x49\xaf\x02\xd9\xd3\x05\xa6\x69\x01\x7a\xc6\xc8\xad\x48\x23\x56\x89\xe4\xc6\x20\x60\xba\x14\x07\xb0\x01\xf7\x9a\x5f\x05\xe3\x04\xf7\x9b\xea\xc4\xca\x2a\x93\x38\x77\x60\xcd\x5b\x37\x02\x2d\x45\xf0\xa5\xdc\x02\xe8\x1e\xbe\xbf\x49\x8d\x92\xa8\x09\xf0\x21\x18\x18\xce\xec\x45\x6a\x6e\xba\x5e\xcc\xa4\xc0\x9c\xef\xa2\xd3\x50\x10\xb0\x55\x8f\xb6\x30\xf0\x91\xf9\xbc\xef\x1c\x37\xef\x96\x64\x97\x75\xe1\x82\x2c\x31\x28\xf4\x08\x74\xff\x1b\xa5\x09\x94\x01\x84\xc3\x2d\x61\xfb\x7f\x5b\x3e\xf0\x34\xb9\xdb\x33\xfd\x6b\x9a\xbc\x3a\x48\xb6\x2b\xf3\xef\xd4\xea\xa8\xe7\x76\x89\xe8\x85\x33\x30\x66\x47\xb7\x7a\xe3\x00\x69\xd0\xb3\x1f\xc4\xb8\xba\x7e\xb6\x4d\xe0\x99\x13\x43\x68\x9c\x43\x0a\xd2\xe6\x44\x75\x0f\x95\x50\x72\x49\xfb\x73\x38\xa5\x3b\x68\x8d\xb6\x25\x80\x97\xd5\x54\x35\xdb\x97\xc8\x34\x32\x12\x8a\x7d\xcd\xc2\xaf\x40\xeb\x29\x9d\xec\x05\xab\xcd\x59\xb1\x7c\x39\x78\x2a\x30\xf7\x8a\xd2\xbe\x55\x0b\xdd\xd9\xd4\x41\x11\x8b\x03\x2f\xf7\x4a\x89\x5e\xdd\x7e\xd1\x0d\xec\xc4\xa9\xa6\x6e\xde\x0d\xd6\x90\x55\xa1\xc6\xb3\xbb\xe8\x63\x1e\x3e\x42\x12\x60\x1a\xc3\x69\x2a\x1a\x8d\x1c\x1f\x76\x3b\x16\x3e\xc0\xc8\x8c\xf1\x8d\x19\x6f\x54\x72\x2b\x9e\x33\xe8\x72\xb5\xd6\x07\xf2\x0f\x21\x6f\xb9\xd3\xd1\x3d\xd1\x98\xaa\x3b\xce\x80\xc9\x01\xef\x5d\x96\x7d\x4d\x4f\x73\x2f\xd7\x0f\xdb\xde\x10\x2b\xce\xdc\x86\x87\x6c\xd5\xd1\xb1\xa6\x66\x5b\x64\xbd\xcc\x05\xab\x26\x56\x7c\xf4\xca\x9d\x1b\x7a\xd1\x4b\x78\xcf\x74\x99\xf9\x2d\x44\xc3\x76\x13\x85\x71\x26\xaf\x5d\x53\xaf\x57\xe3\xce\xf4\x40\x31\x8b\x46\x57\xe7\xd3\x60\x29\x93\xef\x00\x4f\x93\xaa\xc9\xb7\x50\xac\x15\xcb\xa9\x50\x6e\x75\x6f\x6c\x9a\x49\xa3\x08\x11\xc1\x8b\x41\x46\xe4\xd1\xa8\xbb\xaa\xfc\x83\x3b\x4d\x8b\x26\x51\xa4\x5c\x57\xcc\x7c\x1a\x82\xe1\x6e\x1b\x22\xb6\x6e\x8e\xe9\x5f\x79\x11\x04\x69\x9a\xbd\x71\x2e\x17\x99\xdb\x66\x3c\xbf\x9e\x38\x8a\x2c\x9b\x2a\x5c\x58\x68\x88\xb5\x24\xad\x28\xd7\x3c\x3f\xe4\x9d\x1e\xd0\x28\x0f\x79\xb9\x68\xe0\x69\xc1\xb0\xb1\x5e\xc1\x7e\x1f\xe7\xa7\x4e\xbf\x4b\x32\x94\xbc\xf9\xdf\x2c\x88\x18\x68\x57\xfb\xb3\xc7\x33\x8e\x14\x41\x7f\xae\x6d\xb8\xa8\xef\xff\x45\xf8\x7f\x2b\x19\x6c\xe9\x00\xf8\x19\x64\x8f\xf6\x16\x2c\x7c\x5a\xa5\xff\x65\x11\x9e\xc8\x7a\xcb\x7b\x3a\x00\xa6\x1d\x32\x6a\xb0\x28\x5c\xf3\xc7\x1c\xec\x18\x7c\xd4\xee\xd7\x4b\xa1\xaa\x46\x8f\x5f\xab\x77\xf1\xac\xed\xe8\x7e\x35\x11\xa6\x0f\xdf\xad\x38\xf4\xf5\x14\xf8\x65\x7a\x17\x73\x4c\x05\x1b\x4f\xa4\xfd\x3c\xa5\xf2\x1f\x79\x92\xb3\x3d\xd4\x57\xf6\x23\x1d\x76\x9e\x0b\x3c\x57\xd0\x69\x1b\x1e\xea\xd7\x96\xda\x89\x0e\x57\x94\x03\xf9\xa4\x8a\xf1\x7a\xbd\x9b\x56\xef\x71\x14\xe4\x98\x94\x35\xba\x44\x44\xf6\x96\xd5\x5b\x74\xbf\x01\xf5\x1b\x33\x88\xb5\x31\x4d\x10\x87\x16\xc3\xb4\x2b\xa1\x56\x00\x5e\x5a\x2b\x3d\xc8\xe6\x9f\xd3\xe1\x9c\xb4\x75\xdd\x0f\x36\xe5\x6c\x9b\xfb\x00\xb5\xd4\x9a\x57\xd0\x54\xd7\xcd\x83\x74\xca\x1a\x2f\x12\x22\xe8\x4e\xd7\x88\xad\x57\x9d\x10\x41\x17\x62\xc7\xc8\x4b\xa8\xc4\x79\x3d\x22\x30\x87\x2e\xd6\xeb\xb0\x1a\x99\x01\x17\x4b\x0d\x64\x97\x98\x68\xac\x4a\xb9\x11\xbc\xb5\x5e\x8b\x0e\x9d\xc9\x6b\xfc\x97\x90\xa0\xd8\xa3\xc0\xb9\x62\x17\x02\x02\x75\xf7\x0f\xcb\x93\x93\x6b\xdb\x6e\x08\x6d\x6d\x8c\x12\x61\xce\x97\x81\xc0\x43\x6a\x19\x8f\xb5\xb1\x54\x2b\x50\xc4\x55\xb3\xba\xf2\xcd\x67\x4a\x83\xea\x86\xde\xc4\x3d\xd3\x80\xb2\xbc\x2d\x45\x71\xd5\xd3\x60\x8c\xd1\x43\x0f\x09\x65\xf1\x09\x98\x20\xf1\x05\x1e\x17\xf6\x3e\xb8\xb5\xbb\xf7\x18\xc3\x99\xb3\x7c\xeb\xea\xee\x51\x5c\x8f\xc9\x8b\xc8\x0d\xf9\xd8\x45\x1b\x13\xaa\x22\x06\x40\x1e\xff\xfc\x72\x22\xda\xb3\x29\x72\xe2\x87\xd8\x69\xb1\xb7\xc6\xb8\x5d\x24\x39\x86\xb6\xaa\x5a\x62\x6a\xfa\x03\x34\x67\xfb\x98\x4b\xb5\x67\x8f\x92\x5a\xbe\x66\x15\xbf\x4f\x93\x0f\xfd\xe8\xf1\x46\x3e\x74\xca\x55\x42\x2a\x73\xf4\xec\xeb\xd2\x41\x66\xa6\x01\x36\x30\x13\x22\xc4\x69\xf2\x41\x96\x4c\x7a\x57\xdc\xa8\x7f\x21\xcc\xff\xf3\xb6\xe0\xa6\x16\xbf\x02\xda\x26\x78\x6a\xfb\x93\xa8\xb7\x9f\x82\xff\x57\xe8\xf2\x0e\x72\xd3\x77\x6e\xf3\xa5\xec\xc9\x9c\xe5\x5b\xbe\x34\x53\x6b\x66\x34\xb1\x10\xd1\xfa\x4b\xf3\xf0\x1d\x3e\x3b\xaa\xcc\xd0\x2e\x42\x33\x0d\xc7\x82\xa2\x35\x96\x43\x2f\xb6\x8b\x75\x1e\xbb\xde\x39\x0e\xbb\xec\xe1\x9d\x3b\x3a\xd7\xfe\x40\x77\x40\x49\x07\x97\xd9\x76\xc8\xe4\x4c\x6b\x5b\x88\x4a\xa3\x26\x4c\xd7\xe5\x9a\xe5\x51\x6c\x7a\x12\x3a\x4b\xa4\x21\xf1\x8d\x15\xa4\x4c\x3d\x95\xb7\x15\xe5\x2c\x71\x90\xbc\xc3\xdf\xff\xd2\x3e\x05\xf7\x42\xfa\x32\x91\x87\xd9\x9b\xc2\x92\xa8\x41\xbe\x77\xe9\x01\xb3\xeb\x19\x6b\x3d\xb1\x35\x60\x1e\x7e\x5a\x40\xb7\x3a\x5d\xc2\x75\x30\x50\x89\x6a\x14\xc9\x19\xa9\xcb\xb8\x6e\xb7\xc5\xc1\x16\x62\x09\xf1\x03\x2f\x7c\xcb\x60\x80\x1b\x61\x54\x14\xdb\xf0\x64\xc7\x8b\xb2\x69\xc3\xf3\x45\xe5\xee\x9f\x7d\xd6\xbf\x9e\xcf\x0a\xc9\xf5\xa7\x74\x58\xfb\x1b\x29\x3e\xab\xac\x4f\x40\x65\x05\xf3\xa4\x6f\x3d\xf3\x16\x4c\x96\x1e\xe3\xf9\x2b\xaf\x14\xbd\xa5\xe8\x72\x76\xac\x7b\x0e\xc3\x50\x4b\x1d\xee\x81\x31\xd0\xfb\xae\xc6\xf0\xc1\x7c\x32\x5d\x7a\xb1\x30\xfe\x14\x65\x6a\xae\xb8\x0b\xec\xbf\xb5\x57\x1b\x18\xd1\x6a\x35\x76\xc5\x03\x1c\x13\x56\x3f\xab\xdc\xae\xc7\x57\xd9\x56\x2b\xbd\x29\xab\xfa\x47\x26\x9a\xb3\xc0\x4b\xa0\x67\xe1\xc9\x72\xd1\x76\xaa\x38\xcd\xe0\x89\xd1\x14\xea\xbb\x38\xc9\x69\xf4\x2a\x9e\x39\x68\x72\xb6\x90\xa0\x66\xde\x73\x04\xef\xbd\xdb\xaf\x7b\xb4\xed\x1e\x35\xdb\xef\xb9\xb6\x99\xbb\x4e\x72\x15\xf0\x35\x61\x94\x4c\x62\x8c\xe0\xbb\xbb\xef\xdf\xb6\x75\x83\x91\x3d\xad\x57\xc3\xcf\x60\xeb\x16\xfd\x5f\xee\x6d\x23\xc4\xe0\x97\x9b\x40\x2b\xf7\xfe\xcd\x9b\xe5\x8f\xd7\x6f\xde\xbf\x1e\x85\xc6\x0b\x7e\x36\xb8\x27\x6e\x26\xb4\x27\xe8\xb9\xd5\xe0\xad\x35\x3b\xae\x6d\xdb\x80\x5f\x35\x1a\xc8\x8d\x10\x31\x44\x62\x26\xef\xe9\x3d\x50\x62\xd3\x48\x8c\xac\x64\x32\x19\xdd\xb8\x78\x7c\xf8\xd9\xbd\x79\xf9\x3d\x3e\x7b\x95\xf8\x45\x7c\x9d\xbc\x75\xa3\x0e\xec\x2b\xd5\xef\x9d\x71\x1d\x10\xa9\x71\xe8\x3a\x5c\x1a\x04\xf6\xb4\xeb\xf1\x5e\x5a\x4a\x7d\xc2\x6e\xbd\xc8\xed\xc0\xbd\xbb\x8f\xa3\x76\x4e\x96\x17\x68\xda\xc2\x7b\x53\x84\xee\x44\xf6\x6f\x87\x6e\x99\x49\xa2\x85\x64\xd0\x65\x37\x38\xa7\xe4\x86\xf2\xd9\x82\xc9\x4d\xc3\x36\xbc\x4a\x13\x3b\x78\x26\x77\xe5\x66\x0b\x58\x27\x9e\x4f\x1d\xbb\x01\x58\x5d\x3e\xf0\xd6\x11\xc2\x52\x24\xea\xef\x4f\x93\x52\x66\x92\xd6\x24\x37\xfe\xf5\x58\xa5\xf4\xdd\x9d\x5b\x8e\x39\x69\xee\x45\x84\x3e\x2a\x33\x69\x19\xef\x01\x62\x8e\xc2\x19\x60\xf8\x01\x87\x75\x74\x74\x99\xe6\x16\xf0\x18\x64\xfa\x06\x02\x2b\x99\x74\x25\xf1\xf0\x61\x23\x36\x1a\xac\x5d\xc4\x29\x1d\x97\x27\xf6\x63\xd8\x3b\x41\x73\xeb\x3f\xf5\x67\xeb\x00\x73\xe1\x96\x0f\xad\xb7\x4c\x38\xb6\x5e\x8c\x4d\xb4\xb1\x59\x20\x38\x86\xfa\xa4\xa0\x0f\xa2\x7f\x36\x76\x5d\xf8\x9b\xc1\x24\xb0\x6a\x56\x62\xc6\x94\xf0\xf7\xa3\x93\x42\x91\x3c\x3e\xa9\x09\xb1\xcc\x77\xad\xab\x65\x8e\xe9\xd8\xb0\x2b\xa5\x06\xbe\xcb\x05\xa3\x82\xd1\xa4\xe8\x81\x63\x9b\xd1\xe4\xf5\x29\xe7\x65\x42\x79\x75\x7b\x8b\xac\xf4\x19\x9b\x90\x28\xab\x93\xa6\xe3\xed\xa7\xc9\x33\x72\x16\x02\x29\xbb\x59\x12\x96\xf4\x5c\x24\x60\x07\xc4\x24\xc5\xa2\x28\x13\xc1\x4b\x14\x2f\x12\x78\x1f\x19\xf5\x0a\xa5\xee\x10\xa5\xfe\xcb\xa5\x30\xc9\xbc\xd1\x95\x11\x97\x24\xef\x48\x6a\x2b\x9d\xb0\x4c\x5a\xfc\x2b\x2b\x8e\xaf\x2d\x22\x89\x76\x7f\xc5\x92\xf5\x3d\xa2\xc7\x80\xc5\x5a\x27\x4a\x72\x2b\x0d\x33\x09\x20\xe3\x12\xa2\xa6\xab\x0a\xe0\xff\x08\x4a\x9b\xfe\x21\xe0\xfd\x62\x12\x49\x22\x8f\xcb\xbc\x96\x19\x10\xe9\xf9\x2f\xcc\x7f\xff\xf9\xe2\xbf\x01\x00\x00\xff\xff\xba\x6a\x66\x03\x1c\xa6\x03\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7d\x73\x23\xb9\x91\x27\xfc\xbf\x3f\x05\xae\x7d\x11\x33\x6d\x4b\xd4\xcc\x78\xd7\xe1\xd5\xc6\xc5\xf3\xb0\x25\x76\x0f\x6f\xd4\x92\x2c\x51\xd3\x3b\xb7\x74\xf0\xc0\x2a\x90\x84\x55\x04\x38\x00\x4a\x6a\xda\xe1\xef\x7e\x81\x4c\x00\x85\x2a\x56\xf1\x5d\x6a\xa9\x87\xbb\x11\x9e\x16\xab\x0a\xaf\x89\x44\xbe\xfe\xf2\x9f\xbf\x23\xe4\x8d\x7e\xa4\xe3\x31\x53\x6f\x4e\xc9\x9b\x1f\x5a\xdf\xbd\x39\xb2\xbf\x71\x31\x92\x6f\x4e\x89\x7d\x4e\xc8\x1b\xc3\x4d\xc6\xec\xf3\x51\x36\x37\x8c\xa7\xd9\x89\x66\xea\x81\x27\xec\x84\xa6\x53\x2e\x5a\x33\x25\x8d\x84\x0f\x09\x79\xf3\xc0\x94\xe6\x52\xd8\xd7\xdd\x3f\x89\x90\x86\x68\x66\xde\xfc\x8e\x90\x7f\x41\xf3\x3a\x99\xb0\x29\xd3\x6f\x4e\xc9\x7f\xe3\x47\x13\x63\x66\xbe\x01\xfb\x6f\x6d\xdf\xfd\x1b\xbc\x9b\x48\xa1\xf3\xd2\xcb\x74\x36\xcb\x78\x42\x0d\x97\xe2\xe4\xef\x5a\x8a\xe2\xdd\x99\x92\x69\x9e\xac\xf9\x2e\x35\x13\x5d\xcc\xf1\x84\xce\xf8\xc9\xc3\xf7\x27\x34\x31\xfc\x81\x0d\x32\x9a\x8b\x64\x32\x98\x65\x54\xe8\x93\x7f\xf2\xd4\xce\xf1\xef\x2c\x31\xff\x82\x3f\x52\x39\xa5\x5c\xe0\xbf\x05\x9d\xb2\x7f\x85\x76\x08\x79\x33\x66\x26\xfa\x93\x90\x37\x29\xd3\x89\xe2\x33\xe3\x56\xe5\x86\x19\xc5\xd9\x03\x23\x66\xc2\x08\x76\x47\xb0\x3b\x62\xbb\x23\x7e\xd5\xf4\x8c\x25\x7c\xc4\x59\x4a\x86\x73\xc2\xc5\x2c\x37\x44\xb1\x5f\x73\xa6\x0d\x19\xf1\xcc\x30\xa5\x5b\x6e\xc9\xa0\x17\x39\x63\x0a\xe6\xd9\x4d\x6d\x2f\x1f\x98\x69\x43\xdb\x17\xd0\xf4\x75\x46\x45\xfc\xb6\x62\x7a\x26\x85\x66\xba\x34\x54\x42\xde\xfc\xf0\xdd\x77\x95\x9f\x16\x67\xd0\x26\x3a\x4f\x12\xa6\xf5\x28\xcf\x88\x6f\x29\x1e\x0c\x7c\x04\x9b\x4c\x17\x1a\x23\xe4\xcd\xff\x54\x6c\x64\xdb\xf9\xfd\x49\xca\x46\x5c\x70\xdb\xae\x46\x5a\x8a\x46\x5b\xfa\xea\x5f\xbf\xab\xfb\xf7\xbf\xa2\x19\xcd\xa8\xa2\x53\x66\x97\x25\xec\x3e\xfe\x5f\x65\x2e\x76\xbf\x6c\xe7\xc5\x9e\x56\x07\x5e\x99\xed\x25\x9d\x32\x22\x47\xb0\x5d\xee\x0b\xf8\xb7\x62\x5a\xe6\x2a\x61\x64\xc8\x32\x29\xc6\x9a\x18\xb9\xb0\x06\x1c\x5a\xb0\xa4\x56\x7d\x62\xb7\x92\x2b\x66\xf7\xca\xa8\x9c\x55\x9e\x9a\xf9\x0c\x06\xa9\x8d\xe2\x62\x1c\x2f\xc5\xbf\x8e\xd6\x9a\x1a\x52\xe8\x06\x33\xc3\x0f\x1a\x27\xd6\x17\x6d\xff\x4a\x42\x05\x19\x32\x62\xcf\x25\x4f\x99\x62\x29\xa1\x9a\x50\xa2\xf3\xa1\x66\x86\x3c\x72\x33\xe1\xc2\xfe\x8d\xe4\x9b\xf8\x35\x7b\x39\x6b\x03\xff\x5c\xbe\x32\x77\x9a\x29\x3b\xf0\x07\x9e\xb2\x94\x3c\xd0\x2c\x67\x64\x24\x55\x69\x79\x5a\x7d\xd1\x9b\xd8\x75\x98\x0e\xb9\x80\x93\x67\xd7\xd2\x53\xc8\x1f\xfd\x72\xfd\x91\xd8\xfe\x48\x2e\xf8\xaf\x39\xcb\xe6\x84\xa7\x4c\x18\x7b\xae\x75\xb5\xb5\x3f\x4a\xe8\x9f\x66\xe4\x98\xd8\x75\x66\xca\xc0\x7a\x4b\x61\xd8\x67\xa3\xc9\x31\xc9\xf8\x3d\x23\xdf\x5c\x70\x6d\x48\xfb\xba\xfb\xcd\x11\xf9\xe6\xa2\x60\x1c\xfa\x9b\x67\x58\xe1\xf0\xef\xbf\x45\x47\xcf\xd0\x71\xf5\xd0\xbd\x69\xdb\xd3\x7c\x8b\xd7\x44\xd1\xc2\xdf\x7e\x17\xb7\xe3\xf6\x6b\x39\xef\x2d\x18\xaf\xe3\xba\x9b\xf0\xda\xf7\xcc\x24\x93\x15\x8c\x56\xef\xc8\x69\xed\x76\x54\x59\xad\x7e\x5d\xbc\xd6\x4e\xe1\xa9\xf9\xed\x2e\xcc\x96\x1a\x38\x05\x94\x0b\x3c\x34\xe1\x0c\x95\x77\x86\x7c\x39\xb6\xb2\x0b\xbf\x8d\x66\x13\xb1\x5c\xcf\x49\xa3\x95\x78\x21\x73\xcd\xf8\x94\xaf\xda\xc7\xae\x48\xad\xd8\xe5\x98\x9c\xc8\xa7\x43\xa6\xec\xd4\x3d\xbb\x83\x19\x0e\x2d\xfb\x33\xb9\x12\x2c\x6d\x98\xda\xaf\x39\x53\xf3\x25\x73\x1b\xd1\x4c\x37\x4d\x8e\x0b\xc3\xac\x5c\x5b\x79\x3c\x92\x6a\x4a\x8d\x7b\xe1\xcf\xff\xb6\xe9\xe4\x8d\xbc\x67\xab\xf6\xb9\x8b\xbb\x96\x50\x0d\xdb\x3d\xcd\x33\xc3\x67\x19\x23\x33\x3a\x66\xda\xad\x42\x9e\x19\x7d\x04\xaf\x59\x59\x9a\xa9\xe3\x70\xdb\x40\x0f\xfe\x96\xcd\x35\xfc\x42\x46\x81\x91\x09\xf6\xd9\x40\x4b\x7d\x01\xf7\x2c\x2c\x51\x7c\x7b\x3c\xc1\x52\x6e\x47\x27\x5a\x2a\x33\x18\xce\x5b\xf7\x6c\xa1\xdf\x46\x6a\xa1\x82\x50\x63\x14\x1f\xe6\x86\xd9\x79\xdb\x36\xfc\x3d\x09\xac\x0f\x2f\x63\x6d\x2f\xdf\xab\xf3\xab\x6f\xef\xa9\x51\x72\x4c\xc5\xdb\x53\xd2\x4e\x53\x82\x03\xb5\xef\xf0\x14\xaf\xe4\x09\x53\xac\x45\x7a\x13\xae\x89\x9e\xc8\x3c\x4b\x89\x60\x0f\x4c\xd9\xb5\x65\xd3\x99\x99\xbf\xb8\xd5\x4a\xb9\x62\x09\x2c\xcc\x26\x27\x2c\x7c\x65\x17\xcd\x2a\x3d\x73\x5c\xba\x7b\x36\x07\xc1\x65\x71\xf9\x9e\x81\x5e\x2a\x4f\x99\xc8\xa7\x95\xbb\x02\x7e\x3f\xef\xdc\x9e\x75\x2e\xcf\xbb\x97\x1f\x2a\x5f\x58\x31\x22\x3c\x2a\x3d\xf9\xdb\xc2\xda\x8c\x68\x9e\xc1\xa9\x8e\x5a\x7b\x36\xc1\x25\x99\xf0\x2c\x55\x4c\x9c\x18\xaa\xef\x07\xec\x33\x4b\x72\xbc\x67\xff\x59\xfe\x61\x60\xa5\x4f\x99\xb2\xf2\x2f\xa5\x3f\x0a\x71\x67\xe3\x4f\x83\x56\xba\xf1\x97\xa0\xc3\xae\xf7\x1d\xfc\xc2\xd3\xda\xb7\xe1\x97\x15\x73\xf0\xef\x2c\x19\xac\x7f\xa5\x71\x54\xfe\x05\x27\xc0\xd5\xbe\xa3\x98\x51\xf3\x01\x35\xc6\x9e\xf2\x2d\x64\x46\xd8\x52\x62\x67\x4b\x8a\xfd\x74\xe2\x23\x0a\x8a\xc0\xbb\x83\xe4\x68\x47\x50\xbc\xb9\x4a\x5e\xbc\x94\x29\xeb\x84\x66\xdf\x4b\xd5\xa3\xfa\xfe\x35\xc8\x8c\xa5\x81\x3f\x87\xd8\xb8\xed\x01\xfa\xea\x94\xfa\x2d\xd9\xc1\xc1\x04\xb0\xfb\x4a\xae\x6b\x30\x90\x8a\xe8\xb9\x36\x6c\xba\xd2\x74\xf0\x7a\x16\xc2\xf1\xfb\x97\x3a\xe0\xca\x95\xf3\x1b\x38\xf5\xe5\x0b\xf4\x70\xbc\x37\x58\xb2\x7d\x19\xfe\x5e\xfa\x3c\xbd\x0b\x66\xf9\x54\x6f\xfd\xf6\x79\x87\x83\xa3\x93\x17\x3f\xcd\x92\x68\xb7\xef\x41\x3e\x91\xd5\xa0\x71\xaf\xfc\x6a\x0f\x60\x00\x2b\x54\xbe\xb2\xe9\x38\x9c\x3f\xfb\x69\x6c\x5c\x41\x8b\x99\xb1\x3a\xaf\xb3\x2d\x31\x45\x12\xa9\x50\x14\x4c\xdd\x71\xef\x0b\x72\x4c\xce\xdb\xbd\xf6\x6d\xa7\x77\x4a\xda\x24\xa5\x86\xda\xf3\xad\xd8\x4c\x31\xcd\x84\x01\x6d\xdc\x7e\x6e\xe6\x64\x2a\x53\x96\xb1\x94\x70\x41\xde\x67\x73\xc3\xc8\x39\x35\xf4\x8c\x1a\x9a\xc9\x71\x8b\xb4\xe1\x4f\xfb\x31\xd7\x84\x66\x5a\x12\xea\xa9\x8a\xa5\xbe\x09\x2a\x52\xcf\x59\x28\x49\xe4\x74\xc6\xb3\x60\x35\x0f\x26\x12\x2e\x52\xfe\xc0\xd3\x9c\x66\x44\x0e\x2d\x53\xb1\xaa\x6a\xe7\x81\x09\x93\xd3\x2c\x9b\x13\x9a\x65\xc4\x75\xeb\x5f\xf0\x7a\xfd\x90\x85\x51\x6a\x3e\xe5\x19\x55\x56\x17\xc6\xd1\x5e\xb9\xb6\x48\x6f\xc2\xc2\x58\x61\x5c\x76\x31\xa7\xf4\x9e\x69\xc2\x0d\x99\x49\xad\xf9\x30\x2b\x8e\xfc\x5d\x97\xc0\xb8\xcf\x2e\xba\xa0\x58\x27\x86\x48\x64\xa1\xbe\x73\x67\x85\xf1\x3d\x4e\xa9\x10\x0c\x3a\x96\x66\xc2\x94\xeb\xde\xbd\xfc\xa5\x15\xed\xbb\xcb\xdb\xeb\xce\x59\xf7\x7d\xb7\x73\xbe\xa8\x69\xf7\xda\xb7\x3f\x2d\xfe\xfa\xe9\xea\xe6\xa7\xf7\x17\x57\x9f\x16\x9f\x5c\xb4\xef\x2e\xcf\x7e\x1c\x5c\x5f\xb4\x2f\x17\x1f\x3a\xb2\x5a\x5b\x69\x8f\x47\xb6\xe1\xd1\x3a\x58\x23\xf7\x69\x8d\x3c\xfa\x7a\xcd\x91\xce\x95\xb3\xbe\x29\x92\x64\x5c\x1b\xbb\x40\xee\x4b\x32\xa3\x5a\xa3\x30\x84\x23\x68\xf5\xc5\x47\xa9\x2c\xd3\x1a\x49\xcb\x17\xac\xc0\x64\x54\x9e\x18\x2e\xc6\xe1\xa3\x53\xd2\xcf\xbf\xfb\xee\x4f\xc9\x05\x17\xf7\xf0\x2f\xf6\x12\x17\xe7\x60\xab\xdd\x66\xb5\x0e\xb6\xda\xf8\xd9\xeb\xb0\xd5\x5a\x31\xe7\x24\x36\xd1\x3e\x4d\x70\x0f\xba\x91\xad\xec\x20\x73\x63\xff\x69\xfb\x25\x23\x25\xa7\x20\x55\x7d\xe6\x1a\xb8\xc4\xa3\x54\xf7\xa3\x4c\x3e\xae\x67\x3a\xfc\xc0\x4c\x30\xbe\x59\x29\xe6\x35\x58\x0c\x3f\xb9\x19\x86\x81\x7f\x60\xc6\x8e\xfd\xc6\xf5\x72\x88\xf3\x39\xc4\xf9\x7c\xd9\x38\x9f\x17\x65\xb6\x7b\x7a\xde\x57\xb6\xf1\x21\x03\x6c\x70\x41\x35\x7a\x98\x1a\x1c\x48\x91\x7f\xe8\x29\x99\x66\xd9\x2b\xb3\x82\x61\x96\x3c\x16\xaf\x85\x69\x96\x06\xfd\xfc\x0c\xf3\x37\xe1\x50\x39\xf8\x4b\xb6\x5c\xa8\x57\xc9\x57\xd7\xbc\x32\x9e\xcd\xdb\xf1\xf4\x7c\x7e\x21\x16\x61\x93\xe0\x83\x0d\xa2\x0d\xd6\x0e\x2f\x58\x11\x4f\x50\x1b\x40\x50\x17\x31\xb0\x18\x22\x50\x1b\x13\xb0\x53\x10\xc0\xa6\x57\xd2\xfa\xee\xff\x0f\xcc\xf4\xa8\xbe\x7f\x75\x57\x52\x69\xd0\xcf\x7f\x25\xfd\x46\xbd\xfe\x07\x37\xff\x13\x2e\xdd\xd7\x7e\x91\xbd\x5c\x47\xfe\x6f\xc0\x73\x7f\x70\xd5\x6f\xb4\x46\x5f\x97\x6f\xfe\x6b\x75\xc6\xbf\x4e\xef\xfb\xc1\xdd\x7e\x70\xb7\x1f\xdc\xed\x6b\xb8\xdb\x9f\x54\x29\x65\x96\xac\x34\x98\x1f\x63\xdd\xe6\xcd\x4c\xea\xe5\xba\xd8\x99\x62\xd4\x58\x2a\x2e\xdb\xfd\x08\x34\x48\x14\x4b\xa4\x4a\xad\x0e\x46\xc9\x6c\x42\x35\x23\x46\x51\xa1\xf9\x2a\x3d\x0c\x5b\x05\x43\x9b\x6d\xe7\x35\xa8\x60\x25\xab\x20\x8c\xfa\xb9\x14\xb0\xa1\x4c\x17\xce\x0c\x1e\xa7\xba\x27\xcb\x79\xfd\xde\xa6\x0e\x19\x9a\xeb\xcc\xfc\x09\xa9\xd9\xde\x2b\x5b\x52\x73\xd9\x64\xb0\x17\x6a\x06\x1d\xfd\xb5\x50\x73\xc9\xa0\xf0\xdb\xa2\xe6\xba\xa9\xbf\x04\x6a\xf6\xde\xe8\x2d\x29\x7a\xd1\x99\xbd\x17\xaa\x0e\x1e\xe4\xd7\x42\xd9\x0b\x2e\xef\xdf\x16\x75\x37\x4d\xff\xcb\x52\x78\x30\x84\xef\x8b\xb6\x57\x13\x6e\x58\x80\xd7\x40\xb4\x61\xb0\x38\xf6\xdf\x0c\xb5\x2e\xcc\xfb\x85\x90\xe9\x89\x62\x98\x6d\xb8\x11\xbd\xde\xb8\x8f\x36\xa6\x58\xff\xe1\x81\x66\x5f\x13\xcd\xfa\x5d\x7b\x39\x54\xdb\x14\x4e\xb7\x79\x06\xee\x92\x18\x39\x4d\xa6\xd4\x24\x13\xfb\x10\xfd\x73\x6b\xc2\xb4\x14\x29\xb7\xaf\x8a\xba\x9f\x23\xcf\xf6\xeb\xb6\xc4\x1f\x2c\xf0\xbf\x41\x38\xac\x17\x13\x2e\x7e\x48\x51\xd9\x63\x8a\x0a\xd7\x87\x14\x95\x43\x8a\xca\xba\x0b\x74\x48\x51\x39\xa4\xa8\x44\xcf\x5e\x47\x8a\xca\xd3\x67\xa7\xec\x27\x05\xe5\x55\x09\xd1\x07\x01\xfa\x20\x40\x1f\xf2\x4c\xc2\xd4\xf6\xc5\xc0\xfc\xd7\x6f\x52\x96\x31\xc3\x96\xb2\x9f\x1e\x53\x53\xab\x1b\x94\xa0\xaf\x6b\x9c\x06\x05\xaa\x56\xa0\x20\x30\x6f\x2c\xe3\x4b\xa1\xed\xd7\xc9\x9d\xc2\xf0\x0f\x69\x71\x07\x76\x75\x60\x57\xdb\x4c\xed\xe5\x58\x65\xa3\xc3\xfc\x45\xcd\xb2\x11\x90\xf6\x80\xa7\xfb\xc1\xd2\x0e\x62\x63\x8c\xa4\x5d\x2c\x45\x09\xcc\x78\x3b\x23\x6d\x01\x4b\xdd\x4d\x5f\x85\x9d\xd6\xf2\x91\xb4\x03\x51\x77\x21\x64\x50\x1d\x20\xb5\x0f\x90\xda\xeb\xcf\xf5\x60\x21\xdc\xa3\x85\xf0\x00\xa9\x7d\xb0\x81\x1d\x6c\x60\x4f\x6f\x03\xfb\x52\x06\xed\x67\x3e\x96\xcf\x25\xa2\x6d\x17\x98\x24\x52\xa2\xd8\x98\x6b\xc3\x94\x5d\xbd\x5a\xa1\x6c\x75\xa4\xd2\x6b\x2d\x12\xb5\x76\xdc\x47\xdc\xed\x9b\x7f\x5b\x63\xf8\x37\xee\x16\x85\xa3\x3e\xa4\x69\xa8\x08\x03\xa2\xd3\x94\xce\xc9\x84\x3e\x30\x32\xa2\x3c\x43\xc5\xc8\x71\xc7\x25\x33\x5c\x36\xa0\xff\xd8\x6c\x40\xb4\x3c\x1c\xc5\x46\x4c\x31\x91\x20\xb7\x47\xe1\x27\xa1\x99\x4f\x05\x81\x77\x26\x56\x4d\xcd\x14\xa3\xe9\x9c\x0c\x19\x13\x81\x6c\x6a\x24\x85\x86\x31\xef\x45\x68\xfd\xe2\x6a\xda\x22\xf5\xbc\x14\x25\xed\x49\xa2\x67\xea\x59\xc2\xee\xca\x99\xfe\xe1\x75\xb1\x8a\x43\x10\xcd\xc1\xa8\xf6\xe5\x8d\x6a\x87\x20\x9a\x83\x8a\xfc\x02\x54\xe4\x43\x10\xcd\x21\x88\xe6\x60\x40\x58\x7b\xb5\x0e\x06\x84\xf8\xd9\xeb\x08\xa2\x79\xc2\x0a\xce\xcf\x25\x61\x1f\x04\x6c\xff\xde\x41\xc0\x3e\x08\xd8\x5f\xa9\x80\xfd\x32\x56\xf8\x20\x5d\x1f\xa4\xeb\x83\x74\x7d\x90\xae\x0f\xd2\xf5\x41\xba\x76\x5f\xed\x53\xba\x86\x7f\x79\x68\xd6\x9d\x23\xd6\x37\xf7\x72\x7d\x60\xe6\xb5\xba\xb8\x0e\x22\xf5\x41\xa4\x7e\xd9\x22\xf5\x8b\x99\xd0\xd7\x07\xb5\x78\x00\x2b\x3c\x80\x15\x1e\xc0\x0a\x9f\x16\xac\xd0\x7f\xfd\x66\x96\x2f\x97\x45\xee\x66\xa9\xcf\x5d\xd1\x86\x9a\x1c\xd4\xbe\x35\xe4\x12\xd2\x36\x64\x2a\xad\x12\x24\x58\xe9\x1d\xcf\x80\x30\xa2\x63\xcc\x1f\x98\x20\x3e\x46\xfb\xc8\x5d\x33\x47\x60\x89\xf8\x57\x38\x1d\x98\x34\x43\x0d\xa1\xc4\xf0\x29\x6b\x91\xee\x08\x4f\x73\x62\xc9\x5f\x33\xa3\x2b\x61\x40\x48\x9a\xf0\x91\x48\x8b\xb1\xfa\xbe\x79\x11\x15\x82\xaf\x1d\x79\x66\x98\x67\x06\x59\xa3\x6f\xfc\x91\x67\x99\x1d\x83\xe3\x20\x70\x12\xa6\x4c\x65\xfe\xcb\x52\xb7\xfe\xe5\x29\x4d\xed\xc9\x8d\x86\x50\x64\xf7\xc4\xef\xc3\x9d\xcb\x75\x88\x6b\x29\x7d\x8f\x5f\xb7\x88\x53\xc2\x11\x54\x6c\xad\x61\x4c\x68\x6a\x4f\x60\x32\x61\x69\x9e\x31\x42\xb5\x96\x09\xa7\xc6\x72\x2b\xbc\xa3\x09\x37\x5e\x65\xf7\x2f\xf9\xae\x53\xae\xe9\x30\x63\xa9\x5b\x63\x56\x84\xd9\x2c\x1d\x39\xd7\x64\xc8\xec\x12\x5b\x3e\x52\x5e\xfd\x09\x4a\x08\x35\xa3\x89\x86\xc2\x16\x47\xc2\x04\x0e\x64\x89\x84\x8b\xc4\xf9\x5a\x85\x5c\x1c\xfd\x21\xf7\xe9\x20\xf2\x1e\x44\xde\x8d\x26\xf4\x55\x89\xbc\x2f\x28\x34\xd0\x33\xa4\x2f\x1a\x1a\x08\x0e\x44\xcb\xf9\x07\xc1\x42\xa8\xb7\x33\x9e\x04\x23\xec\x47\xdf\x64\x3b\xb4\x78\x26\xc5\x88\x8f\x73\xe5\x04\x6e\x27\x0d\xaf\xf0\x52\xd6\xb4\xf3\x2a\x6e\x9c\xfa\xa1\x3f\xd7\xc5\xb3\x89\x42\x47\x8e\x89\x15\xbb\x07\x37\x9d\xdb\xab\xbb\x9b\xb3\xce\x29\x69\xcf\x66\x19\x47\x2f\x4b\x92\x6b\x23\xa7\xfc\x1f\x76\x1a\x08\x24\x1c\x38\xb7\x13\x43\x34\x08\x1c\xe0\xd6\xb1\x6a\x12\x39\x26\x67\x17\x77\xb7\xbd\xce\x4d\x43\x83\x8e\x08\xa0\x96\x11\x9b\xce\x32\x90\x4a\xee\xf3\x21\x53\x82\x19\xa6\x49\x92\xe5\x10\x63\x1e\x9c\x3d\xd8\x68\xe7\xbf\x3a\x67\x77\xbd\xee\xd5\xe5\xe0\xaf\x77\x9d\xbb\xce\x29\xf1\xd4\x64\x9b\xb5\xe3\xb2\xa3\x48\xe7\x82\x4e\xad\x2e\x5a\x46\x3c\xfe\x35\x67\x39\x08\x41\x7c\x2c\xa6\x4c\x98\x6a\x8b\x7e\xc0\x17\xed\x77\x9d\x8b\x72\xcb\x13\x46\x7e\xfa\x4b\x31\xa8\x8c\x0e\x59\xe6\xbc\x4f\xe0\x5c\xb1\x0c\xbb\xe8\xc8\xb9\xa5\x72\x54\x6b\xff\x7a\xd7\xbe\xe8\xf6\x7e\x19\x5c\xbd\x1f\xdc\x76\x6e\x7e\xee\x9e\x75\x06\x4e\xc1\x38\x6b\xdb\x7e\x4b\x3d\x39\x3d\x84\xfc\x9a\xd3\xcc\x2a\xaa\x72\x04\xae\x1d\x9e\x30\xf2\x38\x61\x82\xe4\x02\x68\x0c\xb5\x5f\xd0\x05\xe2\x24\x76\x9c\xd1\xf5\xc5\xdd\x87\xee\xe5\xe0\xea\xe7\xce\xcd\x4d\xf7\xbc\x73\x4a\x6e\x59\x06\xfa\xa1\x5f\x74\xd8\xc5\x59\x96\x8f\xb9\x20\x7c\x3a\xcb\x98\x5d\x0d\x3c\x8e\x43\x36\xa1\x0f\x5c\xaa\x92\x8e\x00\xeb\x68\x49\x08\xdb\xf7\x7a\xd8\x20\x5a\xba\xab\xcb\xf7\xdd\x0f\xe0\x21\x08\x73\xd0\xd0\x46\x89\x72\x7c\xee\xfd\xf1\x42\xee\x7d\x42\x31\x86\x01\x0a\x5f\x3d\x30\xa5\x78\xca\x9a\x12\x03\x9f\x4f\x49\x2d\x1d\x88\x45\xcd\xb2\x4a\xe1\x8b\x6f\x54\xc8\x75\xd9\x0b\x25\xea\x5b\x7c\x71\x15\x15\x2d\x7e\x51\x21\x83\x66\x7d\x7a\x61\x1f\xd7\x56\x95\xcb\xeb\xf3\x6c\xf7\x94\x65\x6f\xe9\xc0\x9b\x4c\x4e\xfe\x59\x62\x73\xff\x7a\x32\x0c\x1b\x12\x25\xde\xba\x7b\x6b\x55\x2d\xd0\xe2\x83\xd7\x70\x5b\xc5\xc3\xfd\x92\x37\xd3\x9e\xa4\xc1\x57\x62\x89\xda\x5c\x08\x3f\x28\x93\x07\x65\xb2\x7e\x65\x0e\x21\x49\x0d\x2b\xbc\xaf\xfb\x68\x1b\xe3\xed\x88\xb3\x2c\xd5\x0b\xd6\xb7\xd2\x7d\xb2\xd2\xd2\xf6\x7a\xaf\x92\xe7\xb5\xb5\x6d\xa2\xf2\xdc\x04\x1f\x95\x73\x5a\xd9\xdd\x9a\x32\x43\xa1\xe6\xaa\x91\x24\x87\xa1\x1f\xae\x27\xf7\x7f\x87\xeb\xe9\x70\x3d\x1d\xae\xa7\xdf\xaa\xb1\xb2\x86\xa5\x7f\x51\x6b\xe5\x2a\x2d\x70\x27\xf0\xa9\x1a\x53\xe6\xa2\xf6\xa7\x89\x9e\x50\x85\x65\x86\x12\x39\x9d\x4a\x11\x85\x3d\xcc\x67\xec\x88\x04\xe7\x2a\x98\xa5\x60\x18\xab\x2c\x9d\x45\x37\xfc\x75\xd8\x38\xa3\x75\x79\x8e\x94\x8c\x83\xe6\xe8\xff\x6f\xd3\xab\xf9\x00\xdf\x75\x80\xef\x3a\x64\x4f\x1c\xe0\xbb\x96\x53\xcb\x21\x3f\xe0\x90\x1f\x10\x3f\x3b\xc0\x77\xbd\x20\xf8\x2e\x21\x53\x36\xa8\xc0\xf5\x87\x3f\x07\x55\xbf\x47\xe9\x49\xec\x04\x29\x3d\x28\x12\x26\xa0\x75\x9e\xee\x9e\x30\x51\x2e\x9c\xbc\xca\x49\x12\x97\xda\x7d\xe1\x02\xef\x28\x9b\x1b\xc6\xd3\x6c\xb1\x46\xf0\x33\xc4\x90\xd5\x6d\xf4\xd7\x68\x64\xa9\x21\xdb\x83\xc5\x65\xe5\x42\x7d\xad\x30\xdb\x05\x5f\x7a\x45\x6e\x82\xf5\x98\xb7\x0f\x87\x18\x34\xb0\xf0\xfa\xe7\x81\x91\xd7\x3f\xde\x15\x5d\xa2\xcc\xbb\xb7\x45\x95\x28\xf1\xc6\xd7\x61\xc6\x88\x47\xfc\x1c\x86\x8c\xa5\xbb\xff\xd5\xf1\xf5\x65\xb4\x7c\xe0\xee\x6b\x2e\xd7\xd7\xca\xe3\x0f\xf6\x8c\x7d\xda\x33\x8e\xbe\x5e\x83\xc6\x01\x0d\x62\xc9\xe2\x1c\xac\x3d\xdb\xac\xd6\xc1\xda\x13\x3f\x7b\x4e\x6b\x0f\xfa\x6e\x07\x33\xaa\x98\x30\x35\xf2\x7d\xf5\x66\x83\xd7\x23\x5b\x7d\x10\x80\xa0\x01\x14\x5c\x9d\x6c\x10\x6e\xcd\xaf\xcb\xfc\xe3\x64\x94\x01\x8a\x38\x51\x96\xc6\xc9\x3f\x8b\x7f\x47\x0a\x44\xf4\x63\x8d\x0f\x74\x83\x10\x26\x1f\xc5\xcd\xd2\x42\xec\x2a\x1a\xaf\x09\x6d\x72\x63\x38\xf6\xc2\x58\xe1\xcd\x5f\x19\xe9\x74\x8d\x9f\x9e\xc3\x97\xaf\x2b\xdd\xa3\x61\xe8\xcf\x1b\x01\xb5\x48\x09\xeb\x1d\x2c\xaf\x47\x70\x4c\x67\x78\x9c\x70\x10\x0f\x00\x5c\x0a\xae\xd0\x68\xc3\x7d\xa2\x28\x85\x8c\x8e\x26\x59\xeb\xb9\xc5\xc8\x05\x72\x5f\x6f\xe2\x8e\x46\x5f\xef\xbc\xbf\x78\x68\xc8\x0a\xba\xff\xa2\x61\x22\x4b\x78\xe6\x7e\x22\x44\x9e\x8f\x3f\x7e\x60\xe6\xeb\x63\x8e\x1f\x98\x79\x2e\xce\xb8\x2d\x3b\x5c\xca\x12\x8a\x5a\x18\x2f\x84\x1b\x6c\xc7\xfa\x5e\xd7\x1c\x0f\x89\x8d\x87\xc4\xc6\x43\x62\xe3\xf6\x2a\xe0\x21\xb1\xf1\x4b\x27\x36\xfa\xaf\xd7\xa9\x63\x7d\x0e\xaf\x3c\xa3\xa0\x81\x1d\x7e\x7d\xb2\x06\xce\xeb\x20\x6e\x1c\xc4\x8d\xcd\xe6\xf8\x52\x15\x2c\x4f\xcf\x2f\x41\xc1\xda\x08\x29\x04\x7d\xce\x45\x45\x38\x4f\xfe\x2b\xfd\xca\xd7\xbe\xb3\xd7\xc3\x84\xf4\x53\xf3\x99\x5d\xbc\x67\x7e\xdd\x0f\xce\xb3\x03\x94\xfa\xc1\x79\x76\x70\x9e\x1d\x9c\x67\xee\xe9\x57\x01\xa5\x1e\x94\x8c\x95\xe5\x7d\x6f\x8a\x9a\xbe\x35\x81\x30\xd5\x9b\xd8\xbf\x7d\xbd\x20\xe1\xbe\xf4\xcb\xd8\x8f\xfc\xb9\x74\x80\x97\x22\x39\x16\xf3\x7e\x11\xb2\xe2\xc9\x3f\x2b\x61\xe6\x0b\xbe\x48\x9d\x4f\xa7\x54\xcd\xe1\xde\x72\x41\xd7\x2d\x98\x50\xcb\xcd\x28\x82\x5a\x76\xd7\xd2\x30\x37\x51\x8c\x98\xb6\x84\x3c\x63\xca\xcc\xa3\x37\x81\x8b\xfe\x67\x5f\xf0\x02\xf0\x95\x8f\x85\x54\x68\x76\xb2\x1f\x4f\xa8\x48\x33\x7b\x0e\x74\x68\x27\xa1\x42\x48\x03\xb7\x3f\x38\x34\x52\xf2\xc0\x29\xca\x0a\xed\xeb\x6e\xe9\x9c\xd4\x7b\x50\xd7\x3a\x53\x25\xe7\xe7\x2b\x3a\x51\xcf\x0d\xa5\x7a\xd0\x08\xe3\xd5\xff\x52\x07\xd9\x50\x7d\x5f\x4d\x44\x29\xc7\x37\x0f\x96\xa6\xa6\xac\x78\xb7\x84\xd8\xb5\xfc\xd5\x4a\xfa\x4a\xf9\x99\x4b\x68\x81\xc7\x30\xe4\xea\x38\xfc\x8f\x71\x87\xfe\xb7\xa2\x65\xff\x8b\xaf\x28\x02\x3f\x2a\x66\xd4\x7c\x40\x8d\xb1\x4c\x65\xf7\x9c\x99\xb2\x4d\x7f\x45\xce\x4c\x8f\xea\xfb\x57\x99\x33\x53\x1e\xf8\x93\x33\x8b\x35\x69\xf2\xab\x8b\xb6\x5e\xf7\x84\x1d\x22\xaf\xb7\x58\xba\xaf\x35\x0a\x7b\x19\x0b\x7d\x31\x23\xac\x70\xf1\xaf\xf1\xe4\x96\xef\xa4\xc3\x11\x5d\xb6\x46\x5f\x1d\xc0\x7a\x45\xd4\x58\x31\xb7\x57\x02\xb4\x5e\x95\x96\xf6\x3d\xaa\xa7\xb1\x2d\x47\xbb\x71\xa8\x8c\x74\xa8\x8c\x74\xa8\x8c\xf4\xd4\x95\x91\xd6\xd3\x34\xd7\x56\x33\xd7\xd5\x31\xd7\x53\x30\x9b\xb5\xcb\x1d\x92\x6d\xcb\x4a\xdf\xb6\xc9\xb6\x25\xa5\xea\x55\xb8\x46\x4b\x23\x7e\x8e\x64\xdb\xdf\xa8\x1e\x78\x50\x02\x9f\x64\xdd\xbe\x56\x0d\xf0\x85\xab\x7f\x87\x34\xe1\x3d\x46\x3a\x7c\xc5\xb0\x67\x87\x40\x87\x25\x8b\x73\x08\x74\xd8\x66\xb5\x0e\x81\x0e\xf1\xb3\x17\x17\xe8\xd0\xac\x39\xf0\x74\xd7\x44\xaf\x3a\x91\xbd\x10\x68\x4b\xd8\xa1\xdb\x8b\xef\xdd\xf4\x55\xc8\xed\x11\xd6\x6f\x30\x73\xa8\xe7\x90\xdf\x0f\xd8\xb5\x07\xec\xda\x83\x10\xf7\x5b\x12\xe2\x0e\x72\xca\x36\xab\x75\x90\x53\xe2\x67\x07\xec\xda\x17\x04\x5e\x62\x05\xa7\x52\x92\xc8\xca\xa0\xd4\x33\xc5\x20\x7c\x4e\xa4\x21\x55\x84\xd0\xaa\x00\xb6\x4c\xba\xc2\x06\xac\x7c\xf5\x1a\x84\x2b\x3b\x4e\x1c\xf1\x1a\xd1\x74\x71\x87\x6f\xfe\x6d\x8d\x81\xdf\xb8\xbb\x12\x0e\xf4\x90\xa6\xa1\x7e\x3c\x08\x48\x53\x3a\x27\x13\xfa\xc0\xc8\x88\xf2\x0c\xcd\x54\x8e\x07\x2e\x99\xdb\xb2\x01\xfd\xc7\x66\x03\xa2\xe5\xe1\x14\x19\x60\x96\xa7\xa3\x88\x93\xd0\xcc\x3b\xa9\xe0\x1d\x28\x6e\x9f\x29\x46\xd3\x39\x19\x32\x26\xa2\x74\xa2\x75\xc7\xbc\x17\xd1\xf4\x8b\x87\x02\xc6\x74\xf3\x45\xa3\x7b\xe1\x84\x37\x96\xdf\xdc\x9f\xce\xb5\x8b\xa2\xa5\x7f\x78\x2d\xac\xe0\x39\xd4\xaa\xaf\xd8\xf5\x71\x70\x6f\xfc\x36\xab\x75\xbd\x18\x91\xfc\xa0\xe8\xee\x51\xd1\x3d\xe4\x65\x1e\xdc\x15\x07\x33\xc0\xda\xab\x75\x30\x03\xc4\xcf\x5e\x8f\xbb\xa2\x59\x7a\xde\xae\x78\xfd\x13\xca\xd1\x07\x31\xfa\x20\x46\x1f\xc4\xe8\xaf\x56\x8c\x7e\x19\x2b\x7c\x90\xa1\x0f\x32\xf4\x41\x86\x3e\xc8\xd0\x07\x19\xfa\x20\x43\xbb\xaf\xf6\x22\x43\xc3\xbf\x7c\x36\xf7\x7e\x52\xb7\xd7\xf3\x48\xb9\xdc\xed\xd7\x22\x3c\x1f\x04\xe7\x83\xe0\xfc\xb2\x05\xe7\x17\x33\xa1\xaf\x2f\x61\xf3\x90\xf2\x78\x48\x79\x3c\xa4\x3c\x7e\x81\x94\x47\xcf\x4a\xb6\xad\x46\xf1\xb3\xe3\x2d\xdf\x72\x91\x64\x79\x0a\x22\xca\x84\x91\x77\x39\xcf\x52\x02\x0a\x8d\xd5\x4b\xb9\x14\x6f\x81\x9e\x80\x14\x60\x9c\x1e\x92\x7d\xb9\x00\xf3\xf3\x02\xa7\x7b\xb1\x32\x4c\x31\xda\x6d\x01\xaa\xf6\xb5\xa7\xa1\xa0\xe3\x16\x45\x9b\x4a\xbf\xf9\x86\x9e\xbb\x94\xd3\x91\x17\x3d\x2c\xdb\xf1\x83\xd8\xa8\xb0\xd3\x27\xf7\xd1\xeb\x82\x12\x5f\x1c\xf5\xa1\x9c\x13\x89\x76\xed\x50\xce\xe9\x09\xe7\xed\xcf\xd9\x8a\x99\x7b\x1a\x45\xf3\xf0\x2b\x9d\xf6\x17\x8f\xa3\x6b\x3e\xe9\x5f\x34\xaa\xae\xf6\xe6\x58\xc8\x68\x2a\xca\x81\x3f\x7f\x15\xab\x5d\xae\x86\x0f\xcc\x7c\x2d\xf7\xc2\xa1\x92\xd5\xa1\xb4\xc4\xd6\x85\xbe\x37\xe2\xf0\xaf\x6b\x8a\x87\x62\x5d\x87\x62\x5d\x87\x62\x5d\xdb\x5b\x47\x0e\xc5\xba\x7e\x63\xc5\xba\x76\x91\xa7\xb0\xfb\xaf\x45\xa4\x3a\x14\xec\x3a\x48\x55\x07\xa9\xaa\x76\x8a\x2f\x50\x5d\x7e\x11\xe5\xc8\x82\xba\xbc\x2f\xe4\x8f\xd8\xd3\x1f\x98\xf1\x5e\x01\x40\xfc\x4a\x1e\x40\x40\xdc\xff\x1d\x40\x40\xd6\x99\xdc\x01\x04\xe4\x10\xd7\x79\x00\x01\x39\x44\x2e\x1e\x22\x17\x0f\x20\x20\xaf\x05\x04\xc4\x0b\x50\xfb\x00\x02\xa9\x11\xc6\x56\x83\x81\x7c\x5a\xd4\x0c\x5e\xac\xa0\xe5\xc7\x7a\x00\x05\x39\x80\x82\xec\x4a\x3b\x2f\x42\x27\x7b\x12\x70\x90\x1a\x36\xb0\xab\x22\xf6\x3a\x40\x42\xfc\x68\x0f\x19\x8e\x87\x40\xed\x97\x1f\xa8\xfd\xe2\x32\x1c\x5f\x8c\xd8\x7e\x50\x86\xf7\xa8\x0c\x1f\x92\x1c\x0f\x49\x8e\x07\x53\xc1\xda\xab\x75\x30\x15\xc4\xcf\x5e\x47\x92\xe3\x6a\x69\x7a\x2f\x60\x21\x4f\x21\x57\x1f\xc4\x6a\x7c\xef\x20\x56\x1f\xc4\xea\xaf\x54\xac\x7e\x19\x2b\x7c\x90\xa9\x0f\x32\xf5\x41\xa6\x3e\xc8\xd4\x07\x99\xfa\x20\x53\xbb\xaf\xf6\x26\x53\xef\x17\x3c\x64\x43\x2f\x56\x94\x2f\xf3\x9a\x84\xe9\x83\x20\x7d\x10\xa4\x5f\xb6\x20\xfd\x62\x26\x74\x00\x12\x39\x00\x89\x1c\x80\x44\x0e\x40\x22\xdb\x48\x35\xbf\x73\xa7\xf2\x4d\x74\x11\x87\x1b\xfb\xcd\xbb\x4c\x0e\x7b\xf3\x19\xb3\xff\x3d\xe7\x53\x26\x34\x88\x8f\xdc\xcc\x63\x29\xa6\x61\xe5\x17\xd7\xfc\xcd\x6d\xf7\xf2\xc3\x45\x9c\xd2\xf3\xe6\xe3\xdd\x45\xaf\x7b\xdd\xbe\x09\xeb\x12\x66\x15\xaf\x85\xfb\xae\x24\x88\x9d\xc9\xe9\x8c\x2a\xae\xa5\xe8\x7c\xb6\xa7\xd3\x0e\xed\x0a\x44\x1f\xa9\xb6\x1b\x5d\xe7\xaf\xf1\xc8\x2e\xcb\x7f\x7e\xe8\x95\xff\x2a\xcd\xe2\xa2\x57\xfe\xab\xb3\x74\x36\x51\xc3\x55\x76\x76\x4c\x3e\xf4\x4e\xc9\x07\x08\xc1\x50\xa4\x37\xa1\xc8\x92\x2e\x7a\xa7\xe4\x82\x69\x0d\xbf\x14\x1f\x1b\x6e\x32\x98\xdb\x3b\x2e\xa8\x9a\x13\x3f\x7d\xcc\xeb\xa3\x60\x9b\xf5\x4b\x53\x5d\x3c\xf1\xf7\x5c\x80\xf6\x50\xac\xde\x85\x1c\xf3\x84\x66\xbb\x2d\x62\xfb\x32\x3e\x48\x6f\xae\x6e\x96\x2e\x45\xfc\xf6\xe2\x5a\xb4\x2f\xcf\x21\xcb\xd0\x0f\xb5\x66\xe6\x97\x4c\x1b\x96\x5a\x69\x24\x45\xe2\x05\x7e\x36\x8f\xa4\x94\xbf\x4b\xc8\x3b\xcc\xb5\x95\x9d\xdb\x97\xe7\xe4\x84\x5c\xdd\xf4\xc5\x95\x4a\xd1\x78\xc3\xec\xf5\x8e\x5c\x97\x6b\x22\xa4\x21\x7c\x3a\x93\xca\x50\x61\xac\x64\x03\x8c\xcd\xad\x88\x26\x54\x31\x72\x26\xa7\xd3\xdc\x50\xc3\x1f\xd8\xc2\xa2\x0a\xd4\xc8\x6e\x99\xe9\xa6\x60\x0e\xae\x59\x43\xe4\x7c\xc5\x5c\x66\xca\xb6\x6f\xb9\x6e\x59\x17\xe0\xe9\x82\x6c\xee\x9b\xa0\x4a\xd1\x32\x7f\x7c\xc3\x0d\x9b\x56\xdf\x5f\x33\x6c\xef\x5f\xb5\x8a\x8e\xbd\x12\x2e\x24\x4d\xb9\x18\x63\xa2\xe7\x05\x37\x4c\xd1\xec\x23\x9d\xbd\xf7\xd6\xa6\x2d\xe8\xe3\x7f\xdf\x96\x92\xfe\xde\xfc\xd2\xfe\x18\xa7\x0d\xbe\xb9\xbe\xb9\xea\x5d\x2d\xa5\x99\x52\x0b\x8b\x44\x63\x1f\x9f\xc2\xff\x92\x13\x62\x5b\x0f\x37\xd7\x94\x19\x6a\x6f\x74\xf2\x2d\x26\xee\x84\xf0\x7e\x2e\x32\xa0\x91\x99\xe2\x53\x6e\xf7\xd5\xa9\xcc\x6f\xf1\x72\x0c\xb7\x7f\xa0\x12\xfc\x00\x93\xf0\x40\xec\x30\x54\xa4\x54\xa5\xe4\xef\xba\x9a\x1b\x0a\x66\x1e\xfc\x81\xa5\xe4\x98\x4c\x8c\x99\xe9\xd3\x93\x93\xc7\xc7\xc7\x96\x7d\xbb\x25\xd5\xf8\xc4\xfe\xe3\x98\x89\xd6\xc4\x4c\x33\xcc\x85\xb5\xab\x70\x4a\xae\x95\x34\x12\x04\x08\xa2\x99\xe2\x34\x83\xd4\xc0\x21\x9e\x76\x39\x22\xff\x37\x91\x8a\xb5\x8a\x8d\xf9\xbf\x24\x4a\xb3\x1d\xd9\x7b\x96\xa7\xd9\x89\x7d\xa9\xe6\xe8\x54\xf7\x93\xa4\x2c\xe1\xa9\x13\xa4\x98\x48\x24\xe0\x40\xa1\x65\xd1\xb6\xe7\xb3\x9d\x98\x73\xe5\x84\xe5\x8c\x84\x0d\x9a\x32\x42\x1f\x28\xcf\x30\xe3\x5a\xa2\xc9\x10\xd7\x99\x29\x2b\xb8\x74\x51\xea\xcc\xad\x84\x0d\xb1\x77\xa0\x47\xfa\x57\x67\x76\xc2\x89\xcc\xc8\x30\x1f\x59\x09\x2d\xba\x95\x8e\xac\x34\xc2\x35\x51\x2c\x91\xd3\x29\x13\x68\x54\xb4\x0d\xc1\x97\xb0\x62\x6e\xb4\xad\xbe\x80\xfd\xb7\x62\x0a\x50\x40\x2a\xe1\x60\x0b\x66\xb5\x15\x31\xc7\x6e\x86\xf9\xa8\xe4\xa9\x32\x92\x28\x46\x53\xc2\x4d\x5f\xb4\x33\xab\xd7\x4e\xa5\x61\x71\x10\x21\x98\xb5\x4b\x0b\x0e\x0c\x41\xb1\x59\x46\x13\x9f\x94\x99\xc9\x84\x66\x64\xc4\x33\xe6\x2a\xf9\x47\x0d\x7c\x0b\xaa\x96\x5d\x33\xae\x49\x2a\x1f\x45\x26\xa9\x9b\x47\xf5\xb3\xb7\x65\xde\xd2\xf1\x99\xc7\x1d\xa5\xa4\x82\xff\xf9\x89\x8b\x74\xbb\x33\x78\x77\xf9\xd3\xe5\xd5\xa7\xd2\x31\xbc\xbb\xed\xdc\xc4\x7f\xdf\xfe\x72\xdb\xeb\x7c\x5c\x7a\x0e\xab\xad\x14\x94\x05\xc3\x03\x11\xfc\x94\xdc\xe2\x22\x48\x45\xac\x52\xd5\x30\xa9\x8f\x8e\x94\x8a\x1f\x64\xca\xb6\x9b\xdb\xc7\xf6\xe5\x5d\xbb\xc4\x51\x6e\xcf\x7e\xec\x9c\xdf\x5d\x94\x04\x3c\x3f\xbf\xe8\x97\x9b\x0e\x8a\x6f\xf1\x6f\x67\x3f\x76\x2f\xce\x07\x41\xe0\x5b\xb6\x1a\x95\x7e\xab\x7c\xa9\x87\xfc\x67\x22\x53\x32\x9c\xc7\x89\x83\x45\x4a\xf9\x23\xd5\x24\x03\xc7\x08\x4b\xbd\x2e\x82\xad\x9e\x02\x1b\xf2\x39\xf6\xc5\x17\x56\xb6\x3f\x72\xef\x40\x46\x3c\xaa\x41\xd4\x94\x53\xec\xe3\x86\x6d\xef\x54\x44\x3a\x05\xe6\xc6\x87\x35\xb2\x5a\x8f\xb6\x2f\xe6\xf6\xfc\x2a\x3e\x1e\x83\x8a\x5f\x19\x2a\xb6\xe6\x3e\x85\x95\x84\xef\x70\xab\x67\x4a\xc2\x91\xb6\xdd\x3a\xdb\x50\x50\x20\xf0\x43\xc4\x97\x2b\xb5\xa8\x28\xe8\x06\x35\x43\xf3\xfb\x72\x8a\x16\xdd\x86\x69\xc1\xd1\x2b\x22\x7c\x81\x43\x69\xb4\x4c\xcc\x14\x7b\xe0\x32\x8f\x3e\x75\x40\x0f\xa5\xcd\xad\x6d\xbe\x58\x00\x58\x36\xd4\x5f\x8a\x66\xca\xd4\xdc\xbd\xba\x35\x8a\x1a\x36\x9e\x9f\xbb\x93\xbd\x3d\x15\x9f\x5f\x7d\xba\xbc\xb8\x6a\x9f\x0f\x3a\xed\x0f\xe5\x83\x19\x9e\xdc\xf6\x6e\x3a\xed\x8f\xe5\x47\x83\xcb\xab\xde\xc0\xbf\xb1\x94\x5c\x1b\x3a\x58\xbc\x4e\xcb\x2f\x9e\x12\xcb\x19\x81\x83\x79\x4c\xa8\x88\x8d\x0d\xd9\x48\x2a\x64\xc7\x53\xef\x03\x04\xc6\x4f\xc2\xca\xb2\x14\x75\xec\xf2\x2c\x4e\x41\x01\xad\x6b\x12\x6d\x4b\x46\x31\x3a\x05\x76\x4e\x05\xe9\x88\xf4\xf8\x6a\x74\x7c\x8b\x3f\x4e\xa9\xba\x67\x2a\x7c\xfa\xa8\xb8\x31\x0c\x4c\xe2\xdc\x59\xcb\x41\x41\x86\x21\xdb\xfb\x06\x62\xbc\x8b\x0e\x5a\xe4\xc6\xb2\x67\xfb\x7e\xb8\x7b\x2c\xa1\xa6\xcc\x50\x9e\x69\x37\xd8\xd2\xba\x9e\x92\x0b\xaa\xc6\x85\xba\xfb\xad\x1c\x8d\xb0\xb1\xb7\x38\x0c\x7b\xd5\x94\x66\x51\xc3\x22\x2d\x69\xf8\xeb\x0b\xfa\x73\x2f\x07\x21\x6d\x91\xaa\xee\x66\xbb\xd1\xd4\xdd\x35\xac\xf8\xd5\xe5\xa0\xf3\x5f\xdd\x92\xc2\xe2\x9e\xd4\xd0\x1a\x4c\x1c\x1f\x2f\xbf\x0b\xea\xdb\x5e\x24\xa7\xf2\x8b\x35\xe4\x94\xcf\xfc\xce\x8f\xac\x0a\x54\x43\x4b\xec\x33\x37\xb8\x31\xf1\xb8\x2b\x24\x54\x34\x03\x56\x0c\x3a\x9b\x31\xaa\x74\xdd\x6e\x97\xa5\xb5\x86\xbd\xc7\x9e\xe2\x3e\xdc\x26\xfb\x7e\x8e\x88\x14\xd9\x3c\xbe\xeb\x2b\x14\xb9\x06\x0d\x60\x5b\x0b\x14\x70\x0d\x88\x27\x57\x0e\x5d\xe4\x23\xd7\x56\x93\xc1\x1f\xdf\x39\xd8\x93\xed\x08\xe2\x7d\xbb\x7b\x51\x91\x01\x06\xe7\x9d\xf7\xed\xbb\x8b\xe5\xda\x78\xe9\xbb\x1a\x3c\x9e\xa8\x9d\x53\x7b\xeb\x3b\xd3\x1c\xdc\x0e\xc7\x1e\xcc\x85\xa5\xe1\x42\x2b\x63\xb9\x54\xb8\xea\x35\x9a\x8f\xdd\x7f\x6e\x0d\x35\x5b\x92\x7f\xfb\xac\xd7\xfd\xb9\xa4\xb5\xb7\x6f\xce\x7e\xec\xfe\x5c\x27\x17\x0c\x3e\x74\x2e\x3b\x37\xed\x5e\x67\x39\xd5\x57\x9a\xac\xbb\xf3\xb5\x1d\x70\xd5\x7d\xc0\x75\xf0\x80\x5b\xb2\x56\x32\x23\xdc\x68\xf2\xc0\x35\x1f\x72\xc0\xcf\x71\xa6\xf8\xbb\x2e\x30\x3d\xf0\x6d\x72\x33\xf7\x52\x01\xf6\x7b\x4a\xde\xcd\xfd\x1a\x1e\x01\x93\x73\xed\xa3\x9a\x1a\x1b\xe8\x13\xab\xd4\xe0\xad\xe7\x27\x7d\x4a\xda\x2a\x99\xf0\x07\x50\x7b\xa2\xcf\x84\x15\x45\xc5\x98\x29\x1c\x0e\xd8\x1f\xe3\xb1\x44\xcf\xed\xa8\x62\x19\xa0\x58\xb5\x20\xf6\x8d\x99\xb0\xaa\x73\xdc\x09\xca\x27\x8a\x89\x6f\xac\x28\x33\xcb\x78\xc2\x4d\x36\x27\x09\xd8\x3c\x52\x2b\x28\x4e\xa9\xa0\x63\x77\xe7\x82\xa2\x50\x21\x89\xbf\x22\xc8\xd0\xd5\xc8\x19\xb7\x7a\x9c\x6d\x79\x02\xee\x2e\xcf\x3b\xef\xbb\x97\x65\x12\xf8\xb1\xfb\xa1\x24\x04\x7e\xec\x9c\x77\xef\x4a\x17\xed\x2a\x59\x70\xb1\xd9\xba\x53\xe2\x5f\x3a\x25\xe7\xf8\xe9\xa9\x5d\xdc\x1a\x04\xa5\xa0\x3e\x56\xd6\xe1\xc6\x87\x9d\xf8\x7f\x74\x84\x51\xb5\x96\xb9\x75\x4d\x0e\xce\x08\x5f\xb2\x39\xd4\xfb\xea\x16\xfa\xbe\xac\x7a\x55\x16\x7d\x99\xce\x12\x6f\x3b\x69\x15\x96\x88\xd8\x89\x07\x6a\x77\x93\xd1\xa3\xc6\xb0\x5b\xf0\xd2\x9f\xc1\x47\x33\xcd\xb5\x41\x63\x3a\x10\x27\xb9\xff\x8b\xb6\x0b\x0a\xc6\xf6\x16\xb9\x65\xac\x2f\xbc\xfe\x3d\xe6\x66\x92\x0f\x5b\x89\x9c\x9e\x14\xf0\x5d\x27\x74\xc6\xa7\xd4\x0a\xa8\x4c\xcd\x4f\x86\x99\x1c\x9e\x4c\xa9\x36\x4c\x9d\xcc\xee\xc7\xe0\xf9\xf5\xfe\x84\x93\xd0\xec\x58\xfe\xfe\xe2\x4f\xdf\x1d\x5f\xfc\xe5\xbb\x37\x8b\x16\x95\xa6\xfd\xef\x88\x84\xce\x74\x9e\xb9\x08\x11\x15\xaf\x8d\x3f\xf2\x39\x5b\xb5\xdf\x97\xe5\xed\xda\x4d\x03\x3c\xbb\xbe\x2b\x59\x38\xcb\x7f\x7e\xec\x7c\xbc\xba\xf9\xa5\xc4\x29\x7b\x57\x37\xed\x0f\xcb\x2d\x9d\x0b\x2a\x62\x65\x19\x7e\x12\xf2\x51\x94\x67\xaf\xab\x93\xce\x85\xe1\x53\xe6\x35\x44\xf7\x67\x0f\x67\xba\xc5\xcc\xaf\x7a\x3f\x96\x85\x9c\xf7\x17\xbf\xf4\x3a\x83\xdb\xf3\x9f\x96\xce\x04\x3f\x2b\x8d\xec\x16\xdc\xdb\x67\x32\xcb\xa7\x22\xfe\xf7\xf6\x63\xeb\x5e\xf6\x3a\x1f\xaa\xa3\xbb\x6a\xf7\xca\xcb\x7e\x53\x8e\x9a\x78\xf3\xee\xea\xea\xa2\x53\xf2\x38\xbc\x39\x6f\xf7\x3a\xbd\xee\xc7\xd2\x6d\x77\x7e\x77\x83\x88\x5b\xcb\xa6\xe9\x47\x50\x33\x51\x3b\xad\x78\x9a\xfb\xe6\x33\x6b\x1d\xf3\xb6\x8b\x48\xc4\x83\x72\x1c\xc1\x55\x60\xb0\x01\x18\x1d\x8e\x83\xc5\x2f\xc1\x91\xd6\xf2\x1a\x53\xde\x26\xd2\xcc\xeb\x96\x6e\xf4\x32\x96\xd7\x0b\x43\x40\x18\x3a\x54\x31\x69\x96\xc9\x47\x8c\x0b\x9b\x72\x7b\xe5\x39\xec\x20\xfb\x8a\x26\x49\xae\x14\x13\x26\x9b\xb7\x6a\xd8\x49\x79\x5b\x58\xa2\x98\xf9\x28\x73\x61\xb6\x27\xb9\xf6\x65\xe9\x50\x77\x2e\x7f\x1e\xfc\xdc\x2e\x53\x60\xf7\x62\xf9\x21\x8f\x9b\xa8\xb9\xe7\xda\x97\xbf\x84\x1b\x0e\xa2\x07\x8f\x82\x66\x86\x82\x61\x92\x71\x26\x0c\x58\xec\x8d\xcc\x40\x5c\x20\x8c\x83\xaa\x3d\xb5\x93\xe3\x62\x4c\x30\x70\xc9\x83\x29\xe2\x20\x4f\xfd\x3f\x2a\xed\x69\x58\x17\x30\xf6\xf9\x80\x4c\x68\xc7\x69\x93\x82\x30\xf1\xc0\x95\x04\x2c\x45\xf2\x40\x15\xa7\xc3\xcc\x09\x47\x76\xae\xa7\xf0\xbf\x9b\xb5\x09\x76\xbb\x0a\xe3\xba\x95\xca\x9c\x87\xc0\xae\xed\xac\x00\x75\x51\x52\x8b\xf1\x51\xf5\x0a\x7e\x25\x26\xca\x0f\xab\x47\xf5\xfd\x82\xdd\xad\x2b\xb4\xa1\x22\x61\x67\x19\xd5\x7a\xdb\xb1\xa2\xe2\x70\x54\x66\x67\x37\x37\x77\xd7\xbd\xee\xbb\x15\x24\x54\xfd\x78\x31\xf0\x2d\xc9\x72\x6f\x9a\x1e\x2a\x49\x53\x62\xf7\x46\x8e\xd1\x0c\xee\xae\xec\x02\xd3\x12\x23\x50\x43\x2c\x40\x09\x4f\x33\xb8\xf9\xbd\x86\x12\xdb\xd6\xb8\x5b\x08\x92\xd8\x95\x20\x91\xb2\xe2\x59\x0a\x58\xd5\x11\x08\xdb\xa9\x8c\xb3\x8c\x9a\x91\x54\x53\x24\xa1\xd2\xa4\xb1\xf1\xe5\x8d\x72\x61\x98\x52\xf9\xcc\x70\x0f\x52\x5a\xbd\x02\xa1\x28\xa9\x1c\x7f\x64\x5a\xd3\x31\xdb\xc5\xf9\x52\x77\xed\xdf\xfe\x1c\xff\x09\xce\x95\x75\xae\xf4\xd2\x08\x7d\xd0\x96\xa7\xa7\x2b\xf1\x9e\xf2\x2c\x57\xec\x5a\x66\x3c\xd9\xd2\x59\x6c\xd5\xcc\x41\xf7\xa3\x15\xbf\xdb\xbd\xce\x45\x89\x4f\xc1\xb3\xf6\xfb\x5e\xe7\xc6\xa1\x40\xb6\xdf\x5d\x74\x06\x97\x57\xe7\x9d\xdb\xc1\xd9\xd5\xc7\xeb\x8b\xce\x0a\x1f\x6c\x63\xe3\x8b\x26\x8b\xea\xab\xa7\x0b\xbf\xc0\x0e\xab\x1c\xb5\x1b\xaf\xe9\x42\x7c\x33\xe5\x19\x38\x80\x24\x3a\x82\x28\x11\x56\xe7\xb7\x3f\x6b\xaf\x57\xf9\x70\xbe\x16\xe9\x9a\x6f\xb2\x8c\xd0\xdc\xc8\x29\x05\x33\x66\x36\xef\x0b\x3a\x94\xca\x80\x76\x17\x6e\x06\xa2\x72\x21\x2c\x57\xb4\x8d\x21\xf6\x68\x92\x31\x2a\x48\x3e\x8b\x42\xd1\x9d\x31\x6e\xc4\x05\x44\x89\x4c\xa9\xba\xf7\x75\x3d\x42\x04\x61\x38\x14\x9a\x50\xdd\x17\x88\xda\xe0\x58\xe1\x1a\x2b\x7c\xba\xd6\x5b\x8d\xab\x33\xa5\xf7\xcc\xae\xca\x34\x4f\x26\x56\x3f\x1c\x2b\xa6\xb5\x33\xd8\x24\x54\xa0\xf3\xcd\xbd\xfe\xc8\xb3\xac\x2f\x84\xb4\x4b\xe1\xed\x42\x29\x9b\x31\x91\x32\x91\x70\x0c\x40\x07\xbf\x55\xb0\xdf\x8e\x15\x9d\x4d\x88\x96\xe0\xf0\x81\x65\x07\xcd\x13\x3f\xf2\x21\x2b\x0e\xa7\x02\x1e\xc7\x66\x1d\x95\x5b\x3e\x71\x05\x97\x10\xae\x32\x7c\xec\x6d\x3a\xde\x96\x89\x1a\xfc\x74\x96\x31\x83\x28\xb4\xb0\xe4\xb0\x19\x76\xad\x4b\xfb\x61\xb7\xa9\x6e\x13\xfa\xa2\x18\x33\xd5\x6e\x44\xad\x1a\x73\x91\x3b\x52\xe4\x47\x2a\xd2\xcc\xb6\xe2\x0d\x83\xe5\xb3\x08\x51\x94\x6d\x4b\x35\xfe\x34\xee\x22\xa9\x25\x34\xd7\x1b\x89\x6a\xcb\xb3\x06\x50\x9f\x3f\x2e\x1c\xa2\x40\xde\x2e\x65\x00\x56\x77\x66\x59\x24\xcd\xa4\x5b\x25\x7c\x3d\xc7\xba\x03\x04\x46\xd3\xa0\x3b\xce\x14\x17\x09\x9f\xd1\x6c\x2b\xc1\xb2\x12\x47\xe6\xe2\xb3\xbe\xe5\x23\x4b\x3e\x6f\x17\xfc\x18\x86\xa9\x29\xa4\xcf\xb8\x61\x86\x2d\x5c\x25\xb4\xe1\xee\x58\x42\xa6\xe5\x58\x9b\x2d\xf6\x06\x9d\xd4\x4d\xd3\xad\xb4\xe2\x7a\xc7\x28\x09\x9a\x5d\xd7\xb7\x59\xb7\x60\xd1\xc3\x7f\x2d\xdb\xea\x8f\x74\x66\xb7\x18\x31\x6c\x09\x2d\xe6\xe8\x04\x26\x57\x3c\xc2\xbb\x7a\x23\xdf\x4f\x88\x40\x5c\x5f\x81\x2e\x96\xd0\xf9\xea\x17\x3b\x29\xf9\xc0\xa2\x84\x25\x47\x92\xa3\xdc\xd8\xd3\x44\xc1\x8b\x46\xbe\x65\xad\x71\x8b\x78\xd0\xe1\x23\xd2\xbe\xbe\xee\x5c\x9e\x1f\x11\x66\x92\xb7\x3e\x98\xc4\xf9\xd6\xfb\xc2\x48\x27\x5c\xcc\xc9\x44\x3e\x02\x2b\x63\x6a\xcc\x4a\x73\xf6\x8e\x78\x80\xa1\x19\x73\x6d\x94\x0b\x07\x10\x69\x0c\xb9\xcd\xa7\x55\xb9\x11\x29\x24\x37\x93\x5d\x48\x83\x6a\x9d\x4f\xad\x5c\x3b\xe0\x74\x3a\x50\x32\xdb\xe5\x0c\x9f\xc3\x54\x40\x74\x0e\xb9\x5e\x9c\x4e\x89\x6d\xd6\xb9\x32\x83\xd9\x3d\x48\x60\x56\x8e\xb1\x6c\xd4\x5e\x73\xd1\x35\xe3\xcd\x7c\x2e\x74\x82\x7b\x17\x1e\xe4\x82\x35\x9c\xec\xc2\x3e\x33\x70\x26\xb1\x01\x4d\x12\x2b\x7e\xef\x79\x52\x11\x8e\xbb\xb7\xbd\xb9\x8e\x9e\x6c\x9a\xab\xe8\xdc\x0f\x73\x66\x19\x0e\x44\x69\x2d\xc2\x40\xd7\xf4\x3b\x9c\x2f\xf4\xea\x91\xd6\xef\x74\x50\xaf\xf0\xce\xd4\x0c\x76\x52\x23\x52\xbb\x99\x30\x87\xe1\x14\x77\xe9\x63\x2f\x6d\xc3\x73\x99\xab\x1a\x11\xa2\xd5\x17\xe7\x6c\xa6\x98\x15\xcc\xab\x96\xca\x40\xd3\x37\x65\x4a\x3c\xd0\xf5\x81\xae\x5f\x3d\x5d\x9f\x61\x75\x05\x6f\x94\x8d\x10\xd4\x77\x21\xf4\xba\x56\x96\xb5\x44\x9e\xfc\x7e\x3f\xc3\x8b\xbd\x0e\x98\xbe\x4c\x45\xfe\x0e\xe6\x62\xa1\x1c\x06\x6e\x24\x94\x1a\x84\x0b\xf7\xd7\x5c\x1a\xaa\xdf\xb6\xfa\xc2\x4a\x0f\xf7\x6c\x8e\x4e\x28\x7b\x3f\xff\xc1\xca\x8c\xc7\x9a\x09\x0d\x21\x79\x7f\x40\xeb\xb0\xdd\x5b\x6f\xb3\x41\x15\x0a\xab\x70\x94\x31\xf3\x21\x8c\xca\x35\xea\xc4\x83\x22\x48\xad\x00\xda\xf7\xcf\x70\xf8\x63\x66\x20\x8b\xc5\x70\x03\xb2\x7d\x8a\x65\x3e\x16\x86\xbe\xd2\x30\x87\x54\xa1\x24\x18\x0b\xd3\x7c\x37\x8e\xa7\x17\xdb\x58\xc9\x12\x82\x54\x7b\xeb\xe2\x12\x4f\xbc\x7d\x23\x51\x72\xa1\x76\x06\xb5\xc2\x8a\xdd\xe9\x21\x9e\x03\xef\x21\x61\xa2\xf5\xc8\xef\xf9\x8c\xa5\x9c\x42\x94\xa2\xfd\xeb\xc4\xce\xeb\xf7\x67\x37\x57\x97\x83\x22\xb6\xf8\x3f\xfb\xa2\x9d\x69\x49\xac\x9c\x2e\x95\xd1\x44\x48\x11\x42\x22\x67\x8a\x79\x59\xc8\xcd\xc5\xae\x6a\x64\x5f\xed\x8b\xa6\x11\xa4\x32\xd1\x2d\xfa\xa8\x5b\x74\x4a\xff\x21\x05\x38\x6b\xda\xf0\xcf\xb3\x4c\xe6\xe9\x27\x6a\x92\xc9\x09\xf8\x50\xcc\x09\x7b\x60\xc2\xa0\xad\xd6\x2e\x57\x0a\x09\x12\x1a\x22\x2a\x7f\x6f\xc7\x5c\x84\x39\x6b\xab\x71\x25\x6c\x66\xc8\xff\xaf\xd8\x50\x4a\x53\xcf\x9d\xe5\x68\xa4\xd9\x46\x9c\xb8\x50\x26\x6e\xaf\xc8\x5f\xfe\xfc\xdd\xf7\x96\x84\xb6\x59\xe3\xee\xed\xd5\xc0\x7e\xff\xfb\x73\xf7\xbd\x5e\x8b\xe4\xce\x31\xe9\x6b\xa7\x90\xe3\x15\xf3\xad\x5d\xa9\x4d\xad\xf9\xd5\xab\x80\xeb\x59\x46\xe7\x0b\x7e\xc1\x55\x57\xc8\xa5\xe5\x07\x33\x9a\xb0\x22\xe9\xcc\x3b\xd8\x13\x39\x9d\x42\x3c\x86\x77\xb3\xa7\x7c\x04\x81\x19\xc6\x5e\x2f\x64\xc8\xcc\x23\x84\x01\xf9\x5f\xc3\xb5\xe8\x4d\x75\x96\x79\x00\x83\xea\xdb\xb5\x4a\x73\x30\xe2\xf6\xdf\x1c\x91\xfe\x9b\x94\x3d\xb0\x4c\xce\xec\xf9\xb1\x3f\x30\x93\xd4\x5d\x0a\x9d\x29\xe5\xd9\xa5\x34\x21\xb2\x64\x97\x6d\x51\x2c\xe1\x33\x6e\xe9\x79\xc0\x6c\xbb\x4f\x1a\x16\xbe\xca\xa1\xe1\xb3\xd9\x61\x24\x84\xa6\xa9\x3d\x56\x50\xef\xc0\x0f\xb2\x30\xc1\x8a\x68\x01\xd6\x63\x9b\xc1\x34\xbd\x5f\x32\xae\x77\xec\x24\x52\x05\x78\xd7\xd0\x71\x81\x50\xbf\x94\x6a\x5d\xbd\x8b\x02\x47\xdd\x5b\xa0\x6a\x24\x88\xfa\x63\x63\xe5\x96\xf5\xc6\x59\x5e\x99\x5b\xfb\xdd\xd2\xa1\xe9\x18\x78\x21\x54\x4f\x0a\xea\xa7\x0b\x8e\xac\xc6\x63\xb2\x95\x23\x4e\x32\xa9\x73\xb5\xa6\xd7\xac\x3c\xe8\x33\xf7\xe9\xb2\x71\x77\x62\x6d\x3d\xcf\x8c\xde\xc8\x20\x50\xb3\xf0\x95\xbc\x3d\x3c\xdc\xc6\x49\x98\xee\xed\x23\x52\xd4\x3c\xa6\x59\x11\x39\x2a\x52\x52\x48\x53\x7d\x11\x82\xdd\xa9\x26\x8f\x2c\x03\xab\x6e\x22\xa7\x33\x90\x14\xdc\x70\x5d\x4b\xf6\xa2\x33\xd4\xb0\x23\x22\x73\x63\x1b\x3b\xc2\xea\x5e\x6e\x0b\x8e\x87\x14\xd0\x1f\x8a\x9a\x9d\x20\xbb\x3a\x47\x52\x48\xda\x47\x5a\x47\x06\xc6\x05\xf9\xc0\x0c\xb4\x02\x28\x2a\xf1\x04\xb1\x8a\x59\x2d\x0b\xaa\xae\xfd\x0e\x27\xca\xcd\x64\x83\x9d\x2f\x62\xe4\xdf\x65\x72\xb8\x74\xdf\xdb\x64\x8a\xa6\x23\xd7\x8b\xb7\x8c\x17\x46\xc3\x28\xdb\x7c\x15\x8d\x32\xa5\x4a\xf1\x70\x2b\x8e\x7f\x39\xae\x7e\x39\x79\x42\x54\x7b\x54\x0c\x7b\x71\x9c\xce\x9c\xbc\x6a\x8c\x60\xf4\x1c\xbc\x1e\xd3\x2a\x8e\x77\xba\x68\x4e\x5e\x45\x04\x65\x33\xf4\x53\x4f\x06\x0e\x88\x99\x30\xae\xc8\x5a\xd3\xf2\xe7\x77\x80\x67\x7e\x7d\xa2\x29\x68\xbb\x49\x00\x44\x26\x12\x18\x84\x1d\x98\x43\x7d\x29\x95\xdc\x6b\xf5\x45\x65\x10\xce\x3f\xa1\x09\x90\x97\x3f\x0d\x25\xde\x7f\x44\x46\xfc\xb3\x6b\xb4\xf0\x5b\xfa\x57\x23\xcd\xb8\xc1\x4e\x3e\xa1\x8b\x64\xb7\xc1\xfd\x78\x0d\xdf\x2f\x35\x04\x4b\x6d\xac\x38\x60\x05\x2b\xc5\x12\xa9\x2c\x4b\x84\x6e\x83\x17\x75\xe5\xdd\x68\xa8\xb2\x8b\x42\x37\x12\xc0\x0b\x14\xa4\x94\x1a\x76\x6c\xf8\xca\x90\x34\xab\xae\x58\x06\x3b\xb5\xea\x6c\x94\xe1\x54\x70\xd8\x21\x1b\x53\xe1\x3d\x6e\x0d\xa3\xf5\xac\x7d\x87\xc3\x6c\x25\x2b\x0a\x21\x05\x20\x47\xd8\x01\x95\xc7\xa1\x67\xb0\x9c\x4b\xc7\xe1\xac\x24\xcf\xb5\x6a\x66\xc9\xb2\x3d\xd2\x60\xb4\x69\x18\x6c\x0e\xa5\x92\x5f\xcc\x60\x33\xaa\x0d\x71\x63\x6a\x18\x71\x2c\xcd\xee\x21\x35\x73\x59\xc1\xa4\x58\x71\xd8\x44\x38\x8f\x87\x48\x34\x33\x86\xbb\xc2\x3e\xb9\x66\x2e\xa2\x7e\xca\xd4\xd8\x0b\x7c\x88\xf5\x1e\x8e\xb6\x03\x7d\xf7\x7c\x34\xe6\x25\xe0\x7b\x5d\x6c\xba\x45\xda\x62\x21\x2f\xc8\xdb\xef\x4a\xeb\x85\x5c\x9b\x66\x8f\x74\xae\xc9\x4c\x61\x18\x3e\x3a\x64\xfd\xe4\xc1\xb1\x52\xfe\x28\x58\x0e\x8c\xf7\x88\x43\x01\xd1\x35\x8c\xab\x51\x55\xaf\xf5\x99\xdd\x9a\xb2\x7f\xc5\x59\x58\x57\xe3\x2b\xa8\x40\xb5\x9c\x6e\x41\x98\x2d\x52\xe7\xe2\xc0\x50\x07\xcf\x01\xb2\xa5\xd3\x2e\x3a\x65\x47\x63\x93\xc0\x07\x56\xb7\x0b\x3a\x64\xd9\xce\x0e\xc6\xad\x2c\x20\xd0\xb5\x03\x4e\xb1\xea\x37\x43\x87\x29\x54\x83\x55\x55\xd6\xe6\xed\x86\x2a\x5f\xcf\x7d\x5a\xcc\xb3\x54\xaa\x60\x87\x89\x7a\x24\xa0\xed\xf9\x77\x13\x4a\x50\x7c\x91\x14\x30\x41\xf5\xb7\x48\xd5\x7c\xb3\xcb\x18\x22\x3c\x9f\xda\x21\xec\x03\xd0\x67\x2f\xc6\xa0\x40\x32\x6b\x82\x57\x76\x47\x44\x48\xc1\x08\xd7\xc5\xcb\xa6\x1c\x27\x12\xb2\x0e\xac\x18\x89\x6a\xfa\x62\x69\x9c\x67\xd6\xc9\xdb\x41\x97\x24\x23\xce\xb2\x54\x13\xc1\xac\x4a\x43\xd5\x1c\xb2\x7f\x91\x9f\xad\x23\x1a\xed\x4b\x58\xad\xb9\x3d\x9c\x14\x19\x9c\x22\x46\x12\x10\xc4\x2a\xe3\x22\x98\x1d\xed\x5e\x72\x1f\xb9\xd0\xfb\xbe\x08\x4a\x30\x90\x1f\xd7\x56\xb9\x6b\x11\xd8\x36\x53\x7c\x85\xa9\x24\x26\xec\xe1\x51\x51\x7e\x19\xa0\xec\x36\x51\xfd\xfd\xb5\x55\xac\x63\x39\xfd\xd5\x67\xe9\x63\x55\xe8\xba\x92\xb9\x9e\x28\xb2\x92\x15\x72\x39\xd3\x71\xb5\x75\x5e\x80\x99\x6a\xfd\x95\xb2\x9b\x9c\x2f\x18\xae\xb0\x72\x4e\xa1\x63\x47\xd9\x38\xb1\xa6\xe2\x32\xf7\xb1\xf2\x29\xd5\xe4\x0f\x42\x9a\x3f\x44\xd8\x06\x5e\x1b\xc6\xd2\x4b\xce\x32\x71\x54\xc2\x5c\xe2\x3e\x53\xd3\x11\x09\xa1\x51\x86\xd0\xca\x95\xdf\x15\x50\xa3\xf0\x27\x3e\xa9\xf0\xd6\x59\x8c\x05\x6a\x02\xad\x43\xdc\xd5\xbd\x99\x00\x9e\xa3\xe8\x1f\x41\x32\x50\xcc\x67\x8b\x4d\xa5\x62\x15\xec\x57\x64\xde\x21\x58\x0e\x31\x37\xd7\xa7\xd2\x1a\x6b\x18\xe2\x59\x16\xc7\xbc\x64\x05\x5b\x6e\xfd\xda\x47\x14\xdc\xb4\x9c\x74\xbb\x84\x02\x56\x40\x1a\xd4\x6b\xe4\xdb\x44\xae\x35\x89\xa4\xc1\x0e\x1d\x17\xb9\x6a\x4a\xe4\x6f\xf5\xc5\x7b\xa9\xdc\xdd\xa9\x1d\x46\xce\x90\x26\xf7\xc7\x4c\xa4\x84\xe6\x66\x82\x09\xf5\xce\x74\x3c\x77\x3b\x6b\xe5\x02\x20\x81\x90\xb0\xcd\x75\x42\x95\x63\xfa\x23\xfa\x20\xfd\x28\xfa\x22\x6a\x04\x50\x78\x00\x76\x0d\xa0\xa1\x9b\x04\x08\x06\x30\x97\x4d\x6b\x51\x07\x80\xbc\x00\x7f\xbc\xfc\xcc\x94\x40\x9c\x01\x3f\x48\x30\xed\x24\xec\xca\xea\x74\xbd\x29\xca\xab\x36\x3a\x2e\x23\x17\xde\x3c\x72\xf1\xa8\x68\x8c\x71\x33\xb0\x22\xca\x77\x9e\x6f\x96\xa0\x05\x46\xb9\x82\x38\x85\xba\x36\xbf\x4d\x26\x3c\x2b\xcc\xd3\x6f\x8f\xc2\x30\x6d\x93\x19\x7b\x60\x19\x22\xd0\x24\x0a\x7c\xb8\xe8\x4f\xfc\x8e\xfc\x2f\x04\x05\x26\xdf\xf7\xc5\x07\x60\xa9\x59\x36\x3f\x22\x7c\x54\xb4\x4c\x4d\xa5\x99\xfb\xda\x01\x18\x17\x2d\x41\xca\x03\xc1\xbd\x9e\xd0\x07\xd6\x17\xbe\x99\xff\x45\xee\xc9\x1f\xc9\xf7\x4d\x36\x1c\xef\x8a\x7d\x62\x15\x1f\x28\xd8\xf7\x15\x71\x85\x23\x27\x3a\x02\xd7\xf0\x16\x80\x92\xf9\xad\x26\x57\x20\x60\x5f\x70\xf1\x20\x17\x1d\x57\xf1\xa9\xa5\x8a\x09\x33\x10\x32\x65\x03\x56\xe3\xb5\x5a\xc2\x24\xec\x85\x7e\x29\x53\xb6\xd2\xe7\x14\x84\xe3\x4f\x60\xb5\xd0\xf9\x30\x6c\x07\x84\x2c\x07\x7d\xbb\x4c\x60\xf5\x03\x0e\xb9\xe9\xdb\x0c\x77\x5b\x37\xd9\x95\x93\xac\x8e\x80\x9b\xbb\x01\xd4\xbb\x6a\x32\x6a\x7c\x74\x68\xf5\x14\x56\x8d\xc3\xf6\x65\x3b\x73\x77\xdf\x44\x59\xf7\x00\xd7\xa5\xf8\x98\x5b\x49\x7b\x7d\x57\x1c\x30\xc0\x6d\x2c\xdc\x98\xe7\xbc\x96\x89\xbb\x58\x0a\x9f\x31\x72\x1c\xc8\xae\x70\x2f\x0d\x65\x5e\x95\xb7\xdd\x02\x70\x1d\xc7\xad\x3a\xd1\x7a\x6e\xd9\xef\x18\x63\xa3\xd8\x84\x23\x42\x46\xfb\xec\x82\xd8\x43\x21\xa7\x0c\x21\xa1\xed\xa2\xe5\x66\x22\x15\xff\x47\xa3\x2f\xb6\x59\xba\x2e\x7c\x68\x45\xc4\x0f\x8e\xb3\x2c\x67\x03\x8d\xa2\x54\x60\x4a\x4a\x44\x9d\x76\x43\x86\x39\xa4\x81\x5b\xee\x3a\xca\x33\x44\x5f\x4a\xa4\x4a\xb1\x40\x81\x2e\xc5\x17\xd9\xf7\xa8\xd6\x7c\xec\x22\x6a\x7d\x83\xdc\x65\xcb\x3a\x7c\xa7\x64\x42\xc5\x78\xb9\x0c\xf9\xd7\x9c\xe5\x7b\x0a\xd1\x72\x98\x8b\x5f\xc8\x13\x4f\xc7\xba\x08\xd7\xc3\xb5\xb1\x2c\xb9\x58\xdf\x5f\xed\x4c\x75\x14\xcd\xe7\x6d\x69\x21\x69\x12\x55\xe8\xaa\x2e\xbf\x86\xdd\xe5\xc6\x1d\xbf\x3d\x58\x5e\x9e\xc3\x55\xbf\x28\x1b\xd5\xf0\x1f\xa0\x3f\x87\x6b\xf4\xac\x96\x8d\xc0\xc3\x2b\x72\xc7\xbe\xad\x1c\x1b\x68\xd1\x7e\x50\x6e\x84\x8e\xb9\x2e\xfa\x35\xeb\xa9\xe3\xb6\x6c\x43\xd9\x98\x24\xb0\xef\x01\x78\xb0\x76\xb6\xdc\x46\x16\xc9\x22\x62\x14\x53\x05\x7c\x12\xcf\xd3\x9a\x59\xca\x3e\xc1\x72\xb2\x42\xe4\x12\x6c\x4a\x22\x89\x46\xb4\xc5\xed\xb4\xa8\x04\xd5\x8f\xcd\x3f\x5e\x77\x28\x4b\x3d\x21\x6b\xfa\x35\x40\x9b\x5f\x76\x6c\x2f\x5c\xa0\x51\xd9\x23\x80\xd1\x13\x32\xf2\x89\x82\x73\x20\xd7\xc4\x28\x0a\xb1\xa2\x10\xe1\xf7\x09\xa5\x58\xae\x51\x57\x74\xc8\x9e\xa0\x8a\x3a\x1c\x41\x60\x9e\x0e\x76\xcc\x4c\xa8\x70\x79\x62\x75\xde\x87\x00\x8c\x1e\x4e\x42\xec\x7f\xa8\xeb\x0c\x3a\x72\xa2\x7b\x6d\x93\x7e\xa1\xe3\x40\xe6\x4a\xfc\x6c\x93\x99\x98\x6b\x08\x80\xa7\x59\xa3\xbe\x38\x94\x32\x63\x54\x34\x89\xd5\xb5\x8f\x17\x2c\x45\x3c\x8e\x99\xb5\x1a\x9f\x95\xcc\x54\xce\xac\x4e\x41\x31\x53\x2e\x9a\x17\x85\xfa\x25\x26\xc0\x32\xa2\x52\x68\x07\x9a\xae\xf0\x85\x1c\xc5\x27\x7f\xc8\xb2\x8d\x82\x4c\xf0\x83\xa5\x54\x04\xaf\x14\x25\x32\xd6\xca\x3e\x8a\x63\x1f\x6a\x73\xb5\x56\x0d\x2c\xce\xf0\x5a\x6a\x16\x2e\x67\x49\x6d\x37\x44\xcd\x92\x5c\x71\x33\x1f\x38\xc5\x7a\x7d\xa6\x75\xeb\xbe\x3c\x73\x1f\xae\x23\xbe\x9e\x12\xdf\x9f\x57\xe4\x89\x74\xd8\x54\xd1\x14\xd6\xd9\x6e\x2b\x92\xd6\xe6\x70\x2c\x5b\x58\x9f\x44\xb2\xde\x50\x6d\x17\xdb\x0e\xcf\x21\xf1\x0c\xe4\xc8\xa7\x67\xac\xbf\xb0\x55\x88\xa2\x0d\x2c\x12\x0a\x11\x4e\xc8\x4c\x71\xa9\x1c\x12\x50\xa3\x5f\x60\xd5\xa5\xde\xae\xc4\x8e\x00\xae\xeb\x14\xee\x1d\x5d\xe0\xe2\x79\xdb\x5f\xb8\xf5\x4b\xab\x03\x69\xb8\xf0\x71\x2a\x99\x8e\x04\x6d\x58\x58\xe4\x62\x7c\xc4\xec\xa0\xfb\xc2\x6a\x1a\xb1\x52\x80\xd9\xbc\x3e\xb9\xd7\x76\x9a\x28\xa9\xb5\x0b\x07\xc1\x76\x74\x6b\xa9\x3c\xd1\x73\xb9\x96\xfb\x70\xf4\x3d\x5f\x64\xe8\x62\xcd\xb4\x08\xc7\xbf\x5e\xfe\x1c\xb2\x90\x57\xda\xc8\xfd\x77\x0d\x1a\xf3\x47\x83\x28\x46\xb5\xb3\x80\x40\x6c\x55\x25\xaa\x64\x03\x69\x31\x8c\x19\x63\x2c\x8f\x43\x26\x77\x44\x42\x0e\xf9\x04\xcb\x15\x71\x4d\xb8\x52\x0c\xaa\x21\x20\xf4\x46\xb7\x42\x35\xbc\xa8\xc9\x5f\xac\x48\x50\xf6\xb1\x67\xb8\x2d\x35\x9f\xda\xf3\x0c\x90\x4f\x42\x1e\xcb\x19\x68\x8f\xd5\xb7\x20\x0d\x9f\x8f\x2c\x25\x46\xa6\x02\xfb\x85\x38\x86\xb2\x3a\x4c\x98\x3a\x57\x87\x6f\x04\x5c\x23\x80\xfc\x31\x61\x8e\x72\xfb\x6f\xda\xef\xae\x6e\x7a\x9d\xf3\xfe\x9b\xc2\x7f\xed\x63\x9d\xfc\xe5\x1e\xb2\x84\xa5\xe8\x8b\xe0\x86\x0a\x69\x59\xb0\x97\x84\xa6\x69\x91\x14\x8b\x11\x90\x03\x34\xa7\xaf\x7b\x2a\x56\x7a\xa2\x16\x9b\x79\xcf\x3f\xb3\xf4\xa6\x01\x4b\x6f\x2f\xe1\x01\x6b\xd9\x69\x6b\x49\x3c\x17\x7c\xcd\x2b\xac\x3c\x95\x3b\xfb\xdd\xfa\x14\x8c\x27\x01\xf6\xca\x1b\xfd\x30\xe3\x8d\x1a\x42\x43\x19\xc3\x11\xd0\x80\x48\xe6\x04\xd2\x01\x2c\xd1\xce\xc9\x0f\x64\xca\x05\x84\xee\x2e\x5b\xda\xbb\xf2\x3c\x36\xc1\x30\xee\x5e\xde\x95\x0b\x0c\xfc\x78\x75\x57\x46\xe6\x6c\xff\xb2\x1c\x8d\xb8\xdc\xc2\x32\x9b\x4e\x34\xc5\x22\x3c\x4a\xe2\x4a\x84\x95\xa9\x9b\xe8\x07\x66\x7e\xc6\x82\x26\xfb\x70\x86\x3a\x20\x44\x50\xfb\xd8\xc0\x97\xb4\x59\x9f\x0c\x7e\xae\x29\x82\x53\x28\x38\x3d\x07\x43\xae\x64\x06\xb2\x36\x0b\x55\x70\xa2\x78\xde\x16\x96\x26\x81\xba\x19\x60\x56\xf2\x36\x49\x7b\x65\x4a\x61\x97\xab\x0f\x6f\x07\x54\xf3\xa2\x39\x39\xc2\x8f\xd7\x0a\xf2\xb9\x89\xdd\x5a\xb6\xad\x62\x29\x49\xfb\xba\x5b\xb3\xd6\x17\x55\xc9\xf8\xeb\x02\x0b\xc8\x82\x90\xbe\x6f\x9c\x80\x28\x10\xe9\x45\x40\x04\xb8\x99\xee\x86\x0e\x80\xb6\x8c\xeb\xb2\x81\xe4\x49\x65\xa1\xda\x68\x83\xed\xe3\x66\x8a\x09\x80\xb1\xa8\x5e\xd2\xd9\x38\xd9\xa4\x68\xd5\x67\x3c\x6c\x20\x28\x93\xe2\x6b\x6f\x72\x73\xf0\x64\x74\x46\x1d\x2a\x2b\x08\x3b\x3e\xdd\xb4\x0e\x45\xa7\xd5\x17\x71\x69\x5b\x14\x4f\x2c\x0d\xf8\xd4\x66\xc0\x32\xb3\xec\x42\xa1\xdf\x3c\xdc\x3c\x47\x71\xe2\x49\x35\x70\xd2\x4c\xca\xc9\xc9\x0b\xfd\x38\xea\xd3\x13\xea\x63\x6b\xbc\x48\xef\x3c\xbf\x71\x2e\x35\xb4\x17\x65\x65\xba\x8e\xd9\x03\x13\x98\x2a\x4d\x23\x6c\x9a\x28\xa4\xd1\x4a\xff\xe2\x1b\x13\x02\x97\x78\xe6\x12\xaa\x69\xf0\x7c\x16\xb6\x4d\x4d\xb9\x6b\x79\x39\x01\xef\x21\x37\x45\x57\x30\x81\x37\x20\x3e\xf8\xb2\xc9\x5c\xe7\xd0\xc3\x2d\x0d\xc4\xc6\x43\x8c\x9f\xaf\x25\x59\xf6\x79\xc6\x92\x6d\x12\x0a\xae\x7d\xf1\xc2\x65\xe6\xc3\x32\x1e\x1d\x98\xc6\xdc\xd6\x19\xe9\x8d\x99\xd5\xd1\xae\x18\xe7\x46\x69\x3d\x76\xa0\x3f\xbb\xd4\xeb\x0d\xc7\xe9\x13\x7b\x46\x4a\x4e\xd7\x1b\xe2\xf3\x84\xb2\xf7\x16\x82\xc2\x4b\xf6\xb8\x17\x12\xc3\xbe\x7a\x94\x4d\xc1\xeb\xab\xb8\xde\xcf\x78\x2f\x86\x3c\x15\x80\x57\xf0\x18\x77\xde\x4b\xe9\xe2\xc6\xe3\x3e\xe3\x3b\x2b\xf8\xeb\x7c\x4c\x57\xe5\x14\x94\x3c\x81\x43\x46\x9c\xe4\x89\x71\xdc\xf5\x01\xe8\x70\x7d\xd6\xb9\x20\xa2\x60\x06\x97\x86\x67\x17\x4f\x1b\x3a\x0d\x79\xfe\x55\x10\x89\xca\x72\xad\xe0\x46\xfb\x0a\x28\x7e\x82\xa0\xf3\x3a\xb3\x42\x29\x10\xde\x45\xfc\xec\x27\xdb\xb4\x72\x43\x2f\x1d\x58\x29\xdd\x34\x1e\x90\x03\xd2\x8f\x53\x2c\x17\xb7\xb2\x74\xf3\x61\x85\x0d\xef\xe9\xd8\xd2\x20\x81\xd4\xc9\x54\x25\x4f\x80\xc4\x77\x3c\xd8\xb3\xa6\x74\x1e\x45\x22\x3a\x20\x37\xb8\x9c\xb9\x08\x7f\x95\x59\xad\x27\xe6\x98\x44\xeb\x22\x82\x5a\x11\x38\x3b\x18\xda\xb2\xf8\xbe\xc6\xaa\x41\x38\x4a\xf4\x2f\x20\x4e\x7c\xf7\x12\xa1\xdd\x21\xca\x6e\x2e\x73\xf2\xc8\xb5\xd5\xc6\xfa\x02\x0c\xf0\x01\x4f\xde\x48\x87\x01\x7f\x04\x6f\x41\xec\xad\xce\x87\x53\x6e\x55\xd7\x62\x92\x77\xc0\x11\x6e\x7c\x24\x26\x9e\x63\xfb\x01\x5c\xdb\x3e\xc6\xb3\x2e\x9b\x62\xc5\xf9\xd8\xc2\xe2\x50\x34\xb2\x6b\x18\x67\xe4\x1f\x7c\xda\x40\xce\x48\xcc\x8e\xd5\x9a\xda\xe3\x75\x88\xe4\xac\x3f\x94\xe5\x6c\x66\x48\x39\xe7\xda\x54\x2e\x93\xe6\x1c\xe6\x62\x0b\xf6\x11\xc6\xd9\x84\xa5\xb2\x2c\xbe\xc7\x7f\x52\x2f\xed\xdc\x86\x52\x49\xb5\x22\xd8\x75\xa3\x7c\xf3\xd2\x72\xc9\xa2\xaa\x70\x5b\x7b\x5d\x37\x51\xb7\x8a\x74\x88\x98\x14\xa2\x90\x9f\x72\x1a\x01\xab\xb2\x6e\x21\x0d\x84\x3b\x24\x80\x87\xba\x10\x6b\xd4\x17\xf5\x72\xc3\x72\x1a\xdb\x35\x72\x61\xaf\x39\x67\x91\xb5\xc8\xcf\xc2\x59\x44\x3e\x85\x50\x4d\x54\x46\x43\x71\x63\x56\x39\x57\xde\xd4\xdd\xa0\x05\x80\xb8\xb0\x4d\xd0\x5b\xcd\xa9\x5c\x33\xae\x60\xe5\xb9\x70\x57\xe6\xd3\x68\x50\x3b\x06\x60\x40\xda\xf5\xfe\x93\xc5\xc1\x60\x7c\x04\xce\x08\xe7\xa9\xa4\x58\x76\x25\xa0\x74\xac\xb5\x72\x9b\x82\xe1\x45\x20\x51\x80\x73\x15\x57\xcc\x82\xc3\x23\xb3\x50\x9d\xa8\xc2\xdd\x82\xb8\x93\x8b\x94\x29\xc1\xa8\x99\x3c\x9f\x43\xff\x6c\x57\x93\xe1\xb3\x39\xf7\xcf\xf6\x82\x84\x5a\x71\x98\x6f\xe8\x2b\xdf\xc0\xf1\x5c\xe0\xe2\x2d\x28\x51\x75\x80\xd1\x45\x4e\xc1\x26\x98\x87\x3b\xf9\xfc\xeb\x15\x9b\xa7\x89\x7e\xa8\x31\x68\x2c\xc4\x3d\xd8\xb3\x19\xa3\x09\xae\x58\x92\xd7\x1b\x66\x10\xb3\x19\xfa\xe8\xcc\x46\x03\xcb\xd9\x07\x08\x2f\xb4\xc1\x6e\xde\xd0\xc7\x2b\xf8\x1e\xca\xe5\xe3\xd7\xeb\x0b\x0e\xcb\x94\xcd\x60\xa9\x04\x44\xf4\x12\xec\x11\x72\xfd\x15\xb7\xff\xf6\xb5\xc5\xbc\xde\x16\xbb\xe8\xdc\x2f\xee\x87\x86\x6a\x2b\x2b\x2a\x88\xc5\x3a\xa4\x98\x57\x4d\x30\x54\xa5\x99\x4b\x5c\x41\xb5\xb0\xa2\x00\x2c\x53\x4f\xfb\xe2\x47\xf9\xc8\x1e\x98\x3a\x22\xd4\x90\xa9\xb4\x42\x5f\xe4\x15\x83\x28\xfb\x52\xfa\x3f\x7a\x3f\x28\xb9\xa4\x53\x96\x76\x40\x74\x88\xe2\x6a\x9d\x92\xec\x0c\xd0\x75\x29\x96\x90\x36\xe8\xca\x2a\xbb\x81\xf6\x05\x16\x26\x43\x8f\x2b\x50\x23\xf7\x13\x03\x56\xf9\x87\x60\x1e\xff\x43\x8b\xf4\xac\x8c\xc3\x75\x79\xbc\x51\xba\x46\xd3\xd8\xfa\x62\xac\x64\x3e\x0b\x4a\x8c\x1c\x82\xf6\x84\x66\xf2\x1a\xf3\x38\x0c\xc6\xdb\xc6\x13\x9a\x5a\x09\x6a\x39\xe1\x94\xd4\xec\x17\x66\x35\x2a\xc7\x3e\xc7\x04\x64\x99\x57\xf0\xf6\xba\x80\x1e\x20\xa3\x66\x48\x96\xfd\x99\xd9\x17\xd0\x60\x35\xc8\xef\xc1\xba\x51\x0a\x84\xdb\x12\x62\x36\xb2\x08\x79\xeb\x49\x7d\x04\x67\xd1\xad\xf3\xeb\xfa\xf2\x1c\x75\x45\xb8\x1a\xf6\x7e\x7d\x07\x78\x65\x94\xd7\xb9\x9a\x49\x48\x81\xc8\xe6\x3e\x6c\xd4\xa5\x75\xcc\xe4\x2c\x47\x07\x34\x8f\xfd\x91\xb5\x03\xe2\xda\x7c\xa4\x26\x99\x58\xd1\xb1\x48\x6f\xd8\x93\x63\xbe\x60\xa4\x4f\xab\xaa\xd6\xcc\xe0\x2c\xee\xbd\xc1\x0c\xb3\xb6\x15\x02\x13\x9d\x7d\x54\x0f\xfc\x95\x65\x64\x6a\x7b\x2d\x21\xbd\x46\xd8\x6c\xb5\x6b\x5d\x42\x36\xdb\xbb\x4f\x7e\x07\x55\x02\xca\x93\x72\x41\xa2\x02\xe5\xce\xd9\x50\x7b\xa4\x73\xc5\xb7\xd2\x18\x9c\xb1\x0a\x20\x57\x0b\xdd\x73\x4a\x67\x84\x5b\xbe\x6d\x6f\x1e\x35\x66\x47\xe4\xd1\x9e\x38\x93\x2b\xcb\x9b\x73\xc5\xfd\x09\x03\x85\x71\xc9\xf6\x95\x35\xb6\x13\x94\x36\x30\x52\x31\xa1\x11\xa8\x9f\x2b\x11\x99\x98\x9c\x06\x17\x3f\xec\x70\xc6\xc5\xbd\xed\x0c\xc1\x46\xbc\x63\x40\x59\xfe\x26\x95\x0f\xf8\x2f\xed\xe9\x4a\xca\xdb\x61\x97\x9b\xa1\x9c\x57\x1d\x05\x2e\xc6\x51\xaa\x52\xbd\xbe\xbc\x0e\x68\x48\xed\x97\xeb\x61\x9e\xd4\x7e\xea\xe5\x89\x6d\xbe\x5d\x92\xdd\xd1\xf8\xf9\xea\x03\x1e\x85\x33\xb9\x90\x12\x27\x91\xc4\x49\x64\x4e\xeb\x82\x14\x50\x04\x0a\xa7\x4e\x42\xf9\xcf\xf0\x2f\x84\x6a\xc3\xa5\xf9\x4f\x22\x55\x5f\xe0\xef\x47\x01\xd5\xc5\xbe\x50\x64\x61\x36\x60\x16\x04\x7a\xf2\xa8\xe0\xdb\xc9\x95\xbd\xf6\xed\x4f\x83\x9b\xce\xed\xd5\xdd\xcd\x59\x49\xb8\x3c\xbb\xb8\xbb\xed\x75\x6e\x6a\x9f\x61\x21\x9e\xee\xd5\xe5\xe0\xaf\x77\x9d\xbb\x86\x47\xbe\x81\x8b\xf6\xbb\x4e\xa9\x08\xf0\x5f\xef\xda\x17\xdd\xde\x2f\x83\xab\xf7\x83\xdb\xce\xcd\xcf\xdd\xb3\xce\xe0\xf6\xba\x73\xd6\x7d\xdf\x3d\xc3\xf2\x81\xd1\xbb\xd7\x17\x77\x1f\xba\x97\x03\x1f\x12\x13\x3f\xf2\x65\xd5\x07\x51\x97\x57\x97\xef\xbb\xcb\x8b\x96\xd5\xcf\xb7\x11\xe2\xbe\xe0\xd8\xc0\x84\x0a\x20\x1b\x7f\x81\x0f\xe7\x8e\x1c\xf8\x3f\xc0\xa6\xe2\xaa\x08\x1f\x1f\xf9\x7f\x21\x64\xf2\xb1\x65\x1b\xde\xaa\x56\x9c\xb8\xbe\x08\x66\xcf\x70\x47\x18\x3a\xd6\xbe\x82\x58\x69\xb4\xa7\xa4\x3d\x73\x05\xf8\x65\xb9\x53\x28\x3f\x16\x46\xea\xad\xdd\x40\x47\x50\x01\xd0\x55\xb5\xab\x6e\x69\xb9\x41\x37\x27\x18\x82\xb3\xfa\xa5\x31\xae\x7f\x15\x68\xdd\x97\xca\x2b\xd3\xc2\x29\xf1\x5c\xcd\x36\x6b\xc7\x05\xd9\x93\x73\x41\xa7\x0b\x75\xd2\x30\x81\xd0\xa5\x16\x4e\x99\x30\xd5\x16\x4b\x24\x54\x6e\x79\xc2\xc8\x4f\x7f\x29\x06\x05\xb6\x1a\x67\xfb\xc8\x17\x40\x10\xdd\x03\x95\xe3\xaa\xae\x22\xc0\x52\x4f\x5e\x3b\xaa\xa9\x9a\x0b\xa1\x2c\xb9\x88\x72\x78\x4a\xd1\x5e\xae\x6a\x00\x39\x26\x15\x2a\x3e\x25\xb7\x2c\x83\x4a\xc5\x41\xf2\xb1\xbb\x38\x83\x82\xdb\x55\xec\xf4\xa1\x2b\xc0\xed\x44\x0b\x44\x98\x81\x75\x84\x82\x8f\xd0\x7e\xe3\x51\x38\x25\xed\x34\xd5\x05\xf0\x8d\x6d\xa3\x44\x39\x9e\xcd\x1c\x97\x87\x1d\xa7\xdd\x88\x34\xa4\x37\xd4\x0a\x2b\x35\xf7\xc8\x4e\x29\xaf\xfa\x7e\xe0\x49\x6c\xb0\xd5\xc5\xd6\xa3\xfa\xbe\xa6\x54\x42\xed\x5d\xe1\xe8\x67\xc7\x1e\x9b\xeb\x33\xd4\x76\x1a\xd6\x7a\x00\x07\x60\xbb\x3e\x1b\xf3\x8d\x57\x74\xe9\x67\x9c\x55\xa0\xdb\xd6\xee\xaf\x04\xfd\xf6\xf4\xf6\xa6\x7a\xc9\x02\x8e\xca\x20\xd0\xe5\x06\xf3\x28\xd7\xba\x6f\x58\xae\xe0\x66\x89\xd6\x6d\x53\x2b\xd4\x42\x72\xc7\xc6\x96\x28\x40\xd9\xe0\x09\x18\x03\x29\x17\x0e\x47\x89\x05\xfc\x3e\x0f\x28\x8d\x65\x5d\x9d\x75\x8d\x0e\xe5\x43\x29\xb3\x7d\x8a\x45\x1d\x6b\xcf\x6e\x64\xce\xd8\xe5\xd0\x86\xd3\xb3\x7e\xc5\x5b\xbb\xd7\xfe\xbc\x40\x6d\xd9\xda\x7d\x58\xd7\x5c\x51\x9d\xcc\xaa\x60\xd2\x2d\x3c\x52\x51\xeb\xc1\x25\xb5\x8e\x86\x71\xee\x8a\x32\xe8\x12\xae\x33\x96\x0f\x00\x3b\x44\x6c\x53\x3a\x2a\x42\x6f\x5c\x71\x7a\x2f\x13\x9e\x78\x31\x91\x9c\xa0\xa1\xeb\x24\x12\x4d\xe6\x33\x2b\x93\x4c\x87\x2e\x13\x64\xf9\x46\x47\x6b\xb3\xc3\x96\x3f\x1d\x9e\x61\x98\xd6\x17\x83\x33\xac\x1b\xc1\xab\x45\x33\xc4\xbc\x84\x40\x1b\x76\xba\x7e\xb5\xff\xe8\x67\xf4\x47\x24\xa9\xbc\x21\xad\x2c\x6a\x2d\xa4\xfd\x93\x63\x28\xbe\xe3\x72\x58\x9c\xbb\x42\x93\x63\x92\xf1\x7b\x46\xbe\x01\x1f\x7f\xfb\xba\xfb\xcd\x11\xf9\x26\x8e\x23\xfe\x66\x03\xf6\x57\x00\x95\xba\x71\x3b\x58\x43\x90\xc4\x4b\x21\x6a\x90\x17\x11\x0f\xb3\x1d\xd5\xd4\x81\x94\x31\xc3\x14\x82\xef\x41\x5c\x52\x88\x7d\x71\xc6\xe8\x55\xbc\xb1\x38\x32\x3b\x03\xc4\xd9\xf6\x16\xb3\x1c\xf6\x1c\x8f\xb1\x9c\x11\xae\xc8\x9b\x68\x87\xfa\x1b\x05\xa4\x9e\x6e\x20\xde\x43\x4c\x52\xdd\xac\x4a\xc6\x02\xbf\x98\xb5\x9b\xb2\x8a\xf0\x5e\x1b\xb9\xad\x11\xfd\xd3\xae\x5b\x11\x17\xbd\xd5\x20\x8d\x1d\xa8\xec\x69\xa9\x6c\x1f\x81\x6f\xe5\xc1\x6d\x7e\x9b\x9d\xa1\x40\x14\x35\xe3\xf3\xb8\xad\x84\xeb\xf9\x74\x19\x79\x70\x35\xd6\xee\x86\x0e\xa5\x68\x4d\x56\x7b\x94\x6e\xd1\x13\x89\x9e\x9d\xc5\xb1\x56\x87\xda\x36\x0e\x0f\x49\x72\x0c\x4d\x37\x7c\xca\x8e\x08\xd4\x90\x2a\xbc\xa7\xee\xbc\x02\xb9\xc1\x55\xe5\x8a\x4d\x60\x27\x2a\x99\xf0\x87\xfa\xf8\xfb\xa5\x1b\xbc\x83\xdf\xf9\xb2\xfd\xb1\x73\x3e\xe8\x5c\xf6\xba\xbd\x5f\x06\x8b\x2e\xe8\xf2\xe3\x9b\xb3\x1f\xbb\x3f\x77\xce\xe3\x17\x6e\x7f\xb9\xed\x75\x3e\x0e\x3e\x74\x2e\x3b\x37\xed\x5e\xe7\x7c\xa9\x71\x6e\x59\x67\x75\x40\xb3\x2e\x40\x50\x16\xb0\xb1\xa9\x07\xa5\xf4\xf0\x2b\x68\xd9\x82\x34\x4a\x6e\x34\x79\xe0\x9a\xbb\x54\x2b\x27\xec\xdd\x75\xbd\xb1\xad\xa6\xf7\xd3\x28\xc6\xfa\x08\x31\x49\x8a\x4e\xb8\x33\xf9\xc7\x82\xa0\xf3\x36\x8b\x14\x03\x97\x48\x54\xca\xab\x55\xd3\x89\x5b\xb0\x53\xd2\x76\x5b\x5b\xd7\xbe\x90\xc4\x8a\xa1\x4c\xe1\xe8\xd1\x15\x1d\x86\x4e\x8e\x49\x75\x8d\x4f\x09\x62\xc6\x45\xc8\xb7\xa1\x41\x10\x9e\xa8\x62\xe2\x1b\x43\xd8\xe7\x59\xc6\x13\x6e\x22\x34\x5e\xa9\xc8\x94\x0a\x3a\xf6\xea\x47\xae\x99\x5a\xc1\x3d\xf6\xe6\x9b\xde\x87\x16\xd9\x14\xdf\x18\x6b\x4a\x8e\x5c\x02\x20\x9e\x91\x2e\xb1\xe5\xc9\x74\xd0\x06\x1f\xd7\x02\x68\xd8\xba\x43\xda\x93\xfa\xba\x22\xa2\xd2\x45\x54\x3b\xe7\x36\xf5\x68\xa6\x8f\x78\x71\xbd\x0c\x37\x79\x0d\x1d\x7e\x61\x3f\x79\x09\x75\x73\x6f\x75\xb1\x06\xab\x1d\xa9\xb5\x94\xb2\xc7\x5a\x55\x45\x01\x89\x85\x2a\x55\x5e\xed\xbc\x6c\x06\x20\xde\xac\x24\x50\x69\x11\x57\x97\x03\x82\xa2\x81\x54\x37\xd4\x02\x02\x64\xae\xf4\xa5\x54\x04\x5a\x4c\xb5\x2b\x0f\xee\x0b\x97\x03\xaa\x0c\xe6\xe5\xd4\x04\x5a\xb9\x6e\x2f\x37\x97\xb2\x66\xa0\x6b\xd4\x02\x0a\x36\x68\xc0\xff\xdd\x8c\xe5\x43\x7a\x25\x4f\xb3\x92\x21\xda\x1e\xaa\x1a\xd3\x65\xac\x68\x51\x7d\xbf\x73\x77\x3d\xaa\xef\x1b\xba\x5a\x75\x51\x9c\x95\x0c\xdd\x95\x65\x73\xa9\x7e\x0e\x36\x23\xae\xde\xd8\xcc\x7f\xa1\x44\xef\x5e\x44\x13\x68\xa2\x26\xeb\x62\x3d\x53\x1d\x82\x67\x76\xcf\x0b\x8e\x14\xa0\xe6\x23\xb7\xb2\x51\x34\x01\x94\x5d\xac\x1d\xeb\x7c\x27\x4d\x1e\x1d\x3b\xb5\xf5\xb6\x07\x5e\x5d\x5c\x97\x15\xf1\x72\x6e\xb5\x0b\xb4\xe0\x22\x16\x47\x26\x49\xae\xd4\x66\x89\xc0\x25\x21\x40\xa4\x80\x8d\x14\x95\x7b\x42\xb9\xb4\xba\xe7\xd8\xe7\x84\xea\x6a\x97\x2b\xb7\x7c\x8b\xfc\xc1\x52\x33\x1f\x18\x44\x0f\xef\xa5\x08\xc7\x06\xe9\x1c\x30\x90\x3b\x95\xad\xac\x68\x79\x8b\x48\xc5\xb9\xca\x0a\x73\x04\x25\xf6\xee\x6c\x45\xa1\x59\x90\x65\x55\x5a\x51\x1c\x4c\x03\xcb\xd9\xbc\x06\xe7\x53\x0e\xd5\x8d\xa6\x61\xac\x56\x4c\xdb\x5b\xa6\x4c\x23\x8e\x76\xd4\x0b\x5a\x6a\x40\x5f\x2f\x4b\x84\x20\xbb\xcf\x11\x69\x1a\x94\x3e\x1a\x8b\xae\x9a\xff\xc3\xde\xac\x8a\xe9\x89\xcc\x9a\x78\x3d\x74\xb3\x31\x54\xc2\x76\xb3\xf1\x48\x09\x4f\x38\x1d\x17\xee\x31\x68\x8a\xe2\x5a\xe3\x16\x39\xc7\x26\x6a\xef\xae\x75\x26\x5b\xa4\xb0\x39\x94\x17\x17\x3f\xe1\x86\x06\xbe\x80\x42\x3d\x8e\x33\xc5\x0b\x5b\x61\x21\x3a\xce\xd1\xf3\x10\x3e\x8f\x6a\x16\x84\x00\x44\x6e\x34\xd1\x46\xe5\x09\x20\xfa\x4c\x98\xda\x08\x45\x28\x44\x90\x16\x4d\xd8\x01\xd7\xf3\x24\x07\x3c\x07\x02\x86\x73\x0e\xeb\x52\x8e\xbb\x07\xc3\x80\x29\xd7\x0a\xbf\xcd\x9c\x6f\x57\x9b\x73\xb9\x5c\xc1\x93\x99\x9e\x4b\xd4\x52\x9a\xc0\x21\x95\x7a\x5b\x83\xb2\xc3\x22\x0c\x14\x08\x48\x07\x46\x71\x06\x10\x3c\x59\xc8\xdb\x2d\xdf\xd1\xce\xb4\xb4\x92\xb0\xec\xf9\x3d\xdf\xd1\xcc\x6c\x87\x33\x1f\x40\xba\xc5\x2e\x7e\xdf\xd2\x0c\xd0\xca\x06\x6d\xb2\xd4\x55\xc7\x45\x14\x25\x37\xfb\x60\x61\xc4\x82\x1c\x7d\x71\x63\x47\x81\x5f\x80\xa1\x11\xc5\xbb\x80\x7a\xcf\x0a\xd8\xda\x11\xa1\xee\x2b\x58\xb6\xa6\x82\x6b\x7a\x10\xd5\xfa\x68\x9a\xd8\x36\x98\xcb\x41\x04\x7d\x87\x4f\xc9\x28\xa3\x63\x9f\x85\x09\x15\x64\x46\x85\x8a\x62\xe5\x2c\x2c\xc9\x62\xff\xd4\x8e\xfd\xf3\x86\xd0\x6e\x3d\x63\x09\x2a\x0b\x5b\x4a\xc5\xb0\x0b\x3c\x0d\xe6\x5b\xf8\x53\xd4\xd7\xd7\x70\x98\x9b\x53\x3a\x83\x60\x45\xa4\x74\x39\x0a\x5c\xbe\xe7\x22\x16\x5b\x30\xf2\xff\xfe\xaf\xbf\xb5\x78\xba\x26\x50\x5e\xe1\x45\x29\x32\xc6\xa3\xf0\x99\xa8\x6a\x08\x05\x76\xbc\xb4\x40\x66\x29\x15\x7e\x97\xf0\x8a\x09\xd5\x4f\xe7\xb6\x5b\x52\x75\x39\xe6\x9d\xeb\x79\x89\x71\xa8\x18\x0c\x6f\x2f\xa4\x5c\x33\x85\x0e\x8c\x90\xe3\x59\x83\x52\xde\x18\xd4\xc1\xa6\x94\x6f\x14\x97\x66\xdf\xaf\x47\x20\x28\x19\xa0\xe8\x98\xa9\x41\x9a\x97\x02\x9d\x56\xb5\x7d\x6d\x3f\x3a\xcf\xcd\x7c\x75\xfb\x3a\xa3\xc9\xfd\x26\xa8\x0f\xf6\xfd\x86\x66\x57\x33\xea\xc8\xf3\x57\x96\x17\x1a\x30\x15\x58\x05\x53\xc1\xc5\x85\xc4\xfd\x23\xcf\x12\x80\x2d\x1f\xc9\x7b\x8e\xa9\x01\x62\x65\x8b\xbc\x47\xb8\x42\x90\x3b\xb1\x8b\x44\xe6\x59\xda\x17\xec\xf3\x4c\x6a\x56\x0a\x22\xae\x81\x98\x73\x81\xf3\xae\xa7\xfa\x0b\xa3\x02\xdf\xbf\x93\x20\xf2\xc5\x01\x30\x16\xf7\x74\x71\xca\xf5\x44\xb6\xd3\x1d\x99\xf0\x19\xb7\xe4\x31\xa8\x3d\x4c\xcf\x56\x41\xe6\xcc\x6a\xec\xc2\x64\xf3\x23\x12\x26\x59\x21\x8b\x8c\x3d\x30\x45\xc7\x56\x5a\xa1\x3c\x8b\xe1\x04\xcb\xf6\x81\xf5\x5c\x9e\xe5\xd8\xce\x9d\xc3\x90\xeb\xfc\x50\x1b\x48\x19\xed\x18\x02\x71\xce\x0c\x61\x9f\x0d\x13\xe8\xc1\xeb\xf9\x00\xee\x28\xc8\xa6\xa9\x0a\x18\xc6\xba\x36\x5f\xb2\x4f\xbe\x8f\x6d\x9f\xea\xe2\x23\xd4\x53\xed\x78\xbd\x2b\xdf\x30\xa1\x22\x75\x69\x08\x45\x91\x3b\x9c\x9d\xd0\x86\xd1\x70\xc7\xfb\x60\xfa\x08\x99\x0a\xdb\x44\x08\x78\xb8\x52\xbc\xfc\x6a\x25\x2f\xf0\xb7\x48\x65\xc5\x90\x5c\x18\x9e\x59\x69\xca\x8d\xc1\x6a\x37\xb9\x08\x79\xf0\x10\x12\xd6\xb0\x82\x90\x3d\x2f\xc6\x03\xb7\x92\x3e\xa2\x7e\x3d\x6e\x5d\xa6\xa9\x8f\xd8\x14\xfe\xf8\xce\x37\xb4\xdc\x90\x86\xa9\x24\x76\xfa\x21\x96\x1f\x32\x07\x84\xf4\x93\x09\xa0\x85\x61\xaf\x4b\x35\x45\x60\xa2\x9b\x48\xf2\x20\x2b\x2d\x26\x9c\x15\x7c\x5d\x13\x0d\x19\x08\x18\x41\x0c\xc1\x71\xa6\x21\x01\x41\x37\x26\x1e\x74\x45\x10\x99\x1c\xd2\x6d\x28\x83\x50\xc9\x61\xa0\xbe\x3b\x17\xc7\x47\xb3\x6c\x48\x93\xfb\x80\x2a\x1a\x54\x23\xa9\x3c\x3e\x9b\x15\xe3\x00\x0a\x19\x89\xcb\x0e\x34\x01\x39\xa3\x28\xef\x9d\xba\x94\x5e\x37\xec\xa2\x73\x57\x89\x45\x60\x6d\x10\x50\xa2\x70\xf4\x18\x27\x98\xb2\x59\x26\xe7\xd3\x86\x1b\xa8\x1a\x1f\xbe\x8b\xeb\xae\x29\x3c\x7d\xaf\x97\x4f\x85\xe9\x6d\x7c\xfd\x2c\x04\xf2\xee\x21\xa9\x7c\x1d\xd7\xe4\xa6\x81\xaf\xd5\x73\xc5\xf5\x2c\xa3\xa5\x6a\xca\xd5\x1e\x30\xba\xf5\x69\x57\x1f\xd3\xbb\x56\x9b\x1c\xd6\x8f\x8f\xaa\xfd\xfc\x49\xea\xd6\xf8\xbb\xd7\x15\xb0\x01\x2e\xe4\xcc\x2a\x2c\x6b\x41\x33\x2d\x0c\x54\x6f\xcd\x94\xb4\x77\xb3\xec\x0b\x43\xc7\x3e\x80\xd8\x49\x75\xf2\x51\x30\xa5\x27\x7c\x56\x42\x3a\xdf\x39\x22\xcb\x11\xa6\xfb\x0f\x86\x30\x6d\xc0\x02\xe5\xec\x18\x6b\x90\x5a\x02\xd1\x33\x9a\x14\xb6\x96\x24\xa3\x5a\xf3\xd1\x9c\xa4\x7c\x04\x61\x08\xa6\x88\x8f\x81\xf0\xe5\x80\x82\x5c\x46\xcb\xae\x35\x71\x94\xd2\xfc\xf6\x93\x03\xb5\x7b\x6c\xbd\x73\x38\xf9\x40\x6f\x9e\xc6\x58\x0c\x50\x77\x69\x21\x77\x75\xcd\xd2\x50\xbb\x86\xdc\xbb\x91\xb9\xc0\xf3\xfd\x0d\xcc\xa7\x4f\x6e\x97\x4c\xb5\x34\x17\x7a\x25\xef\xac\xee\xfd\x39\xcb\xd8\x5e\x22\xa2\x9e\x82\x10\x96\xae\x75\x01\xe8\xf6\x6c\xfb\xbf\xdb\x78\xb6\x88\x19\x6b\xc8\x9e\xde\xc3\x7e\x7f\xe1\xc8\xa3\x86\xd1\x7d\x60\xeb\xb8\x43\x57\xd2\xe2\x56\xe7\xaa\x89\x39\xee\xb0\xd8\x7b\x0b\x37\x7c\xe2\x09\x35\xed\xf5\x2d\x33\xda\x1b\x42\x22\x4a\x47\x21\xdb\x9d\xd3\x63\x9f\x69\x54\xe4\xed\x6c\xb0\xe1\x2f\x24\x10\xce\x8d\xee\xc6\xa9\x7a\x4f\xc7\x0e\x57\x6f\xd7\x26\xf4\x56\x8c\x77\x8b\x10\x02\xd7\xc6\xda\x3b\xd0\xd8\xc2\x3e\xe4\x87\x27\x56\x3b\xaa\x4b\x7b\x70\xb6\xad\x67\xa4\xaa\x43\xa7\xdb\x3d\x3e\x34\x73\xa5\xe4\x07\x33\xc5\x46\xfc\xf3\x56\x0e\x99\x6b\xf8\xd4\x49\x64\x76\xf6\x72\x34\xca\x24\xb5\xcb\x88\x10\xab\x56\x41\xc8\x35\x8b\xca\x84\x84\x05\x78\x54\xdc\x18\x26\xfa\x02\x40\xdc\xf4\x9f\x4e\x4f\x4e\x86\x79\x72\xcf\xcc\xc9\x3d\x9b\x43\xa9\xf0\xe8\xa7\xad\x92\x00\x99\xc6\xbe\x35\x33\x86\x8b\xb1\x26\x33\x4c\x3e\x74\xc8\xa2\x95\xb1\x7e\xcb\x5b\xac\x45\xde\x65\x72\xa8\x8f\xc8\x6d\x32\x61\x53\x7a\x84\xbb\x0b\xcf\xa1\xa6\x4e\xeb\x6d\xab\x2f\x6e\x19\x23\x13\x63\x66\xfa\xf4\xe4\x64\xcc\xcd\x24\x1f\x5a\x9d\x07\xdd\xcb\x52\x8d\xf1\x1f\x27\x5c\xeb\x9c\xe9\x93\x1f\xbe\xff\x1e\x96\x07\xe8\x61\x48\x93\xfb\xb1\x02\x23\xd4\xa2\xe2\x53\xda\xf2\xdb\x45\x54\xe8\xcd\x41\xb2\x94\x14\x03\xf6\x79\xa6\x98\xae\xab\x5b\xb5\x6e\xca\xa8\x26\xed\x4f\xb7\x44\xcf\x85\xa1\x9f\x4f\xc9\x47\x2c\x32\x46\x7e\x94\xb9\xd2\xe4\x9c\xce\x8f\xe5\xe8\x78\x2a\x85\x99\x90\x8f\xf0\xbf\xee\xa7\x47\xc6\xee\xc9\x2f\x8c\x2a\xb7\xbf\x78\x5b\x05\x68\x3c\x30\xbf\xa9\x5c\x68\x57\xbd\xec\xfb\x7f\xf7\xe5\xcb\x4e\xc9\x77\x27\xdf\xff\x3b\xf9\x03\xfc\xff\xff\x47\xfe\xd0\x84\xf8\xb8\x51\x9a\x4e\x51\x5a\xae\xb6\x35\x58\xa9\x2d\x80\xb8\xcf\x94\x2c\x76\xaa\xb6\xe5\x7b\x9e\xdc\xcb\xd1\x68\x60\xf8\x94\x61\x54\xd0\x80\xaa\x05\x4c\x80\x2d\x13\x90\xb9\x03\x0f\xc6\xf2\x27\x05\xe8\x95\xeb\x14\x43\x74\xfd\x71\xd3\x79\x01\xf0\xfa\x88\xb5\x81\x23\xd0\x5c\xae\xe1\x2b\x96\xda\x53\xb1\x89\xe1\xd0\x1b\x2b\x17\x4b\x13\x14\xc1\xde\x31\x14\x76\x30\xd6\xc7\x2e\x26\xb9\xaa\xac\xdb\xa2\xef\xeb\x2b\xf3\x76\xc0\x04\x9f\xd4\xd3\x71\x2b\xd5\x4e\xa2\xd4\x3d\x5b\xf0\x83\x6e\x74\x25\x7b\x9c\xd7\x18\x51\x1d\x42\x3b\xa5\x0a\x59\xfc\x18\xcf\xe4\x70\x51\xfb\xa2\x77\x75\x7e\xf5\xed\x3d\x35\x4a\x8e\xa9\x78\x0b\xc8\x34\xae\x9c\xbc\x7d\x87\xa7\x48\x5d\x10\x37\x45\xe2\xda\xd0\xc2\x2e\x5c\xed\x1d\x1b\xeb\xa5\x5c\xa1\x7d\x79\xbd\xf3\x6e\x97\xef\x3c\x7c\x52\xcf\x2c\xcb\x60\xb6\xa1\x83\x02\x3b\x12\xe6\x6a\x6f\x37\xcb\x0d\x17\xe7\xbb\x4d\x85\xfc\xdb\x19\x4b\x38\xd3\xd8\x34\xf8\x3d\x20\x46\x43\xf8\xe8\x1b\x17\x35\x5c\x7b\xa8\x20\xe5\x6b\x1f\xa9\x9c\x0b\x58\x31\x3b\x50\xca\x27\xd0\xee\x0b\xde\xe0\xf1\x9a\xca\x05\x80\x89\xa2\x96\x6d\x6c\x99\xfd\xaa\x31\xd9\x2d\x2e\xb4\x6e\x05\x85\xe3\x11\x4d\xec\xea\x85\xa4\x2a\x0c\x65\x8e\x59\x55\xdd\x3a\xf6\xa8\xbe\xdf\xaf\x31\x7c\x67\x84\x55\x9e\x16\x88\x84\x48\x8d\x2e\xe2\x88\x2f\x64\x90\x19\xaa\xef\x9b\xd2\x34\x36\xae\x76\x67\x97\xc2\x67\x30\x2d\x1b\x9f\x8f\xb0\x64\xb1\xac\x06\xc0\x34\x56\x41\x8c\x40\x1b\x7c\xf8\x0e\x56\xc2\xe1\x19\x4b\xab\xd9\xb2\xd5\xf1\xaf\x22\x03\xf4\xe8\x44\xf6\x5a\xc8\xc7\x9c\x5a\xf5\x15\x9c\x8e\x53\x2a\xe6\x78\x90\xec\x85\x45\xf5\xbd\x0e\x30\xbf\x44\x4f\x69\x96\x1d\x11\xc5\x72\xa8\x22\x7f\x44\x34\xcb\x46\xc7\x1e\x6c\x27\x25\x99\x1c\xf3\x84\x66\x64\x98\xc9\xe4\x5e\xf7\x85\xbd\x41\xc4\x18\x2f\xbe\x99\x92\x09\xd3\x3a\xba\x72\x8b\xe8\xcb\x99\x92\x69\x9e\x60\xd1\x3a\xac\xcf\xcb\xb5\xe1\x49\xa5\x52\x99\xe5\x88\xe0\x2f\xb5\xba\x49\x22\x11\x99\x18\x86\x6b\x45\x00\x86\xc9\x9a\xb9\x2f\xe4\x0f\x60\x22\x34\xe3\xff\x80\xfc\x00\xf4\x22\x36\x51\xef\x1e\x92\xce\xfc\xf6\x0c\x4c\xf9\x34\xac\xa0\xe7\x33\xf7\x19\x9c\xa1\x65\x14\x73\x53\x26\xe7\x40\x0d\x81\xcc\x03\xe6\x87\x27\x8a\xc2\x47\x5a\xc2\x27\x0b\xae\xc3\x17\x96\x9b\x04\x43\x6e\xc8\x48\x5a\x45\xd3\x67\x58\x2b\xcd\xa1\xe7\x45\x86\x70\x68\xdd\x57\x93\x72\x98\xa3\xf6\x8a\x78\xb0\x44\xe2\x97\xc7\xae\xbd\xbd\x46\x8e\x42\x01\x33\xaa\x9d\x8b\xf4\x38\x40\xd2\x58\x7e\xd8\x17\x00\x4f\x6d\x3b\xa9\x54\xc3\x5a\xa4\xa8\x17\x5c\xb4\x6c\x3f\xcc\x71\xc3\xda\x65\x7e\x91\x37\x21\xf2\x32\xdd\x42\x22\xd0\x86\xcc\xae\x14\xf7\xa5\xea\xa2\x75\x91\xda\xe0\xe9\x03\x2f\x60\xd6\xa3\x8e\x1a\xf7\x76\x6b\x6b\x61\x65\x54\x0b\x61\xec\x7c\x84\x44\x06\x63\x83\x10\x34\x57\xeb\xbc\x69\x44\x5f\x24\x7b\x76\xd9\x46\x5e\x53\x83\x05\xab\xd9\x54\x1a\x04\x17\x46\x9c\x5f\x6f\x26\x41\xf8\xe0\x61\x26\x87\x70\xaf\x00\x04\xb0\x8f\xac\x8d\x42\xef\x70\xde\x2c\x25\xdf\x46\xd7\x44\x88\xd6\x7f\xdb\x14\x10\xb9\xbf\x14\xde\xaa\x6d\xa5\x31\x91\xb7\x8c\xd3\xd9\x22\xd7\x95\xf4\x90\x68\x56\x23\x6a\x39\x77\x53\xec\xd2\x66\x69\xbf\xa5\xdd\xdf\x43\xda\x6f\x65\x1a\x0d\xae\x75\x39\x7e\xd2\x40\x5b\x3b\xa9\x0b\xb9\xbe\x1e\x89\x99\x77\x28\x7f\x94\x36\xc7\x93\xd9\xbc\x6e\x8b\x5e\x56\x4a\x73\x05\xe7\xf5\xcb\xa6\x34\x57\x06\xf3\x92\x53\x9a\x2b\x43\x7d\xb9\x29\xcd\x35\x03\x5d\x23\xa5\x19\xdd\x5e\x03\x4b\xd4\xeb\x31\x05\x08\x3b\x19\xe6\xa3\x5b\xb8\x4d\x96\x8e\xd1\x95\x42\x42\xe6\xec\xe5\x1c\x87\x24\x01\xa3\x75\x81\x86\x4d\x7e\x64\xaa\x77\xa2\xbd\xe0\x31\xe0\x1a\x55\xcc\x59\x46\x45\x99\xa9\x42\x49\x11\xc5\x12\x4b\x7e\xc8\xa8\x8a\xca\x76\x47\xce\x68\x62\x47\x81\x46\xbe\x84\xce\x5c\xac\x75\x13\xf6\xda\xcb\x09\x51\xdd\x2c\x5b\x1c\x92\x7a\x4b\xac\x7e\xad\xcc\xbe\x80\x4b\x42\xd1\xe6\x3e\x91\x8f\x4e\xb4\x01\xf2\x73\xd5\xc3\x36\x94\xb4\xe3\x7c\xf3\x0a\x4d\xaf\x99\x6f\x5e\x9a\xc8\x21\xdf\xbc\x7e\x83\x5f\x6c\xbe\x79\x65\xcf\xd7\xcb\x37\xaf\xdb\xf2\x2d\x5c\xbd\xa5\x66\xbe\x9a\x7c\xf3\xca\x8a\xbe\xe4\x7c\xf3\xca\x50\x0f\xf9\xe6\x4f\x32\x9b\xa7\xca\x37\x5f\xcd\x00\x6a\x33\xaa\xeb\x4f\xdd\x66\x19\xd5\xb5\xb2\x77\xf3\xd9\xde\x35\x91\x09\x6e\xfa\x67\xce\xa8\x2e\x4d\xe0\x10\xe4\xb1\x63\x71\xea\x32\x09\xba\x11\x40\x01\x3d\x97\x44\x59\xbd\x87\x96\xe4\x54\x83\x3e\xb9\x07\x8a\x7a\xda\xf0\x20\x30\x01\xaf\xab\xf2\xb6\x4b\xeb\xa0\x1d\xa2\x82\x15\x4d\x7c\x02\x23\x4a\xc7\xb1\xf3\xeb\x40\x81\x1b\x9b\x0c\x1b\x16\x39\x98\x8e\x31\xe2\xbf\x81\xe4\x6a\x8a\x5b\xec\x40\x80\xbe\x22\xc9\x86\x36\x57\x3f\x08\xb0\xbd\xd6\x5b\x73\xa0\xde\xcd\x7e\x9a\xfd\x5d\xfc\xdf\xc6\x05\xd9\xb5\xa4\x77\x32\xcb\xb7\xc9\x08\x19\x6f\xf7\xd9\x94\x4d\xa5\x5a\xe5\xfb\xaf\xfd\x52\x1b\xa9\xe8\x78\x95\xb6\xb9\xee\xea\xed\xba\x6a\xbe\x44\xd1\x66\xc6\x45\x0f\x13\xb0\xdc\xda\xe1\x6b\x9e\xc7\xee\x27\xd0\x17\x6a\x1d\x9c\xc1\xbf\xbc\xa5\x0b\xb3\x21\x9b\x7b\xb1\x43\xf0\x6d\x68\xa6\x8e\x63\xf1\xa8\xe4\x54\x58\x1c\x41\x69\xdd\xbd\xf0\xbc\xc3\xb2\xe7\xaa\x31\xc0\x66\x1d\x73\x03\x16\xd2\xb3\x92\x79\x8c\xe8\x59\xa5\xb4\xe1\xbc\x26\x28\x7b\x3d\x7b\x16\x17\xe6\xcf\xff\xb6\x91\x57\xc6\xca\x97\x6e\xdd\x46\x3c\x63\x84\x26\x09\xd3\x68\x01\x71\x01\x58\x58\x51\x25\x57\xd9\x2e\xbb\xca\xc5\x18\xe6\x6d\x85\xc9\xa8\xf6\x75\x20\x1e\xbc\x33\x26\x4a\xe6\xe3\x89\xd7\x80\x2d\x15\xda\xa9\xd5\xed\xe5\xcf\xe8\x37\xdf\x65\x2f\xdf\xe5\x3c\xdb\xce\xbe\x70\x8b\x54\xe7\x68\xf2\x43\xb7\x47\xf4\x24\xd0\xff\x10\x9a\xad\xdd\xd8\xc5\x41\xaf\xdf\xa7\xfb\x36\x58\xd3\xa0\x9b\x23\x1f\x24\x34\x92\x59\x06\xf6\x20\xcd\xa6\x0f\x4d\x55\x5f\x60\xc2\x3d\xbe\x65\xbd\x0d\xf8\x1a\xac\xca\xda\xd0\xe9\x6c\x2d\x74\x91\x6b\x94\x0f\x34\xf1\xa3\xaf\x3a\x5b\x30\x12\x42\x0a\x26\xea\x2c\x04\x9f\x16\xf1\xb3\x5e\x99\xcb\xd5\xc7\x47\xec\x2d\x26\xc5\x2f\xc9\x33\xc7\xa5\xd4\xcd\x63\x03\x16\x50\x8a\xce\x2c\x78\xbc\xf7\x14\xa2\xe8\x09\x18\x1b\x7d\xd1\x2e\xc5\x71\x7a\x60\xee\xe1\xbc\x88\x07\x43\xf9\x2d\xe6\x24\x00\x57\xe4\x54\x54\x23\x9d\xe2\x0a\xb2\x26\x26\xcf\x63\xc4\x8a\x8f\x4a\x81\x50\x36\x96\x1e\xd3\x64\x9e\x64\x3c\x89\xf4\x8e\xb1\xa2\xb3\x49\x1d\xbb\x59\x2c\x5d\xf8\xd2\xf2\xda\xbe\xf6\x04\xc7\x35\x2b\xa2\x2e\x0d\xc6\x8b\x6b\x8a\xbe\xea\xc4\xcb\x45\x72\x3c\xe4\x5c\x6e\x40\x92\xbb\x8d\x67\xef\x94\xf8\x9a\x52\x40\x9b\x29\xef\x0b\xa7\xdb\x2d\x0e\xec\x4b\x26\x7e\xd6\xdc\x17\xdb\xad\xee\x97\x4d\xf7\x5c\x6b\x1a\x4d\xfb\xba\x4e\xa6\xe7\x51\x5c\x14\x3a\xdc\xfb\x2b\xf2\x3e\x9b\x57\xe9\x85\xd0\xe0\x3e\x23\x50\x37\xc3\x90\x8d\xa3\x50\x37\x11\x15\x37\x0b\x48\x0d\x1b\xf5\xba\x82\x52\x0b\xd0\xda\xed\x02\x53\xdb\x51\x25\xd2\x89\xcc\x00\x24\xb3\xb4\x5a\xa1\x83\x10\xdb\x16\x16\xc8\x6f\x86\x55\x1d\x51\x74\x2d\xd0\x16\x97\x85\x9f\x86\x4d\xfc\x3a\x42\x50\x57\xe8\x43\x1b\x86\xa1\xc6\x8b\xba\x5b\x28\xea\x8e\xfa\xcd\x66\xe1\xa8\x95\xce\x96\xee\xf7\x16\x7e\xf5\xa6\xc2\xbb\x3b\x10\xcd\x94\x7e\x1e\xcc\xa8\xa2\x59\xc6\x32\xae\xa7\x4d\xc7\x96\x0b\xc3\xc6\x55\x62\x29\x19\xa7\xfe\xf4\xc3\xf2\x20\xa6\xb2\x03\xc1\x57\xae\x02\x17\x42\x3e\x1d\x22\x1d\xf9\x81\x38\x94\x56\x23\x89\xca\x45\x8c\x3e\x1b\xd6\x17\xf3\xa8\xb0\x14\xd6\x28\x07\x77\x38\x4d\x26\x00\xe7\x3b\xa2\x5c\x09\xa6\xf5\x46\xe7\xff\xc9\x6b\x89\x2f\x6c\xdd\x21\xa0\x26\x04\xd4\xd4\xaf\xcd\x4b\x0c\xaa\x29\xca\xd9\x6d\x18\x58\xd3\xb4\xfd\xfb\x60\x02\x7b\x0c\xb0\xf9\xc2\x61\x2b\xeb\x46\xac\x7c\xd9\x38\xa0\x35\x43\x80\x0e\x61\x35\x5f\x47\x58\x4d\xf3\x79\xdb\x28\xb4\x66\x45\x72\xa6\xef\x65\xd7\xf8\x87\x90\x30\xf8\xa4\x31\x10\xc1\x7c\x1f\x7d\xb1\x66\x1c\x44\x91\xd1\x78\x88\x85\x78\xd2\x58\x88\x9a\x85\x5e\x1d\x0f\x51\x92\xbb\x9f\xd5\x89\x5d\xc5\xbb\x7f\x4a\x47\xf6\x2a\x5d\x25\x1f\x0e\x9e\xfc\x1c\xd5\xce\x79\xdd\xe3\xf4\x29\xec\xad\xaf\x7a\x4a\xd8\x74\xc8\xd2\x14\x6c\x19\x46\x3a\xac\xd9\x82\x04\x04\x43\x62\xb5\x9c\x94\x6a\x4b\xb9\x34\x93\x62\xac\x79\xca\xa2\xfa\x0f\x85\x7c\x83\xe9\x05\x7d\x01\xfb\x9b\x65\x4c\x79\x55\x58\x91\x6f\x35\x17\x09\x8b\xd5\x63\x45\x52\xc9\xb4\xf8\xc6\x60\x61\x5f\x2a\xe6\xe4\x5e\xc8\xc7\x8c\xa5\x63\xd8\xa1\xea\x60\x8e\x09\x67\x47\x84\x9b\xf0\x99\x62\x34\x99\x58\x76\xd9\xb7\x63\x07\x6f\x11\x0a\x62\xcc\x7d\x1b\xa1\x2a\x87\x66\xde\xb6\x08\xe9\x0a\x32\xa2\x89\x39\x22\x3a\x1f\x16\xed\xa7\x12\x61\x72\x1f\x98\x88\x27\x5e\x34\xf2\x64\x41\x0c\xb5\x41\x0b\x0d\x4a\xa1\x25\x80\x76\xc6\xe9\x4e\xfe\xa6\x07\xba\x0b\x86\xc1\xc7\x5c\x1b\x02\x6e\x0e\x22\x45\x38\x4c\x2e\x1b\x2b\xe0\xb5\x00\xcc\x28\x62\x9f\x2c\xa9\xf4\x41\x2b\x53\xd9\x74\x2c\x85\x73\xd0\xa1\x9b\x3a\x4b\x03\xb4\x8b\xcb\x9d\xca\x47\xa1\x8d\x62\x74\xea\x14\x44\xcb\x89\xc1\x8a\x8e\xae\x41\x82\x25\xa5\xe1\x06\xde\x64\x8b\x2f\xb8\xb8\xb7\xbb\x5b\x20\xd4\x00\xe6\x33\xf4\x5c\xb3\x69\xef\xb8\xa0\xa5\x40\xa3\x2d\x76\x2d\xcb\x37\x72\xd5\x47\xb5\x50\xe6\x4d\xe0\x40\x86\xae\xc2\xeb\xd9\xc4\x1e\xa6\x01\xe8\x9a\xd8\xee\x08\xb0\x3a\x44\xc4\xa5\xc4\x50\x00\xa5\x9a\xb0\x6c\x16\xa1\xcc\xce\xa8\x32\xa1\x98\x8c\x83\xad\x48\xe4\x74\x9a\x0b\x40\x1a\x71\x7a\xda\xa3\xc3\x27\x70\xda\x7c\xd1\x78\xab\x2f\xba\xe6\x1b\xa8\x32\x25\xc5\x38\x9b\x13\x9a\x3e\x70\x5d\xa0\x05\x25\x52\xe8\x7c\xca\x54\x05\x83\x1d\xf3\x7b\x08\xf5\xb4\x62\xc7\x66\x05\x2f\x87\xba\xe2\x93\xe4\xc6\x64\xc8\x46\xf6\xd2\x9d\x51\xa5\xbd\x69\xaf\xc6\x2c\xe7\x36\x37\xb5\x6b\xf5\xc5\xce\xe4\xcf\xf1\xb1\x23\xd3\xe2\x84\x52\xa7\x6f\x9c\x54\xcf\x67\x54\x65\xa6\x29\xec\x68\x61\x52\x64\xf9\xc5\xe4\x56\xe1\x7c\x55\xe6\xd2\xb9\x2f\xe9\xac\xe1\xd0\xd8\x7e\xbc\x40\x83\x83\xdb\xc8\x08\x53\x99\xa0\x1b\x35\x5a\xd6\xe2\xb3\xc9\x38\x5c\x0a\xda\x50\xc3\x13\x5f\x31\x27\xd4\x03\xc3\xaf\x9b\xb7\x76\xd7\x42\x4d\x3a\xa1\xd9\xe2\x0e\x37\xaf\xe5\x2d\xbe\xbf\x9c\xf7\xb9\xe3\x86\x6d\x2f\x0d\x21\x4b\x64\x96\x6d\x02\x08\x54\x99\xf9\x59\xf1\xf9\xf2\x11\x15\xfd\xd8\x0d\xf0\x7b\x01\xa7\x06\x8d\x6f\x34\x73\x92\x85\x36\x6e\x97\xe2\x97\x90\x87\xce\x9d\x71\xaf\x2f\xe4\x08\x70\xa2\xb2\x26\x6d\x79\xa6\xe4\x94\x6f\x92\x51\x8d\x48\x83\x37\xde\x87\xba\xc2\x48\xec\x3d\xad\x80\xe5\x8f\xe4\xe5\x7a\xc4\x72\xf0\x02\xe5\x8c\x25\x67\x68\x4a\x17\xea\x72\xad\xb5\xe0\xab\x94\xdf\x36\x99\xa2\x59\xc1\xad\x9e\xc6\x82\x11\xf7\x0c\x2a\xfd\xd3\xec\x91\xce\x8b\x40\xbb\x4d\x8e\x53\x11\xca\xe6\xce\x0b\xf5\x54\x16\x9d\x98\xe0\x83\xc6\xfd\xc2\x55\x58\xe7\x04\x9d\xd5\x91\xe1\xc6\x67\xc9\xcf\xf9\x29\x85\xec\xf8\xd8\xc7\xf2\xf5\x26\xb7\x61\xf9\x30\x44\x2d\x12\x18\xce\xf2\xa5\xfa\x58\xa2\x9c\xbd\xaf\x51\xa5\x1d\x82\xba\x9c\x77\x41\x5d\xd7\xb7\xfa\x0c\x6b\xe6\xc8\x7a\xad\xc5\xda\x31\x76\x77\xb3\x2c\x5d\xdf\xe3\xf2\x8a\xd1\x9b\x94\xa5\x5f\xad\x43\x8c\xac\xec\xe2\x4a\x89\x04\x38\x4f\x17\x12\x32\xe2\x19\xd3\x2d\xd2\xad\xd1\x27\x40\xca\xf1\x52\x15\xe0\x72\x80\x83\xd1\xcb\x3b\xb9\xe2\x11\xa6\xa9\x97\x6a\x08\x77\x55\xb0\x0a\x93\x83\x62\x76\xcc\x09\xfa\x2a\xa4\x80\x0c\x63\xf0\xe6\x29\x8e\xf5\x66\xac\x78\x69\xc0\x7a\x66\x79\x01\x77\xb5\x6a\xb0\x62\x60\xf8\xc0\xca\xd8\x86\x29\x9a\x18\x5f\x9b\xc6\x8d\xaa\x61\x4b\xf7\x01\xd9\xb6\x7e\xe8\x8b\xef\xb5\x67\xbf\x58\xdc\x9b\xda\x11\xf6\xca\xad\x6f\x3c\xba\x20\x97\x6f\xee\x78\x79\x0f\x9f\x7a\x63\x12\x25\x23\xc5\xc0\xde\x38\x0d\x31\xd5\x22\x65\x4a\x1b\x29\xe1\x86\xba\x3d\xff\xe9\xe4\xae\x4b\x98\x49\xa0\x90\x43\x5f\x24\xfa\xe1\xc8\x0a\xb4\xbf\xe6\xcc\xd8\x9f\x9b\xd0\x03\xa7\x4c\x68\xe0\x04\x7c\xdd\x02\x71\x7e\x61\xec\x7f\xcf\xcb\xdf\x2f\x21\xf9\x30\xb1\x50\x16\xc8\xd2\x6e\xa8\x0b\x64\xc9\x14\x60\x64\x70\x69\x75\x0d\xc5\x60\x1d\xc7\x4e\x1d\x10\xec\x16\x41\x16\xe2\xef\xb9\xd8\x50\x4c\x3a\x2b\x3e\x8a\x46\xd1\x20\x85\x4d\x67\x54\xf1\x1a\x64\x85\xe5\xd1\x1b\xf8\x4d\x6d\xeb\xab\x98\x88\x5f\x57\x4a\x5c\x3d\x4c\x52\x60\xe6\x12\xa3\x18\x03\x16\x12\xe8\xc9\xdd\xf5\x2e\x12\x3b\x4c\x2c\xfa\xa8\xd5\x17\x1f\xbd\xfd\xb3\xf8\x35\x94\x2e\xc2\x50\x1d\x96\x92\x1c\x74\xa6\x72\x2b\x58\x71\x98\xeb\xf0\x03\x80\x08\xe9\x3c\x33\x88\xe9\x38\x82\x1a\x97\x7e\xa0\xf8\xa4\x8e\x4b\x28\x2a\x92\xc9\xa5\xdc\xad\xa4\x19\x1f\x0d\x58\xb6\x89\xec\xd8\x1d\x75\x32\x6d\xe9\x3b\xb9\x6f\x38\x9d\x7f\xf4\x58\xb0\x1b\x6c\x50\x31\x19\x90\xdc\x3c\xb2\x1d\x6a\x25\x68\xa7\xcb\x10\x21\x92\x11\x30\xb2\x55\x63\x6e\x30\x46\xd9\xee\xa2\x93\xad\x7d\xc1\x55\x25\x33\xe2\xcd\x72\x43\xe8\x85\x50\xd3\x17\x2a\x17\x00\x05\x13\xec\xe7\x94\x68\xe6\xab\xba\x26\x52\xa0\x0c\xe0\x8c\x27\x63\xcb\x26\xac\xe4\x07\x4e\x14\x29\x40\xa3\x92\xb9\x06\xa7\xfb\x94\x19\x7b\x41\x7d\x0b\x10\xc8\xe8\xc1\x38\x22\x33\xc5\xa7\x86\x3f\xb0\x80\xdf\x14\xef\xdc\x19\x35\x34\x93\xe3\xb6\x32\x7c\x44\x13\xd3\xa3\x3b\xa9\xcc\xd4\x35\xb3\xad\x17\xdb\x0f\x83\x74\xcf\xed\xda\x17\xe5\xaf\xa1\x14\x53\xed\x09\xde\xb4\x48\x53\xc1\xb8\x01\x98\x31\x41\x28\x3b\x1d\x4c\x0c\x34\x37\x72\x6a\x15\x52\x9a\x65\x73\x80\xa8\xb3\x4f\x26\x54\x4f\xfc\x3e\x23\xae\xdd\x3a\x57\x93\x5b\xdc\x33\x9a\x4c\xd8\x2d\x94\xb5\xac\x5b\xdc\xca\x28\xdf\x30\x91\x4f\xdf\x9c\x92\xff\x2e\xe6\x78\xd6\x3e\xfb\xb1\x33\x38\xef\xde\xb6\xdf\x5d\x74\xce\xa3\xf9\xb8\x27\x1f\xbb\xb7\xb7\x8b\xbf\xfe\xd8\xed\x2d\xfe\x78\x7d\x75\x7d\x77\xd1\xee\xd5\xb5\x72\x71\x75\xf5\xd3\xdd\xf5\xe0\x7d\xbb\x7b\x71\x77\xd3\xa9\xf9\xf4\xae\x17\x1e\xba\x67\x7f\x8b\xce\x10\x04\x5d\x40\x88\x48\xfd\x68\xab\xc7\xec\x98\x94\x5f\x3c\x25\x77\xce\x13\xe3\x8a\xff\x7a\x9b\x11\x85\xf8\x6b\x08\x09\x4b\xd1\x98\x94\xf6\x05\xf1\x9f\xdb\xb9\x37\x7d\x8a\x2e\xa2\x64\xc2\x48\x26\xe5\x7d\x3e\x73\x0c\x0c\x03\x05\x85\x44\x83\x0c\xd3\x51\x6b\x3f\x76\x7b\xa7\xc1\x23\xb4\xd8\x58\x94\x17\xe5\x49\x1d\xc6\x45\x3d\xd3\xc4\x72\xca\x8a\x3d\xc0\x91\x0c\x9e\xc2\xa8\x87\xb0\x01\xcb\xfa\xc1\xd6\xa8\x30\x95\x6e\xd2\xd4\xa1\x5a\xfb\x89\x45\x0d\x97\xb7\x6f\xd9\x6a\x86\xe5\x40\x64\x34\x32\x64\x09\xcd\xd1\x91\x66\x6f\x23\xa5\xa4\x8a\x07\x5c\x6c\xfb\x8e\x8d\xbe\x59\x14\x32\xca\x10\xc6\x58\xfa\xd5\x7e\x12\x9d\x1c\xab\x2e\x83\x2a\xed\xb1\x87\x26\x73\xb4\x4d\xf9\x2a\x7a\xd3\x21\x43\x7f\x09\x20\x27\xc4\x75\xf8\x09\x07\xc7\x1c\x35\xe4\x91\x41\xb0\x68\xee\xb0\xd7\x50\x3f\xb6\x07\x50\xfb\x7a\xe1\x3a\xa0\x51\x96\x82\x48\x1b\x39\xe6\x3e\x84\x62\xfb\xbd\x66\x75\xdc\x72\xf3\x88\xbf\x42\x6e\xc3\x46\x81\x85\x7a\x2f\x29\x8c\xb8\xc1\xde\xef\x59\x76\x8d\xdd\x79\x89\x0c\xb4\x78\x6d\xac\xe0\xe8\x06\xaa\x7a\xaf\x1e\x8f\x0f\x95\x2f\x21\x4a\x6c\x96\x43\x1b\x3c\xfc\x2b\xd7\xaa\x27\x53\x3a\xb7\xc4\x01\xe1\x09\x3a\x9f\xcd\xa4\x32\xa4\xa1\x0d\x02\x07\x1d\xc7\x07\x17\x83\x9b\x47\xe0\x50\xd0\x88\x95\x02\x74\x0d\x5a\xd3\xd2\xb8\xec\x30\x20\xb7\xae\xc5\xb1\x8f\xd3\xf1\x40\x59\x0b\xc8\x61\xd3\x92\xda\x5b\xa2\xd0\x3a\x01\x75\x97\x68\xa2\x99\xbd\x85\xd7\x85\x78\xac\xeb\xfd\xca\xb7\x50\xbb\xe5\x19\x1b\x99\x41\xad\x2f\x65\x89\xd9\xd0\xb6\x28\x1a\xb2\x38\x15\x1f\x4f\xf6\xd0\xe2\xfa\x92\xfc\x0f\xce\xd7\x65\xc5\xf7\x48\x8b\x57\x52\x1a\x94\x21\x0b\x3d\x83\xf8\xd5\x04\x13\x80\xeb\x14\x61\xa1\xad\xa0\xc6\x41\x52\xb3\x72\xf9\xbd\x90\x8f\x22\xd8\xcb\x75\xab\x2f\x3a\x14\x90\xca\x83\xb2\xe0\x62\x0f\x50\x52\x5f\x29\xa3\x97\xa0\x8f\x5f\x48\x5e\x7b\x41\xf7\xae\x9c\x43\x36\x27\x05\xbc\x75\xe9\xbb\x75\x4e\x0f\xda\x92\xbd\x9c\x86\x13\x76\x88\xae\x86\xcd\x9c\xbd\x1b\xe7\x59\xc4\x43\x83\xcb\xd4\x76\xd5\x22\x9f\xbc\x75\x06\x42\x3b\x0a\x58\x76\x83\x17\x4e\x46\xe7\x3e\x71\xb7\x6e\x61\xf7\x91\x0b\xbb\xef\x78\x8b\xe5\x0b\x1c\x92\x9c\x6a\x56\xb9\xa4\x24\x0b\x81\x56\xd3\x0d\x62\xc6\xce\xc2\x47\xb7\x6c\x79\x0c\xe8\x7b\x80\x78\x85\x12\xbf\x19\xdc\xd0\x96\x8f\xfe\x0f\xdc\x2c\xc8\x81\x75\xf1\xc1\xa9\x07\x16\x75\x7e\x49\x7b\x7e\xc0\xaf\x66\xa5\x80\x21\x24\xc7\x63\x35\xdd\x16\x69\x03\x48\x39\xc0\x4f\xdb\xab\xd0\x07\xe4\xf0\xb1\x90\xab\xc2\x06\x1a\x88\x29\x89\x88\xe9\xb6\x99\x98\x34\x50\x53\x11\xde\xbc\x1f\x8a\xda\x43\xb6\x8a\xe5\x2d\x74\x11\x56\x63\xfd\x1c\x95\x0d\x14\xec\x2f\x11\x82\xb3\x30\xdc\xe8\xc3\x7f\xd5\x0f\xfd\x43\x4e\x15\x15\x06\x02\x4b\x9c\xe0\xad\x58\x14\xad\xc8\x3e\x43\x04\x96\x40\x63\x2d\xfc\x14\x6f\xae\x77\xa4\x63\xe1\x66\x9e\x1e\x11\xde\x62\xad\x23\x57\x60\x48\xe7\xc3\xe2\xcd\x89\x95\x1c\xfa\x62\x21\xe7\xa2\x45\xda\x99\x96\xee\x0b\x26\x92\x0c\x8a\x02\x44\x31\x30\x81\xf2\x9d\xeb\x67\x38\x07\xf5\x02\xb6\xb2\x68\x5e\xba\x07\xd1\x87\x7d\x41\x35\x7a\x9a\x33\x38\xe9\xc5\xef\x75\x45\x3f\x4a\xd1\x07\x4f\x88\xbb\xb4\x70\x0d\x3d\xd9\x26\x21\xe8\xe6\xb2\x0d\x82\x37\x60\x63\x8a\x5c\x98\xbe\x08\xe4\x4c\xbe\xa5\x26\x63\x54\x1b\xf2\xfd\xdb\x8d\x02\x2e\xfc\xfc\x0a\xe6\xea\x4e\x6f\x11\x5a\xea\xc3\xd9\x9a\x6a\x16\x01\x26\x32\xa1\x44\xb0\x28\x40\xfd\xc8\x6e\xb3\x91\xe4\x81\xeb\x1c\xca\x2c\x44\x61\xec\x08\x94\xcf\x8d\xf6\x90\xa0\xa8\x30\x35\xb0\x11\x8f\x48\xe1\x7c\x92\x6e\x58\x35\x84\xe5\x74\x27\x8e\xca\x19\x24\x01\x16\x81\x65\x13\x6a\xfa\xc2\x31\x56\x1f\x8b\x11\xe1\x71\xb7\xb3\xac\x1c\xcc\x65\x05\x9c\x94\x09\x3b\x61\x28\x12\xd1\x0a\x0b\x74\x09\xda\x57\x88\xff\x29\xd7\x89\x0a\x67\xc5\x2a\x6a\x7d\x11\x12\xb9\xe2\xb6\x6b\x85\x9d\x3a\x13\xf0\x33\xca\xc0\x35\xdd\x5f\x60\xb5\x8e\x35\x64\xe1\xe6\x22\x6a\x4b\x5c\x26\x0b\x66\xf7\x25\xa2\xf1\xbe\x3b\x58\x5f\x52\xae\x37\x61\xc3\x2d\xfb\x28\x6b\x2c\xe2\x0d\x9b\x1b\x89\x16\xbb\xe8\xdf\x21\x10\xed\xb9\x9c\xb2\xa5\xa1\x77\x53\x88\x12\x5f\xcd\x04\x8b\xa8\x6b\xcf\x3a\xc0\x16\xcd\xd3\x28\x6e\x34\x0a\xaa\x83\xf0\x60\xcf\xf7\xdc\x9b\x0d\xce\xd1\xd9\xeb\x9e\xfe\x51\x31\x7f\x3f\x95\x10\x59\xb6\x38\xf1\x66\x59\xaf\x9d\xfe\x9d\x26\x4c\x24\x73\xec\xc9\x23\xf8\x2c\xa6\xa9\x79\xb0\x13\x0a\xf6\xf6\x5a\xe9\xd0\x15\xde\x69\x91\x0e\xdc\x33\xbe\x0e\x0f\x1d\x79\x9f\x41\xf4\x72\x5f\x58\xc5\xc4\x5e\xf1\x1a\x07\xed\xdb\x2f\x93\x78\xdd\x09\xc0\x2c\xd7\x9d\xdc\x2d\xd3\xd5\x60\x69\x4d\xca\x84\x4f\xb2\x85\x36\x00\x79\x8a\x74\xc6\xa7\x24\x95\xc9\x3d\x53\x27\x8a\xa5\x5c\x9f\x82\xfb\xdb\x34\xfa\xdd\xa6\x56\xd9\xde\x59\xd0\xd8\xb6\x14\x1e\xf6\xef\x22\x8a\x3d\x32\xf7\x11\xe1\x23\xd0\x26\x7c\xa6\x00\xa6\x0f\x38\xdb\x36\x61\xc2\xa8\xf9\x4c\x72\x61\x82\x25\xab\xb2\x10\x5e\xd1\xb0\x32\x5b\x53\x7c\xad\xda\x47\x98\xcc\x96\xd3\xee\x4d\x98\x66\x3e\x26\x00\x27\x65\x24\x41\x4f\x08\xb2\x8b\x19\x35\x13\x0d\xb9\x0e\xe5\x35\x70\x3a\x17\x7c\x6a\x57\x88\xce\x20\xa4\x00\x8d\x14\xc5\x47\x21\x88\x5f\x1b\x9e\x65\x7d\x21\x18\x4b\x35\x01\xdc\xd6\x6f\x6a\x73\x6a\xec\xa7\x47\x84\xa6\x29\xf9\x9f\xdf\xbe\xbf\xf8\xa5\xd7\x19\x74\x2f\xc1\xe2\xdc\xbd\xe8\xbc\x3d\x0a\x3f\x5e\xdd\xf5\xc2\xaf\x68\x60\x79\x60\x8a\x4c\xe9\x3d\x68\x78\x42\xa3\xf8\x07\xa1\xee\xf1\x48\x7d\xb6\x91\x7d\xa2\x99\x0f\x1f\x75\x62\x4a\xc8\x0d\x77\x7b\xb8\x02\xbd\x63\x03\xdd\xf7\x26\x7c\xb2\x9c\x06\x3d\xf1\x84\x2e\xbc\x18\x38\x65\xc2\x58\x1e\xe3\x8c\x7d\x85\xea\x5b\x10\x1c\x13\x63\x2e\x9a\x82\xdc\x98\x78\x78\x4a\x19\xfe\x27\x36\xff\xd9\x6a\xd7\xd7\x94\xab\xb5\x69\xaf\x23\x1e\xb8\x92\x02\xa6\x16\xac\x5a\x45\xb9\x50\x66\xbc\xaf\x2d\x3a\x54\x1a\x65\x61\x08\xa3\x98\x35\x06\x52\x56\x72\xa7\x5f\xc6\x74\xdb\xe8\xfa\x65\x9f\x8d\xf2\x79\x6d\xda\xb1\x1b\xfa\x40\x79\x06\x41\xb0\xfe\xa2\x29\x68\x10\xab\x50\x9e\x12\x96\xd1\xa1\x54\x90\x1a\x83\x51\x3b\xbe\x09\xb7\x60\x50\x8f\x2d\x34\xd4\xea\x8b\x73\x36\x53\x2c\xa1\xc0\xc5\x66\x56\x73\x01\x2e\x54\xb2\xa1\xb5\xb0\x0d\xc2\xed\xad\x43\x1b\x2b\xe2\x48\xf5\x74\x85\xb9\x4b\x97\xd7\xb5\x54\xeb\x5c\xff\xf6\x35\x58\x3a\x39\xb3\x7a\x5c\x85\xf3\xba\xbb\x79\xc4\x28\x16\xa3\x40\xa7\x90\x33\xe5\xbb\xa8\xd0\x2c\x2b\x21\x17\xdb\x83\xa3\x5b\xce\x4b\x5e\xbc\x29\x05\xf9\xe9\x2f\x9a\x0c\x73\xd3\x17\xe5\x36\xa4\x80\x9a\xc4\xef\xa8\x49\x26\x6f\xfb\xe2\xca\x6a\x99\x3f\xfd\xa5\x21\x6b\x3a\xa5\x86\x0e\xea\x89\xb2\x79\x4d\xce\xa9\xa1\x17\x92\xa6\x5c\x8c\x1d\x16\x40\xfd\x5a\xbc\xeb\xf4\xda\xa7\xc4\x27\x5a\x86\x7c\xc9\x02\x26\x21\x6a\x08\x18\x32\x4c\xc4\x73\x11\x60\xe5\x22\xb0\x7e\x67\x21\x03\xe9\xc9\x5e\x58\x7d\x01\x4b\x89\x5c\x95\x1b\x32\x93\x0e\x66\xd2\x6a\x65\x98\xc3\x4f\x43\xe1\xdd\x6c\x4e\xec\xea\x00\x19\x87\xcd\x70\xf2\x18\xc8\x33\x8b\xcc\xbe\x2f\x40\x3f\x0f\xd9\x6b\x99\x4c\x68\x06\x61\x73\xc7\x91\x49\xcf\x6a\xed\x32\x87\x1c\x24\x88\x57\x11\xf3\x72\x74\xab\x07\x01\x2f\x84\xb2\x78\xa3\x40\xff\x87\x7d\x74\xae\xd4\xa9\xb4\x1c\xa7\xd5\x17\xdd\x11\x46\xd5\x65\xb8\x3a\xf6\x43\x26\xc0\x9b\xec\x97\xc5\x3e\xf5\xfc\x08\x8a\xf4\xa0\x57\x91\x26\x60\xbd\x17\x73\x88\x89\x06\x68\x3a\x09\xd1\x19\x05\x77\x76\x44\xb9\xb0\x8b\xe1\x4e\x8c\x3e\xeb\x0b\x0c\xe6\x2b\xed\x4b\x9c\xf9\x1b\xf5\x2e\x05\xc4\x1a\x16\xd7\x65\x10\x30\x66\x2e\xf6\xd0\xc9\xfa\x33\xc5\x8e\x7d\x2d\x47\xfb\x6b\xb4\xa6\xf6\x86\x6d\x91\x9b\x58\xbd\x4e\x65\x92\x4f\x3d\x64\x0c\xe4\x6a\xb9\x20\x35\x77\x89\x06\x0a\xc1\x8b\xbd\x96\xe2\x7f\x17\xff\xb7\x56\x36\xbd\xde\xb1\x02\x70\xa0\xaa\xc1\xac\xdc\x52\xa9\xb5\xd5\x88\x16\x2b\xe0\x56\x2f\x0b\xd8\x0a\x28\x0d\x2c\xad\xf6\x29\xc1\x0c\x8d\x29\x75\x32\xfd\x46\x93\xee\xb5\x15\x52\xac\x52\x1a\x8e\x49\xae\x0d\x86\x68\x41\x9a\x0a\x7e\x8d\x61\xf2\x47\xe4\x3b\xd2\xcf\xbf\xfb\xee\x4f\x09\xf9\xec\xff\xf1\xe7\x7f\xff\xf7\x3f\xfd\x79\x9b\x4a\xd7\xd0\x6e\xb1\x46\x01\x94\xb3\x2c\xb5\xc4\x3b\xb0\xc8\x4c\x76\xd8\x05\x77\x46\x9a\x96\xdf\x69\xec\x8d\x69\x4e\x75\x8f\xa3\x10\x1c\x3a\x76\x87\x50\xc7\x87\x87\x94\x4e\x4f\xe1\xea\xd7\xcc\x1c\x95\x0f\x71\x90\x47\x9d\xd0\xfd\x3f\x96\x00\x0d\x0c\x2c\x35\x6f\x17\x2a\xc4\xb3\x20\x01\xdb\x46\xc8\xb7\xce\x44\x67\xc0\xc5\xf7\xd6\xdf\x41\x32\x4b\x99\x72\xc5\x91\xbc\x55\x2d\xd8\xfa\xe0\xfc\xb2\xcf\xb3\x4c\xba\x20\x0e\x4a\x34\x9b\x51\xb8\xe3\xed\x79\x6d\xf5\x45\xe7\x33\xb5\xcc\xf5\xc8\xd7\xb0\xc3\x82\xeb\xe0\x1b\x19\xd1\x84\x11\x94\xa6\xbf\xfd\x7c\x6a\x7f\x3b\x22\xf3\x53\x08\xc5\x3c\x22\xff\x38\x75\x19\xd0\x54\x99\x81\xfd\xe9\xad\x17\x87\x5d\x13\x30\x68\xae\x49\xff\xcd\xc9\x03\x55\x58\x47\xe1\xc4\x61\x70\xbe\x71\xec\x2f\xe0\x0b\xc7\x02\x74\x26\xe5\xbd\x0b\x54\x5d\xf8\xd2\xfd\xa7\x85\x04\x1e\x7c\x1b\xb8\xf9\x2e\xe6\xd8\x0a\x7b\xc7\xf0\x02\x23\xad\xd9\x90\xb4\xfe\xae\xa5\x20\xad\x39\x9d\x66\xee\x57\xff\xd4\xc5\xd1\x52\x4d\x7c\xb5\x27\x1f\x46\x93\xcd\xd1\x9c\xf9\x2e\x93\x43\x98\xd7\x47\x3f\x57\x8c\x44\x85\x81\x16\x57\x44\x71\xab\xb8\x89\x38\x71\x07\xb3\xc2\xa1\x3e\xa2\x7d\x05\xee\xde\xba\x59\x7d\x0e\x43\xfa\x2f\xf4\xdd\xc2\xa2\xf8\xf4\x35\xb4\xe0\x86\x30\x30\xdb\xe8\x67\xf2\xad\x63\x42\x6f\xed\x45\xe0\xc2\x7e\x71\x19\xea\x3a\x98\x87\x0e\x7e\x89\x3a\xe0\x82\x60\x42\xe2\x92\x2f\xff\x71\xd2\x6a\xb5\xc2\xd7\x97\x76\x2a\xff\x87\x70\xa3\x59\x36\xc2\x96\xfc\x35\x33\xef\x8b\x8f\x56\xd3\x89\x2d\xcc\x05\xc4\x0a\xd4\x2c\x4b\x64\x46\x8e\x0b\xab\x6b\x2a\x13\x4d\x7e\x6f\x65\xcf\x68\x29\xe1\x47\xab\x6c\xd5\x9f\x2a\x57\xba\xf2\x99\x8e\x95\xb3\x5a\x57\x0f\x56\x0c\xce\x10\xb4\x4f\xaa\x21\x42\xe9\x81\xa7\xb9\xa7\x05\x4b\x39\x27\x0e\xc0\x01\xaa\x4a\x1a\xf6\xd9\xc0\xa3\x06\xa4\x8c\xda\x90\xf0\x7a\x09\x6e\x81\xe1\x16\x80\x19\x48\xd6\x0d\x0b\xe0\x50\x0c\x1c\x6f\xc0\x79\x1e\xc5\x2e\x0e\x7b\xbd\x88\x18\x88\x4c\xe7\xd3\x29\x55\xf3\x93\xe2\xb4\x2d\x12\x67\x81\x47\x09\x5c\x26\xf3\x0b\x00\x6e\xd6\xcc\x1d\x2d\x17\x69\x10\x15\xbf\x9f\x84\x04\x02\x92\xb2\x04\x30\xa1\x21\xe4\x0d\x11\xd1\x99\x48\x64\xea\xe8\xba\xc8\xbb\x2c\x8b\x15\xe1\x9d\x45\x81\xc2\x47\xad\xe8\xc2\x62\x26\x0c\x26\x63\xbb\x37\xfc\xc7\x0d\x0c\x5c\x0e\xb4\xb1\xac\x72\xbc\x81\x0b\xb3\x7b\x75\xeb\xbf\x59\xff\xda\x85\x75\x28\xcb\xd5\xd4\xab\x72\xde\x6c\xa0\xe8\x63\x71\x01\x43\xfc\x05\x9a\x50\xf2\x90\x95\x8a\x7f\x9f\xc9\x6b\x9e\xd9\x7b\x0b\x68\xbc\xd5\x17\xa5\x9f\x8f\x08\xcb\xf8\x94\x8b\x10\xfe\x86\xec\x5d\x8e\x50\xc4\xbd\xe7\xc6\x6e\x99\x4e\xef\x2d\x07\xf3\x09\xfe\x91\xde\xd3\x16\x73\x4f\x3a\xc1\x7b\xe4\xcc\x04\xb9\xb6\xe3\x2a\x14\x69\x2b\x71\xda\x26\x8e\x9d\xd4\xc8\x23\xc2\x83\xf3\xdb\x17\xb6\x35\x7f\x96\x8a\xb8\xdb\xa8\xbd\xa8\xb9\x63\x8f\xe5\x15\x71\x00\xe8\xa3\x14\x3c\x1b\x84\xd4\x1a\x11\xa5\x23\xf2\xe9\xae\x49\x1b\x2e\x0e\xf7\x4b\xd9\xd2\xae\x8b\xba\x84\x2e\x01\x88\x89\x7c\xea\x0f\xd4\x06\x14\xd7\x71\x02\x50\xca\x92\x8c\xc2\xdd\x01\x0d\x41\x74\xe2\x11\x3a\x31\xa3\x1a\x88\xee\x7a\xc1\x6e\xfa\xe2\xbd\x54\x24\x63\xe2\x5b\xfc\xfb\x2d\x71\x77\xc3\x77\x47\xee\x3e\x57\xda\xe9\x79\x7e\xcf\x7d\xa9\x79\x30\x74\x03\x4a\xd8\x98\x42\x65\x5a\x67\x7d\x29\x29\x87\x20\x81\xcd\x65\x4e\x1e\xb9\x9e\xf4\x45\x4f\x7a\xab\x20\x11\x32\xe0\xac\x1d\x81\xc6\xb8\xd0\x1f\xd5\xc0\x04\x60\xd4\x75\x14\x50\x29\x1a\xbc\x79\xce\x0e\xc4\x99\x0e\x84\x4c\xd9\x86\xe1\xe6\x35\x45\x59\x9d\xb3\xc0\xfb\x98\x15\xc3\xbc\x2a\xb8\x29\x1a\x4b\x4a\x6a\xbd\xa1\x01\xbd\xb6\xba\xb1\x6b\x07\x4a\x2b\x3c\x8a\x6d\x21\x2d\xc2\xad\x06\xad\x78\xb5\x30\xca\x83\x2d\xad\x7d\xb9\x02\xf3\x4e\x3a\x5a\xba\x9d\x0b\x01\xe7\x9e\xc0\xb2\x87\x18\x60\x4a\xc6\x4a\xe6\xb3\x90\x2c\xee\xd3\xe6\x70\x1b\x9c\x4c\xd3\x15\x23\x79\xea\xb4\xaa\x0b\x2e\xee\x91\xe2\x9f\x6a\x8f\x42\xad\xe3\xe8\x77\x7f\x87\xe1\x8a\x1f\xbb\x82\xf7\x76\xd4\xda\xd0\xe4\x1e\x41\xf6\x96\xd5\xca\xde\xb4\xda\x77\x21\x31\xe5\x59\xe6\xba\x2d\x2e\xd0\xa2\x1c\xc8\x03\xa7\x84\x92\xbb\x9b\x6e\x7d\xdf\xf7\x7c\xd1\xe3\x52\x7f\x7b\x96\x09\x04\xfe\xe7\x27\xbe\x51\x6c\x64\x05\xcf\x93\x95\x48\x3d\x58\x80\x9a\xa0\xb4\x2a\xb7\xf7\x8e\x2e\x5e\x7b\x0b\x0d\xa6\x35\x94\x5a\x3f\xf9\xa2\xe3\x73\xf7\xf1\x47\xfb\x6d\xfd\x8e\x7c\x84\xa4\xa0\x80\x9c\x30\xa5\xc2\x4e\xd0\xf7\xda\x60\x22\xc4\x8b\x71\xab\x21\xdd\xcd\xb6\x1a\x10\xf6\xb8\x5e\x0c\xb2\xef\xca\xb7\xf2\x88\x36\x43\x9a\xa1\xc2\x6d\x26\xa0\x89\x1d\x91\xdb\x64\xc2\xa6\x14\xe2\x52\xa6\x65\x8d\x0c\x24\xd3\x6f\x33\xaa\xc6\x28\x27\x6a\x66\xf4\xdb\x9a\x1d\x2e\xc2\xb3\x77\xd8\xe1\x2d\xd0\xd5\x63\x1f\x0d\x48\x21\xcb\x38\x40\x18\x65\x19\x1a\x28\x30\x27\xdf\xbf\xbf\x3b\xb8\xf6\x51\x2b\x20\x33\x29\x05\x70\x74\xa9\x15\xc6\x9b\x31\x13\x76\x04\xf4\xbf\xa4\xd3\x90\x5f\xec\x51\xfd\x5d\x1e\x09\x8e\x6d\xc8\x00\x26\xaa\x79\x0c\x3b\x43\xf8\xc7\x43\x70\x88\xe1\x4d\x23\xe8\x8b\xb6\x7f\x25\xe4\x28\x82\x84\xab\x50\x0c\x81\x48\x36\x8c\xdb\x04\x29\x33\x2a\x97\xed\x26\xd7\x30\x89\x4d\x73\xc1\xaa\x55\x08\xac\x94\x1b\x40\xe2\x50\x8a\xf1\xea\x8e\x9f\x47\x43\xcf\x0f\x9b\xd7\x0d\xaa\x87\x79\x48\xaa\x75\x5d\xea\x3a\x5e\x2d\x51\xfa\xfc\x73\xd7\x50\x5c\x4a\x06\xa3\xdd\xb2\x79\x11\x5b\x65\x57\x1c\x35\x93\x4a\x67\x8b\x87\xd5\xec\xc4\x8c\x39\x9d\x0e\x94\xcc\x76\xd9\x23\xdf\x44\x49\xcb\x85\x6c\x1d\xab\x71\xfc\x9a\xd3\x0c\x2d\xf2\xc2\x91\xa3\x1f\x36\x08\x0c\x3f\xfc\x99\xb4\xe1\xb6\x24\x1f\x81\x2d\x82\x2f\x12\x5a\x33\x92\xf0\xe9\x8c\x29\x2d\xad\x3a\xd6\xb0\xc9\xf7\x7f\xd1\x03\x87\x98\x3b\xa0\x49\x22\xf3\x45\x74\xdc\x0d\x66\x52\xd3\x5a\x3c\x29\x4a\xee\xf3\x21\x53\x82\x19\x70\x71\xc3\x7b\xc4\xbf\xb7\xd6\x70\x25\xcd\xcd\xe4\x87\x41\x92\xf1\xb5\x61\x7c\x21\x0f\xa2\x6d\x3f\x3b\xc3\xaf\x96\x4d\xa0\xd4\x7e\x69\xe8\x82\xe0\x33\x82\xcf\x5a\xe4\x1d\x4d\xee\x99\x48\x5d\x85\x7b\x4c\x4d\x86\x0b\x0a\xb8\x65\x64\xa4\x2a\x4f\x0c\x35\x5e\x6c\xdf\xde\x42\x7d\x31\xa5\xf7\xa0\x20\x7d\x76\xe1\xe2\x56\xd1\xdc\x48\xd9\x0a\xf4\xb0\x80\xd1\xe0\xf3\x68\x35\x4b\x72\x65\xdf\xc0\xf3\x61\xf0\x7c\x80\x59\x09\x70\xca\x72\x41\x28\xc0\x3c\x7c\xa3\x49\x3e\xf3\xb6\x0f\xb0\x77\x64\xe0\x22\xc2\x49\x42\x45\x23\x6e\xa5\xc1\x09\xeb\x0b\x08\xbb\xf3\x2d\xce\x03\x57\x89\xbd\x92\xc1\x3b\x5e\x77\xf8\x46\x98\xe4\xbc\x9b\x37\x05\xad\x48\x7b\x0f\x29\x34\x13\x26\x40\x0d\x5b\xbf\x65\xc8\x14\x5f\x7f\xd3\x4a\xe1\x83\x38\x8b\xc2\x6e\x14\x96\x30\x17\xdc\x01\x47\x3b\x53\x61\x14\xd9\xe3\x2d\xea\xc5\xf7\x5c\x13\x4d\x0d\xd7\x23\x5e\xab\x9e\xc6\xa9\xe5\xbb\xac\x3a\xdd\x2c\x9f\xbd\x26\x97\xbd\xb2\x16\x21\x42\xb9\x45\xde\x83\xb6\x5d\x4c\xc9\xc8\x90\x19\xde\xc4\x12\xcc\x84\x35\x82\x9a\xed\xc3\xb7\xef\x67\xb0\xae\x11\x25\x44\xa3\xb7\x48\xbb\xb0\x72\x62\x6e\x3c\xda\x2f\x57\xcc\x88\x65\x9a\x6d\x43\x7c\x6b\x19\x04\xc0\x17\x08\x04\x44\x40\x56\xd1\xf6\xf7\x02\x60\x31\x0c\xf3\x11\x12\xbe\xe8\x3d\x13\xcb\xb4\xbe\xf5\x47\xd8\x29\x65\xcb\xd6\x0d\xb1\x1d\xf4\x7d\x89\x2a\xff\x36\x03\x5c\xff\xd8\x15\x70\x04\x7c\x74\x62\x97\xdc\xca\xf9\xc9\xbd\x8b\x33\x47\xab\x8f\x03\x34\x78\x9c\x48\x1d\x9f\x33\xbf\x7f\xb0\x99\x46\xe5\xcc\xc7\x93\x43\x98\x7e\x58\x60\x74\xd0\x0b\x19\xe3\x1d\xc0\xa8\xc3\x21\x45\x8b\x56\xd8\x6f\xe2\x59\x28\x2c\x03\x58\xcb\x7d\x53\x8b\xa7\xf9\xa7\xbf\xe8\x2b\x38\xb1\xfb\xc8\xda\xcd\xe8\x90\x65\x4f\x00\xe3\xb4\xa5\x1d\x32\x04\x83\xe0\xb8\xc0\xe6\x9f\x86\x2c\xf1\x99\x4c\x49\x41\x5e\x4d\x31\x89\x42\x48\x0c\x06\x78\x81\xd3\x8a\x06\xb7\xf6\xdc\x56\x51\xf6\xc7\xc8\x59\x89\x75\x3a\x11\x1a\x25\x12\xb9\x5c\x66\x17\x28\xbf\xee\xfa\xe7\x3a\xdc\x27\xf5\x34\x76\x2d\xd3\x5d\x08\x6b\x73\xf8\xab\x45\xba\x5e\x23\xe0\x50\xd7\x55\xb6\x59\xb2\x12\x33\xd9\x1c\x2a\x96\x0e\xd6\x2f\x08\x03\x6e\xc7\x61\x3e\xba\x05\xf0\xdd\xa6\xec\x75\x8f\x3a\x34\x61\x21\x1f\xc5\xee\xb3\xed\x26\x44\x47\x37\x6d\x8a\xf3\x62\x15\xd7\x3f\x25\xff\xfb\xf6\xea\xf2\x78\x4a\x95\x9e\x50\xc8\x0e\xf4\x6d\x1d\x79\xbc\x77\x54\x40\xbd\x75\x9d\x0b\xd2\x17\xc7\x64\x2c\x8f\xd0\x99\x73\x4a\x26\xc6\xcc\xf4\xe9\xc9\xc9\x98\x9b\x49\x3e\x6c\x25\x72\x7a\x52\xac\xcd\x09\x9d\xf1\x93\x61\x26\x87\x27\x8a\x41\xcc\xdd\xf1\xf7\xad\x1f\xbe\x87\xad\x39\x79\xf8\xfe\x04\x4c\xf8\xad\xb1\xfc\xfd\xc5\x0f\xff\xf1\xa7\x3f\xdb\x86\x67\x73\x33\x91\xe2\xd4\x79\x8a\x96\xb6\x7d\x8c\x82\xef\x09\x7e\x52\xe9\xe5\x3f\x5a\xdf\xc5\xc3\x70\xaf\x4e\x65\xca\x32\x7d\xf2\xf0\xfd\xc0\xef\x4c\x6b\xb6\x89\xef\xab\x60\xf8\x61\xc9\x2b\x85\x90\xec\xef\x81\x64\x7c\x76\xd0\xaa\x6d\xa9\x39\x2b\x71\x44\xe5\x0e\x27\xe6\x9e\xad\x2a\x14\xbe\xec\x3c\x04\x49\xaa\x41\xa7\xdf\x14\xdd\xb7\x51\xb6\xd9\x28\x81\x0c\x9c\x6f\x3c\x01\xe4\x48\xb4\x41\xcc\x28\xaf\x0b\xf3\x71\x4e\xe6\x5d\xd6\xef\x29\x31\x50\xf7\x0d\x7e\xea\xa6\xbb\x25\xf0\x69\x86\x5f\x7b\x97\xb8\x7c\xf4\x80\xa7\xfb\x80\x09\x5d\xb3\x3e\x46\xc0\x52\x44\xe2\x81\xb1\xf8\x71\x6d\x46\x23\xa5\x25\xc6\x28\x09\x17\x04\xa9\x21\x60\x12\xd1\x08\xe4\x28\xa0\xba\x62\xac\x2b\x02\x40\xcb\x51\xcd\x3f\xde\x65\x72\xa8\xdf\x06\x0c\x14\xaa\x7d\x1f\x05\x28\x41\x33\x09\xee\x07\x44\xd4\x2f\xc5\x53\xea\x27\xfe\xcc\xc4\x52\xc8\x26\x0b\x5f\x4f\x54\x45\x28\x2a\xe6\x64\x52\x25\x73\xe1\x41\x18\xa5\x60\x72\x04\x41\x02\x70\x01\x7a\x27\x08\x18\x41\x84\x34\x51\xfe\xa5\x62\x33\x64\xa4\x60\xae\x6b\x5e\xee\x1d\x81\x48\x57\xad\xf3\x53\x00\x91\xee\xba\xee\xee\xe0\x7c\xa1\x05\xdf\x35\x52\x01\x8f\xd2\x06\x6c\x16\xde\x5f\xe9\x99\x08\x7c\x00\x5c\x11\x71\x99\x2f\x84\x1b\x81\x00\x62\x76\x6c\xe4\x31\xe4\xad\x43\x36\x34\x42\x03\x37\x15\xcc\x00\x8f\xce\x26\xd7\x81\x7d\x7f\x8d\x71\x62\xd0\xf8\xe7\x68\xa0\xee\xee\xd5\xc4\x57\x67\x06\xe5\x52\x08\xa6\x9c\xb1\x7a\xe5\xcd\xb1\xa1\xbf\x27\xde\xca\xe5\x0e\xdf\x42\x00\x8d\x61\x5b\x43\xb8\x1f\x8d\x98\x40\x8b\x40\x64\xf4\x44\x4e\xa5\xbd\xb6\x65\xae\xa3\x87\x18\x59\x0f\x97\xcd\x92\xda\xd4\x33\xc4\xa9\xf9\x72\xb3\xb1\x47\xcb\x3e\x42\x5d\x3e\x7e\x69\x35\x76\x75\x34\x93\x61\x19\xfb\x77\xc5\xf8\x03\x68\xeb\x72\xba\x01\x6f\xe2\x14\x6c\xa7\x50\x92\xc4\x41\x31\xf2\x7f\x58\x51\xdd\x92\x54\x88\x62\xf7\x99\xef\x2e\xee\x14\xe1\x98\x62\xbc\xb6\x4a\x09\xcf\xea\xf0\x99\xc8\xa7\x1b\xee\x41\x88\x61\x5a\x67\x03\xa8\xc0\xa8\x1e\x1f\xce\x73\x5c\x1b\xcf\xd3\x18\x6a\xb2\x89\x62\xb8\x4c\xcf\xaa\x0b\x76\x43\x8c\x95\x22\xb6\xd5\x52\xc0\x82\x8c\x1f\x3e\x7c\x28\x8a\xf5\xcc\x67\xec\x88\x0c\x73\x78\x7e\x79\xd5\x8b\xbd\x78\x5c\xc0\xe3\xe3\x64\xc2\x92\x7b\xc8\x45\x41\x8e\x8d\x7b\xe9\xab\x2e\x0d\xe7\x7d\x51\x94\x84\x30\xd2\xbb\xa4\xe6\x01\x73\x33\xe0\xce\x4a\x45\x52\xae\x67\x19\x9d\x83\xf1\x5f\x60\x14\x5b\xe1\x38\x08\xe1\x9f\x96\x92\xb7\xb3\x71\x41\xcd\x0a\xc7\xa2\xbc\x90\x08\x7f\xf9\x49\x84\xb2\x89\x21\x22\xbb\x4e\x26\xda\x19\x05\x75\x97\x58\xa6\xa6\xea\x2b\x51\x9d\x57\xdc\xd1\xd8\xa9\x1d\x92\xa5\xab\xc5\x39\xfb\x6f\x7c\x8c\x38\xe8\x81\x7d\x5f\x57\xd0\xfe\x8d\xb5\xaf\x98\x7a\x60\x69\x5f\x94\xd3\xd1\xdd\x3d\x5b\xec\x32\x29\x50\xf9\xf7\x43\xe2\x7e\x9d\xd7\x32\x7b\x74\x20\x05\xaf\xc0\xde\x09\x71\xd0\x4b\xaa\x04\xd4\xd7\xfb\x7b\x02\x38\xfb\xb5\xed\x61\x45\x19\x00\x87\xe1\xed\x8a\x74\x94\x5c\x4f\x81\x30\x43\xb2\x2d\x22\x71\x84\xf8\x50\x17\x2f\xba\x90\xb9\x54\xd7\x46\x5f\xf8\x14\x97\x51\x9e\x65\x88\xae\xd4\xb0\x5c\x3e\xf9\xde\x47\xe3\x7d\xb9\xa8\xcc\xa0\x74\x93\xa8\x6e\x42\x70\x11\xa5\x6c\x96\x42\x56\x42\x32\x2f\xea\xa4\x02\xf1\x32\xa1\x73\x60\xc4\x1e\x33\x1d\x52\xc9\xc6\xcc\x10\x2b\x14\xa5\x79\x86\x39\x1b\xe0\xfd\x83\x4c\x7e\x9a\x65\x84\x1b\xdd\x17\x01\x78\x00\x51\x24\xe1\x9e\xf2\x49\x72\xa9\x13\x54\xa1\x0b\x68\xd6\x55\xd6\x82\xdb\x8b\x27\xdc\x94\x86\x04\x6e\xad\x79\x0c\x34\x3c\x9b\x31\x8a\x11\xc6\xee\x24\x8a\x58\x54\xad\x6e\x83\x0b\xc7\x85\x82\x47\xfb\x88\x8c\x6d\xa6\x5e\x2c\x78\xb5\xf1\xa6\xb4\x48\x1b\x67\x67\xe5\x54\x5f\xf5\x07\x47\xeb\xf2\x9a\x5c\xe4\x87\x15\x06\x8d\x0e\xe5\x43\x83\xb8\x3f\xa3\xca\xf0\x24\xcf\xa8\xca\xe6\xbe\x66\x30\x1f\x45\x05\x8c\x60\x13\x30\xef\xdc\xd5\x27\x06\x2c\x76\x67\x31\xd6\x74\xca\xa2\x7c\x1a\xa7\x15\x67\x91\xc7\x09\xb1\xf4\xd0\x95\x61\xdb\x7a\xdb\x22\xe7\xd5\x72\x55\x70\x2c\x22\xbc\x1a\xae\x91\x03\x86\xf1\x46\x81\xe0\x58\xf6\x8a\x8f\xac\x24\xfe\x4d\x74\xf0\x9a\xea\x22\x52\x7d\xbf\xa1\x3b\xcb\x83\x9e\x2e\x0f\x62\xaa\x4d\x04\xe9\x41\xb9\xbd\x92\x93\x2b\x9c\x88\x86\x01\xfa\xcb\x61\xc3\x41\xc6\x58\x3f\x5b\x0c\xf4\x53\x54\xcf\xae\x3a\xd8\xe9\x92\x7a\x49\xb0\x8f\x1b\x0e\x35\xc2\x32\xdf\x7c\xa0\x11\xe5\xc4\xce\xcb\xc6\x95\x5d\xad\xf9\x7e\x2a\xa1\x8a\x13\x3b\x2e\xab\x75\x30\x74\x77\x57\xca\xd8\xc2\x18\x1c\xfc\x38\xa0\x45\x86\xc3\x36\x64\x24\xe3\xe2\xde\x67\x9e\xd9\x9d\x3f\x22\xb4\x68\x1d\x0e\x1f\x8e\x1e\x89\xb9\x41\xb2\xa9\xc3\x56\xdd\x41\xd8\x59\x2f\x7a\xbb\x5e\x62\xf7\x23\xd9\x08\x3e\x77\xa1\x0a\x6c\x34\x8f\xf5\xb7\x65\x69\x80\x55\x10\x62\x7d\x54\x15\x5e\x30\x51\xa8\x87\xe1\xa1\x2e\x68\xe3\xfa\x5e\x4f\x68\x7d\x0d\xe8\xd5\x70\xe1\x77\x97\xe7\x9d\xf7\xdd\xcb\x32\xc6\xf7\x5f\xef\x3a\x77\xe5\x5f\x6e\xee\x2e\x2f\xbb\x97\x1f\xe2\x9f\x6e\xef\xce\xce\x3a\x9d\xf3\xf2\x7b\xef\xdb\xdd\x8b\xca\x7b\xf6\xa7\xf2\x4b\xed\x77\x57\x37\x15\x54\xf1\xdb\x9f\xba\xd7\xd7\xe5\x9f\x7a\xdd\x8f\x9d\xf3\xc1\xd5\x5d\x09\x98\xfc\xfc\x97\xcb\xf6\xc7\xee\xd9\xc0\x8f\xc7\x3d\xa9\xc5\x16\x2f\xa6\x56\xbb\x7a\xfb\x70\xef\x6e\x0d\x28\xdf\x26\x23\xc5\x99\x48\xb3\x39\x46\x9f\x79\x95\xa4\x12\xec\x12\x73\x7b\x3e\x65\x32\xdf\x25\x88\xcc\xaa\xec\xf2\x81\x29\xc8\x86\xc3\xd6\x5c\xe8\x3c\xd5\xf7\x8d\x80\x26\x46\x2d\x9a\xef\x96\x86\xca\x1a\x35\x0f\xc1\xd8\x4b\x83\x40\x43\x2e\xb5\xeb\x84\xcc\x98\x5a\x36\x16\xb8\x8b\x55\x3e\x33\x7c\xd8\x1c\x16\xb8\x66\x8e\xf1\xe6\x4a\x1f\x82\x73\xd4\x27\x49\x5e\xd6\xf3\xc0\x52\x74\xdc\x2e\x81\x41\xd0\xc2\xb6\x75\x12\xc2\xd7\x3e\x98\x62\x96\x0f\x33\x9e\x10\x9e\x16\x90\x22\x18\x36\x87\x31\xdc\x68\xdb\xa9\x62\xf8\xcc\x98\x02\xe1\xc8\xca\x9c\x33\xc5\x8e\x69\x6e\x26\xbe\xe6\x62\x28\x96\x8f\x98\x3a\x2c\x51\xcc\xf8\x9a\xce\x2c\xf5\xc8\xf9\x51\x4f\x30\x18\x97\xc9\x91\x42\xd2\x68\x2b\x82\x53\x6c\x30\xe6\xe1\x97\xd8\xfa\x06\x66\x47\x7c\x7f\xe9\xd2\xb8\x11\x73\x5d\x2d\x8e\x06\x62\x20\x3e\xf4\xf8\xfb\x76\xde\x96\x29\x27\x3e\xe4\x10\x37\xd9\x47\x2f\xd6\x4f\x63\x15\x8d\xc5\x84\x52\x0e\x36\x74\xad\xbb\x47\x67\x8a\xc1\x7d\xe1\x7c\x53\x5e\x69\x06\x5f\xaa\x8b\x76\x84\x20\x47\xab\x1c\x0c\xd9\x84\x66\x23\xb4\xbf\xd8\xad\x29\xce\xd5\x22\x89\xf6\xe4\x3d\x13\xae\xb6\xf9\x17\x61\x87\x02\x65\xed\x22\xb7\x27\x98\x22\x0a\x63\x0d\xd4\xe1\x56\xbe\x00\x3b\x46\x7b\x63\x59\x50\x94\x4c\xa3\xc7\x18\x72\x59\xc0\x6b\xf9\x40\xf1\xd1\x88\x7f\xb6\x0d\xf6\x05\xab\x05\x18\x02\x07\xb6\xcf\xb2\x0e\x7c\x19\x00\x36\x30\x55\xf5\x9e\x09\xc0\xfe\xc7\xf2\x5d\x2b\x69\x76\x33\x1b\xe1\xe2\x5e\x2c\x5a\x0c\xc3\x8a\x81\xb1\x89\x97\x2a\x22\xc4\xe6\x58\xbf\x4e\x90\xd5\x71\xcf\x5a\xe4\xdc\x25\xe0\xd9\x5f\xce\x2e\xba\x9d\xcb\xde\xe0\xec\xa6\x73\xde\xb9\xec\x75\xdb\x17\xb7\xeb\x1e\xbf\x7d\x44\x06\x57\x4e\x5f\x35\x38\x3b\x70\x88\x13\x77\xf2\x8a\xfc\x94\x30\xa9\xe2\xd8\xc1\x96\xac\x1e\x3d\x4f\x67\x83\x94\xeb\xc4\x5e\x7f\xf3\x01\x13\x29\x20\xb3\x6d\x45\xaa\xf5\x4d\x55\x67\x11\xde\x20\xe1\x0d\xcf\x41\xf0\xb6\x7b\xf0\x14\x1d\x9e\x03\x74\x8b\xab\x7c\x6d\x0f\x7f\xda\x17\xd1\x6d\xd3\x5a\x8d\xc6\x6b\x9b\xdb\x6d\x6e\xe5\x26\xaa\x73\xc2\xf1\x72\xad\x73\x6a\xf9\xa3\x7f\x0d\xf2\x3e\x1b\x56\xc5\x61\x71\xc4\xf0\x70\x3c\xaa\x3e\x44\xac\x36\x3c\xa5\x22\xa5\x46\xaa\x79\xc3\x14\xd7\x63\x9e\xf1\xb1\x29\xb3\xd0\xf8\xca\xb6\xaa\xbe\xdf\x05\x7c\x95\x8a\x2a\x29\x21\x88\x5c\xef\xea\xa7\xce\xe5\xed\xa0\x73\xf9\xf3\xe0\xfa\xa6\xf3\xbe\xfb\x5f\x21\xc9\xde\xd5\x52\x2f\x17\x36\x61\xf6\x52\xb4\xdc\xc5\xa7\xfb\xd5\xf2\x17\x2c\x2f\xe2\xdb\x71\x90\xf2\x7c\xd4\x17\x9e\xb3\xa8\xa2\xf9\x89\x92\xf9\x78\x52\xdf\x50\x75\x94\xd7\xed\xde\x8f\x5b\x0d\x13\x92\xb1\xb1\x06\x01\x9e\xb6\x45\x58\x21\x3e\x72\x7c\x0f\xb1\x88\x2a\xc3\x03\x48\x01\x78\xb5\xce\xbc\xdd\xc0\xd1\xb6\x52\x54\x16\x99\xd6\x52\xe1\xbf\xe6\xf5\x26\x02\xea\x45\x7c\xb3\x74\x8d\x40\x94\x18\x56\xb7\x59\x68\xed\xb4\xe6\xb7\xd2\x0d\xf6\xc3\x71\xc6\xc6\x63\x96\x22\x79\x55\x1b\x76\x56\x1f\xc7\x02\x93\xe2\x5e\xaf\x5b\x45\x57\x6c\x62\x87\x8b\x39\x04\x66\xac\xcf\xc0\xaf\xc3\x27\xf5\xbc\xe2\xcc\x17\x9d\x4b\xa4\xd0\x86\x8a\x06\xf0\xce\x0d\x0b\x63\x17\x88\xfa\xaa\x28\x4f\xef\x6c\x21\xde\x4e\x5d\x9c\x83\x6d\x7c\x37\xae\xa8\x86\x70\xc6\x8d\xa8\xd8\x46\x54\x25\xaf\x66\x13\x2a\xa5\x87\x9f\xdc\x8e\xb1\x54\x75\x72\x19\xe8\x60\x5c\x44\x54\x73\x87\x60\x86\x86\x1f\x28\x15\xd0\x18\xa9\xb6\xe7\x4a\xe5\xc1\xb8\x59\x94\x59\x0e\x85\xbb\xbd\xf0\xb6\xb9\x29\xab\x52\xa4\x38\x2a\xe0\x9c\xe6\x89\x83\xea\xc3\x66\x0b\x57\xb4\xb3\x5d\xf9\x0b\x36\x25\xc7\x71\x61\xf8\xf4\x18\x72\x89\xfb\xa2\xc9\x87\x51\x53\x54\x3d\xa6\x80\x6b\x7f\x6b\xed\x86\x43\xb1\x41\x04\x9d\x5f\xec\xf5\x72\x3c\x88\x7f\x1d\x84\xbd\x06\x4f\xbe\xdb\x97\x21\x45\x27\x65\xf9\x3a\x6e\x4a\xf7\x0c\x5c\x75\xb3\x80\x83\xf5\x7c\xdd\x65\x10\x09\xbc\x22\x27\x54\xa3\xe4\x6a\x92\x49\x79\xe0\x30\x9b\x32\x50\x44\x75\xb8\x41\x12\xdc\xcd\x42\xb0\x96\x8f\xe2\x08\x75\x6a\x28\x7e\x6f\x47\x1f\x23\xf3\x87\x2a\x23\x9b\x11\x7e\x2c\x1c\x05\xe5\x05\xf9\x1e\x30\xac\x8c\xe6\x22\x99\x90\x59\x46\x31\xaf\x69\x42\x35\x92\xb4\x77\x83\xd3\x21\xcf\xb8\x81\x8c\x6c\x74\x20\x55\x56\xd8\x6a\x34\x54\xdd\x7b\x2c\x28\x5a\x20\xc2\x2c\x23\xfa\x1d\xe3\xc8\x8a\x82\x93\xcf\x19\x49\x56\x1c\xd9\xe8\x8b\xa5\xde\xa7\x82\x2c\x5d\x14\x59\xb1\x1d\x96\xe3\x01\x59\x16\x73\xd9\x6c\x67\x5d\x8b\xd7\xd5\xcf\x4b\xeb\x5d\x73\x51\x6f\x1e\x15\xe0\x60\x0e\x37\x60\xf3\x55\x10\xc4\xda\x93\x35\xca\x24\x6d\x28\x95\xe5\xdb\x46\x4c\xc3\xa6\xb6\x53\x99\x0f\x9b\x30\xb4\x70\x54\xcb\x5b\x5f\x66\xe2\xf7\xe7\x76\x5f\x76\xc1\x98\x01\x52\xc3\x0c\xdf\xcc\xb4\x11\x4d\x9a\x1a\x76\x0c\x9f\xd7\x37\xee\x90\xa3\xd6\x9e\xf3\x02\xa1\x15\xe0\xb7\x01\xa9\xcb\x8a\xb4\x35\xe5\x96\xff\x9a\x43\x49\xe7\xab\xd1\x2d\xe6\x08\xef\x42\x64\x86\x2f\x52\x58\xfd\x49\xac\xf6\xda\x2b\xfb\x4f\x62\x1a\x58\x3b\x3f\xa4\x6e\x36\xb7\xf6\xeb\xf5\x0f\x64\xb9\x9c\xe4\x4c\x71\x09\x99\xbc\xae\x06\xe5\x12\xb0\x91\xda\x7e\x77\x58\xc9\x5f\x73\x96\x33\x4b\xfb\xc3\x3c\x1d\x2f\xda\x36\x37\x90\xce\x8a\x29\x4d\xe4\x23\x99\xe6\xc9\x84\xf8\xc6\x49\xca\x32\x3a\x2f\x4d\x0d\xe4\x25\x23\x33\x80\xef\xda\x12\x4b\x28\xc9\xb5\x91\x53\x88\xb1\x2b\xda\x55\xb9\x00\x82\x27\xd4\x18\xc5\x87\xb9\xa9\x8d\x7d\x2a\x81\x6a\x6c\xe9\xbb\xba\xbd\xee\x9c\x75\xdf\x77\x2b\x8e\xa3\xf6\xed\x4f\xf1\xdf\x9f\xae\x6e\x7e\x7a\x7f\x71\xf5\x29\xfe\xed\xa2\x7d\x77\x79\xf6\xe3\xe0\xfa\xa2\x7d\x59\x72\x2f\xb5\x7b\xed\xdb\x4e\x6f\x85\x5b\x69\xb1\xd7\xe6\x8d\xa0\x11\xe6\x87\x95\x5d\x9c\xe1\x12\x9c\x7d\x5e\xbb\x74\xbd\x9e\x92\xb6\x47\x40\x89\x8b\x84\x51\xef\x05\x04\xef\x35\x56\x2d\x73\xce\xc2\x73\x6a\xa8\xab\x02\xd9\x22\x6d\xe2\xab\x79\x42\x1c\xa6\xb6\xc2\x82\xc3\x87\xb0\xbb\x83\x4d\x58\x89\x21\x29\x34\xb7\xa2\x12\x85\x1c\x39\x60\x96\x8c\xc5\x70\x88\xae\x72\x7b\xab\x2f\x3a\x0f\x4c\x98\x1c\xb0\xda\x68\x96\xf9\xa2\xab\xfe\x85\x28\x8f\xca\x8f\x52\xf3\x29\xcf\xa8\x2a\x8a\x06\x5c\xb9\xb6\x40\x60\xf7\x63\x0d\x69\xf3\x8b\x48\xd2\x5e\x79\xb8\xeb\x12\x18\xf7\xd9\x45\x17\x44\xa0\xc4\x78\xb8\x5d\xdf\x79\x5f\x20\xf2\x87\xeb\x71\x4a\x21\x36\xd8\x48\x67\x4f\xc3\xee\x1b\x8b\xd0\xdf\xd4\x80\xf6\x6f\x81\x2c\x83\x96\xe7\xa7\x0a\xa4\x09\x83\xf4\xff\xe8\x08\xa3\xe6\x6b\xcb\x35\x3d\x40\x6b\xd3\x20\x9b\xba\x98\x99\x72\x21\x01\x34\x77\x10\xdf\xfa\x25\x08\x3b\x3e\xa6\xcb\x59\xe3\x83\xd1\x9d\x01\x22\x5c\x83\xfc\x9d\xd9\x4b\xe8\xa5\xae\x43\x9c\xa6\x0c\xab\x30\x94\xb9\x48\x7d\x15\xf4\x29\x17\x27\x53\xfa\xf9\xad\x9f\x29\xa6\xfd\x05\xa4\x50\x80\x74\x60\x99\xd5\x44\xe6\x96\xc9\x2d\x5f\xae\xbe\x58\xb2\x5e\xab\xa5\x45\xcf\x59\x41\xed\x29\x74\x54\x8c\x53\x7a\x60\xf3\xba\xfd\x5b\xc0\x7b\xc6\x58\x28\x77\xe0\xa1\x91\x99\x62\xc6\xbe\x19\xa2\xa0\x32\x8c\x6e\x0b\x7f\x43\x94\x6d\xa9\x6e\x44\x3d\xf3\x8e\xdd\xbc\x3b\x9d\x9b\x5a\x07\xf3\x13\x20\x76\xbb\x9e\xec\xa6\xa1\xbb\xd9\x5b\x3a\x5d\x54\xb1\xf3\xa3\xd9\xdd\xfa\xbb\x1c\x42\x69\x6a\xed\xcb\xc2\x29\x06\x96\x6d\xd8\x0b\x0f\x30\x07\x99\xff\x0b\x3e\x6c\x4f\x03\x19\xd3\x60\xef\x15\x56\xdf\x62\xbf\xe6\xce\x65\xf7\xfd\x77\x9b\x5d\xb4\x46\xcd\x89\x07\x33\x8d\x23\xd4\x5d\x82\x86\xbb\x74\x61\x5c\xb9\xe0\x75\x70\x20\x37\xb9\xb0\x77\xf1\x3e\xa2\x1d\xd6\x77\x67\x55\x3a\x75\x7f\xae\x0c\x80\xf7\x96\x58\x85\xef\x3f\x19\x7e\xd2\xcf\x15\xd8\x24\xd7\x1d\x84\xbf\xba\xd6\xe3\x1b\x6d\x48\x93\xfb\x47\xaa\x52\x34\x16\x42\xf8\x41\x8b\xfc\x28\x1f\xd9\x03\x53\x47\x24\x61\xca\x50\x87\xa8\xa0\xc1\xff\x0a\x07\xca\xb5\xd3\x17\x10\x11\x8e\xf0\x14\x02\x4a\xea\x19\x3e\x9e\x58\x85\x32\xf2\x9e\x4b\x65\xf9\x91\x41\xb8\x9a\x19\x4b\x5c\x0e\x7b\xc3\x02\x8c\x32\xfa\xb0\x08\x11\xb1\x4d\xb6\x29\xe9\x86\x34\x20\xef\x9e\xf2\xa0\x9d\xcb\xe2\x1d\xdc\x82\x39\xae\x89\x49\xc7\x47\x64\x2c\x33\x2a\xc6\xad\x56\x8b\x30\x93\xb4\xde\x6e\x44\xe8\xae\xc1\xd8\xe1\x15\xe2\x38\x33\xa9\x59\x36\x0f\x69\xd7\x21\xde\xde\xae\x32\xc4\xf7\x6b\x8e\x26\x8f\x1a\xea\xbf\xad\x26\xad\x3e\xaf\xe9\xbc\x5e\x53\xdd\x38\xfb\xa5\xa1\x1d\x80\x00\xdf\xa0\x25\x7c\xbf\x5e\xf3\xda\x20\x9b\xcb\x17\xd5\x28\xb2\xba\x1a\x10\xd6\xa4\xd8\x34\x55\xe9\x67\xd9\x54\x7d\x6e\x2b\x54\x94\xda\x96\x5c\xce\xf4\x56\xf9\x31\x8b\x14\x5d\x43\x71\x21\xcf\x6d\x97\x90\x1f\x99\xe5\xd3\x66\x84\x8d\x5d\xa5\xa8\x62\x90\xf8\xaf\x33\xe8\x6e\x6d\x29\xaa\x28\xb2\xe7\x11\x82\xdd\x78\xd1\x16\x8a\xc4\x04\xdc\x52\x71\x0d\x58\x30\xdb\xa4\xd9\x84\x66\xb0\x69\x70\xd9\xcc\x67\x68\x83\xc3\x04\x9c\x6c\x8e\x99\x43\xde\xc4\xef\x3e\xd1\x28\xea\x80\x9f\xa7\x99\x33\x54\x03\x89\x36\xde\x23\xc0\x9f\xdd\xca\xb9\x05\xa2\x43\x84\x81\xe8\x22\x1d\xa0\x41\x5f\x12\x5e\x92\x91\x4f\xda\xb8\x67\x51\x59\x9b\x14\xd0\x11\x1f\x5b\xe4\xbd\x54\x50\xbb\xc6\x39\x6e\x9d\x6f\xbd\xb8\xb5\x4c\xd1\x09\x1a\x88\x1f\xbe\xf7\x21\x15\x38\x43\x6c\x02\x40\xe8\x53\x2a\x4c\x6d\x03\x45\xc4\x11\xb4\x85\x9f\xfc\x6c\x55\xe1\xda\xd7\x5d\xfb\xf0\x2a\xe2\x4d\xb7\x3f\xdd\x12\x5c\x6a\x87\xa3\xa7\x96\x0d\x34\x6a\x64\x75\x50\x07\x2c\xd7\x60\x0b\x69\xa0\xb4\x0f\xb8\xe8\x1e\x48\xd1\x2e\x3b\x33\xc9\xa4\xb8\x7d\xca\xd5\x9d\x5c\x31\x01\x37\xcf\x69\x81\x0c\x88\xf1\x72\x71\xe0\x91\x2b\x20\x1e\xd4\x58\x29\x18\x58\xea\xa9\x21\xa9\x8c\x9b\x25\xdc\xac\x8e\xee\xd8\x10\xbd\x62\x15\xa9\x19\x89\x5e\x7b\x37\xcf\x92\xc3\x05\xc4\x4a\x8e\x58\x00\x3e\x34\x0e\xe5\x62\x87\x4d\x5f\xc5\xb3\x2b\x67\x57\xf6\x45\xb9\xab\x85\x45\xf2\xe1\x17\x5c\x31\x84\xa1\xd2\xf6\x0a\x37\xfc\xc1\x1e\xd4\x45\xb2\x0e\x04\x0a\x1c\x60\x91\xf6\xfa\x02\x87\x1d\x61\x59\xdd\xb3\xb9\x8e\x81\xf0\x1d\x45\x91\x26\x82\xe4\x76\x3e\xbe\xe0\xfb\xca\xad\x80\x85\x1b\x44\xd5\xf7\xd6\xbb\x4a\xb0\xd3\x8f\xf6\xe3\x25\x71\x5d\x0b\x8d\x5b\x1a\x2c\x52\x62\x0a\xc3\x92\x63\x13\xc5\x3a\xbb\x3d\x2c\x42\x37\x6a\x2a\x33\x16\x36\x3a\x50\x7e\xac\x8e\xd3\x17\x0e\xee\x2e\x72\x89\x5a\x86\xb3\xb8\x6d\x2e\x55\x0f\x41\xb6\xe6\xa5\xd4\x6c\x80\x22\xf4\x25\xc4\xea\x0b\x62\xfa\x3a\x2a\xae\x10\x34\xa6\xde\x7a\x43\x4e\x6d\x87\x5b\xc6\x03\xb9\xcd\x6d\x8c\x01\x2a\xc4\x58\xb7\x70\x0e\x85\x06\x2b\x2a\xa0\x04\x9c\x30\xbb\x7c\x6d\x51\x1b\x7e\xe3\x83\x6f\x6e\x3b\x67\x37\x9d\xde\xb3\xc5\x08\xf9\x00\x9d\x8d\x83\x84\xfc\x38\xcf\x3b\xef\xdb\x77\x17\xbd\xc1\x79\xf7\xe6\x29\xa2\x84\xdc\xa3\x2d\xc2\x84\x6e\x1d\x8a\xe6\x99\x14\x86\x7d\xde\xe9\x4e\x56\xb9\x18\xd0\x0d\xc2\xd5\x03\x52\xed\x32\x71\x07\x1b\x5d\x44\x01\x0d\x10\x9d\x0e\x03\x09\x6f\xb4\x00\xfa\x19\x55\x38\x1d\xf1\x2c\x83\x7c\xb1\x60\x63\x75\x49\x20\x76\x51\x81\xff\xf8\x52\x6d\x8e\xa7\xf6\xc5\xb0\x04\x83\x0a\x76\x9f\x89\x94\x1a\xf7\x87\xce\xec\x02\x28\x0e\xe9\x42\xcb\x80\x42\xc7\x5c\xb0\x62\x18\x58\xfd\x28\x17\xa4\x11\xdd\xcd\x6d\xe2\x53\xa6\x03\x3a\xc1\x6b\x5d\x59\xd3\x53\x5c\x89\x3e\xbd\xf8\xe9\x1f\x86\x19\xe2\x21\xe6\x02\x05\xd3\xd2\x69\xbe\xad\x27\xdd\x93\xe2\x08\xc0\xba\xdb\x9d\xa4\x60\x88\x86\x02\x43\xc5\x46\xba\x8d\x40\x88\xee\xc2\x42\x7d\xcf\x31\x94\x42\x8e\x2a\xeb\x6c\x59\xa1\x5d\x6b\x0e\xe6\x6a\x8a\x85\x5a\x48\x92\xe5\xda\x2a\xff\xa8\x3a\xb7\x3f\xdd\xf6\x05\x96\x8a\x74\xb7\x90\x83\x71\xc6\x2e\xd0\x91\x2f\x4b\xfd\x7b\x09\x25\xe6\x60\xdf\xa2\xa1\x72\xca\xa8\xd0\x58\xfe\x2d\xcb\x98\x2a\x28\x03\xc7\xc3\x58\xea\x0a\x00\x40\x19\xbf\xe2\x7b\x57\x01\x4c\xc2\xa9\xb5\xe3\x75\x4f\x5d\x05\xac\x2a\x3d\x35\xa5\x23\x42\x94\xe0\x53\x52\x4e\x4d\xb0\xfa\xba\x54\xe4\x02\x2c\x6b\x89\xa8\x1c\x3a\xbe\x16\x2d\xf5\xb0\xb9\x03\x29\xed\x91\x94\xd6\xb8\xd7\xe3\x5b\x82\x4c\xa4\x65\xa0\x01\x81\xb9\xf0\x35\x86\x74\xe8\x0c\x82\x60\xec\x32\xd6\xde\x3a\x05\x70\xce\x56\xde\xc7\xcb\xab\xcb\x4e\xec\x3b\xec\x5e\xf6\x3a\x1f\x3a\x37\xa5\xd4\xb7\x8b\xab\x76\x29\x7d\xed\xb6\x77\x53\xc9\x8e\x7b\x77\x75\x75\xd1\x59\x70\x42\x76\x7a\xdd\x8f\xa5\xc6\xcf\xef\x6e\xda\xbd\xee\x55\xe9\xbd\x77\xdd\xcb\xf6\xcd\x2f\xf1\x2f\x9d\x9b\x9b\xab\x9b\x4a\x7f\x77\x67\xcb\xdd\x99\xa5\x69\xd4\xab\xe2\x85\xb7\x24\xc2\x10\xaa\x5b\xd2\x1e\xd5\xf7\x7b\x4e\xfa\x84\x24\xe7\x4d\x92\x36\x6b\x73\x34\x4b\x56\xa9\x94\x0d\xb6\xcb\x07\x6d\xca\x69\xad\xed\x47\x31\xa3\xe6\x03\x6a\x0c\x9b\xce\x76\x2b\x48\xba\xfe\x11\xd9\x2c\xd5\x14\xf8\xcb\x1a\xa9\xa6\xa5\x5d\x7d\x39\xa9\xa6\x35\x59\xa4\x8b\xa9\xa6\xdd\xcb\x6e\xaf\xdb\xbe\xe8\xfe\x9f\x4a\x8b\x9f\xda\xdd\x5e\xf7\xf2\xc3\xe0\xfd\xd5\xcd\xe0\xa6\x73\x7b\x75\x77\x73\xd6\x59\x1e\x50\xbe\x38\xfa\x42\x69\x3b\x26\x71\x3f\xa7\xa4\x17\x89\xd3\xe8\x16\x70\xda\x9a\x43\xbb\x04\xaa\xa2\x19\xff\x07\x17\xe3\x23\x28\x99\x79\x4a\x3a\x4a\x75\xa7\x74\xcc\xae\xf3\x2c\x03\xa5\x17\x7d\x70\x67\x8a\x51\x03\xaf\x5d\xcb\xb4\x1b\x7d\x07\x91\x03\xb5\xd3\x80\xfe\x5d\x01\x5a\xec\xfe\xc8\xf5\x1f\xa9\x78\x21\x2a\xc1\x99\x38\x42\x79\xf0\x53\x00\xe0\x97\x23\x57\x49\xe9\x28\xf8\x38\xc9\xaf\xb9\x34\x94\xb0\xcf\x09\x24\x51\xd4\xd3\xc9\x85\xdc\xa9\x80\xec\xea\x5a\x47\xf5\x67\x7a\x75\xde\x59\xbd\x26\x8f\x68\x6f\x83\x4d\xea\x37\xba\x59\x7e\xc4\x4f\x5d\xc9\xc6\x7a\x81\xc8\x64\x7b\x08\xea\xba\x90\xe3\x7a\xf0\x22\xc8\x7a\x73\x88\x4b\x45\xa1\x19\x08\x11\x95\x63\xa2\xb9\xb8\xef\x8b\x4f\x13\x26\x88\xcc\x15\xfe\x64\xa4\x02\x90\xae\x51\x96\xeb\x09\x83\x42\xd1\x47\xe4\x91\x91\x29\x9d\x63\xa8\xe8\x54\xaa\x08\xce\x09\x48\xc6\x12\x27\x7c\x9d\x71\x61\xb9\xc5\x8c\x7b\x17\x42\x75\xeb\xf7\xe1\x61\xf4\x29\x44\x74\xf7\x0c\xdf\xf5\xe2\xa4\x1e\x27\x0c\x42\x44\x0a\xeb\x96\x57\xe3\x1c\xe7\x06\xdc\x4d\x29\xef\xad\x66\xe6\x93\x0d\xbf\xf1\xe0\x1d\xb0\xdc\x0f\x92\xa7\x24\xcd\x67\x19\x4f\x02\xdf\x7d\x94\xaa\x31\xa3\x1a\x5d\x5d\x1b\x64\x54\x57\x1c\xb8\xcb\x26\x56\xe3\x47\x8b\xec\x1d\x4b\x72\xab\x9f\x38\xbb\x3c\x2a\x7b\x96\x6b\xa6\x8e\x8d\xe2\xe3\x31\x38\x0e\xbc\x57\xfe\xe5\xa7\x9f\x17\xe9\x6d\xbb\x3b\xa0\xe3\xf8\xb0\x4c\x8e\x79\x42\xb3\xd8\x04\x5d\xc8\xae\x21\xbf\xd5\x1f\xfb\x59\xae\xb0\xe0\xf8\xa8\xc8\x31\x6c\x8c\xdb\x9f\x29\x06\x29\xd6\x03\xac\x24\xb7\x7b\x85\xbb\xee\x08\xeb\x6a\xbb\x5a\x2c\x45\x00\xa5\xaf\x66\xe5\x6f\xb8\xa2\x6f\x8f\xe6\x86\xa8\xfb\x50\xbe\x92\xc8\x47\xa8\x85\x6a\xb5\x11\x2b\x9c\xdb\x99\x0a\x09\xb2\x49\x40\x78\x0b\x56\x64\x0f\xd0\x37\x0a\xe6\x72\x0c\x72\x19\xf3\x07\x26\x5e\x00\x5c\x40\x61\x69\xb7\x53\x0f\xa7\xb4\x96\x45\xee\x0a\xf7\x16\x9c\x40\xdb\x4a\xc4\xcb\x9d\x7a\xe3\x4c\x0e\xb1\x18\xeb\x02\x10\x5c\x7c\xeb\x6c\x16\xc1\x32\x72\x70\x7d\xe5\x3b\xcb\xa3\x26\x40\xfe\x84\x5c\x52\x8d\xc1\x2e\x5b\x8f\x4d\x67\x19\x35\x7b\x46\xca\xdb\x7d\xc1\x72\x23\xa3\xf2\xb7\x76\x72\xdd\x50\x05\xd7\xbb\x4a\x80\x2a\xba\x69\x6d\x25\xad\xe2\xc4\xf8\x95\x6f\xe2\xce\x35\x4e\xf4\x8d\x80\xfe\xa2\x9a\xb0\x73\x66\x42\xd4\x44\xe6\x61\x9d\x20\x99\x3c\xcc\xba\x1c\x36\xe6\x03\x43\x42\xa8\x2f\x60\x40\x84\xd2\xcc\xd3\x99\x14\x4c\x38\xe3\x86\x90\x7d\xe1\x1a\xf7\x98\xa6\xa1\x46\x5a\xc9\x87\x74\xe4\x74\x10\x57\x8f\x5d\xcb\xec\xc1\xd9\x29\xa3\x8c\x7e\x80\xf5\xb2\x03\x3c\xb3\xec\xdc\x0a\x2f\x54\xa4\xc1\xa1\x00\x26\x96\x0a\xb0\xa7\x62\x63\xae\x0d\x8b\xdd\x6e\xf1\xf7\x7b\xc3\x13\x2c\xc9\x3b\xcb\x96\xbe\x11\x4f\x70\x15\xe3\x1a\xd1\x64\x13\x5c\xaf\xf9\x8c\xa5\xdd\xf0\xdd\x72\x62\x28\xf9\xce\xd3\x28\xb6\xb0\x74\xc8\x91\x06\x98\xab\x37\x0c\x81\xb4\x3a\xe4\xe2\x87\x4d\x0a\x55\xf7\x3c\xd6\x17\x6c\xd1\x98\xe6\x54\x51\x61\x18\xd3\x7d\x81\x51\xc6\x98\x02\x51\x8a\x79\x1a\x95\x10\x24\x0b\x59\x2a\x91\xda\x60\x80\x25\x7c\x32\xa2\x3c\xcb\x55\xa3\x88\x80\x64\xb9\x55\x34\xc7\xb2\x65\x3a\x83\x66\x49\xdd\xae\x05\xd7\x70\x74\x8c\x42\x50\x92\xaf\x0c\xe6\xab\x97\x95\x3d\xa7\x4d\x38\xc5\x4e\xd9\x5b\x7f\xc3\x83\x7e\xd8\xe0\x2d\xfe\x8b\x1e\xcc\xe4\x06\x2c\xcf\x15\x24\xa9\xe7\x3e\x54\xdf\x43\x1c\xcf\x2a\xc1\x67\xb5\x35\xe3\x4f\x3f\xac\x86\x98\x6d\x64\x3b\x40\x70\x13\x2a\x52\x28\x2e\x4a\x4d\x64\xbb\x40\x42\x71\xe4\x0b\xc0\x7d\xc6\xf3\xb5\x66\x47\x07\xd8\x0d\x07\xc9\x82\xd3\x69\xc5\x52\x55\xbd\x55\x2b\x9c\x17\xa5\x5e\xca\x3e\xa4\x3a\xdb\x65\x11\xcb\xeb\x10\x24\xc3\x59\x6b\x26\x9e\x11\x1f\xef\x3f\xab\x6e\x5d\x4c\xcd\xa2\x98\xec\x22\x93\x4b\xdc\x21\x72\x57\x4f\x40\xd1\xdc\xf1\x18\x81\xcd\xd9\xf2\xa1\x38\x77\xb1\x2f\x1c\xc4\x2c\xbc\x88\x38\xc5\x18\x9e\xab\xc9\xf7\xc1\x11\xf9\xfd\xbf\xfb\xe0\xcc\x39\x19\xc1\x5a\x43\x04\xb4\x4c\x92\x5c\x01\xa4\xa7\x2f\x3b\xcc\xf0\x5a\xd9\x24\xc5\xbc\x8d\x97\xa9\x06\xe6\x02\x81\x9e\xcd\x25\x34\x9d\x52\x54\x9a\x54\x0f\x64\x61\x04\xcb\x0d\xd7\xd8\xff\x63\xef\xda\x7a\xdc\xb6\xb5\xf5\x7b\x7f\x85\xd0\x97\x24\x80\xe2\x00\xe7\xe0\xbc\xf4\x6d\x4e\x92\xa2\x53\xa4\xe9\xec\xa4\x49\x37\x50\x15\x1e\x5a\xa2\x6d\xed\xd2\xa4\x4b\x49\x33\x75\x81\xfd\xdf\x37\xb8\xd6\xe2\x4d\x37\x4b\xb6\x67\x92\xdd\xe6\xa1\x28\x30\xb1\x78\xe7\xe2\xba\x7e\x1f\xc1\xd1\xe8\xaa\x4e\xaa\x9a\xef\x7b\xe5\x49\xa4\x2f\xc5\x2f\xc1\x59\x55\x84\x7d\xb0\xb6\xc7\xab\x95\x7f\x60\xfb\x31\xc4\xd1\xb3\x5b\x3c\xb6\x0d\x2e\x7d\xac\xfd\xcc\x01\xda\x26\xa0\xac\x10\x52\x68\x77\xf5\x5c\xc5\xf5\xa3\x64\x49\xcf\x01\x67\x77\x85\xf7\x44\x6b\x30\x26\xdb\xe2\x4f\xe7\xe7\x0c\xf9\xf4\x60\x02\x1c\xc7\x06\x57\x58\x2d\x1f\x16\xf8\x9f\x02\xc0\xd0\xde\x18\xdb\xd6\xc8\x76\x9c\x59\x7c\xec\xf1\x22\x1e\xb1\xf6\xf8\x63\x67\x89\xe6\x96\x1e\xdf\x85\x58\x0b\xa0\x7b\xf9\xdc\x8e\x49\x16\xa9\x2b\x39\xfe\x18\x03\x66\x44\x4b\xac\xca\x49\xc8\x22\x5d\xfa\x63\x78\xa1\x0a\x2e\x55\xcd\x13\x96\xc8\x52\xbc\x90\x8d\x10\x2f\xde\x2a\x69\x04\x73\x55\x6e\x30\x1f\x05\x3c\x92\xc8\x1d\xe4\x39\x68\x22\x57\x74\x70\x05\x40\x38\x9b\x21\xa1\x97\xbc\x36\x12\xd3\x6c\x81\x38\x64\xd2\x7c\x41\x30\xf8\x40\xdd\x51\xba\xd4\x75\xec\xcd\xc2\x95\x52\x5f\x50\xc7\x79\x08\x1b\xef\x39\x60\x63\x08\x9f\x67\xe5\x8c\x7f\x21\xe9\xfe\x6c\x48\xba\x95\xb6\x9e\xdd\x19\x74\xdd\xc3\x97\xea\x64\xbe\x6c\x67\xe8\x38\xb5\x75\xc2\x79\xfc\x94\xe1\xb6\x87\xc4\x7b\xf5\xe0\xae\xf4\xb7\xb9\x08\xae\x76\xa5\x2e\x11\x75\xf8\x1d\x0b\xba\x97\x6a\x6d\x49\xb6\x4f\x2f\x42\x9f\xe8\xf6\x0d\xab\x68\xc2\xd2\xf3\xee\x21\x19\xb2\x7b\x95\x5c\x92\x65\x3c\x6d\xb0\xed\x05\xfb\x51\x7e\x8b\x9f\xdf\x28\x51\xe6\xe3\xbe\x72\xfb\x34\x01\x9b\x40\x27\x52\x02\xbc\x1b\xdc\x32\xfa\xd1\xa0\xd0\x09\x5c\xf3\xbc\xf6\xae\x9f\xee\xe4\xe6\xb8\x12\xad\xb9\xe0\x5a\x01\x94\x23\xcf\xd5\x62\x9e\x15\x48\x26\x86\x3a\x2a\x54\xa4\x01\x98\x9f\xed\x21\x36\x43\xf6\x45\x34\x10\x90\x4d\xf7\x5b\x25\x78\x8a\xbe\x25\x70\x44\x67\x72\xcf\x75\xae\x8c\x91\x96\x14\xea\x9e\x92\xef\x4a\x51\xf8\x6a\xe5\xa7\x10\x17\x03\xef\xf5\x33\x82\x64\xe1\xce\xf7\xe7\x48\x31\x8e\x1f\x5b\x0b\xcb\x78\x2e\xdc\xc7\xa5\x1c\xdd\x63\xa7\xe0\x67\x8a\x95\xe1\x52\x10\x88\x7d\xcb\x89\x63\x16\x3d\x1a\xcf\xbc\x1d\xe6\xae\x0e\x15\x1e\x18\x64\x50\xa9\x5b\xfb\x4a\x55\x11\xed\xa5\x84\x04\x7b\xc4\xe3\x41\x07\xb3\x31\x10\x21\x9e\xc9\x50\x0d\xf1\xe9\xae\xb4\xa9\x99\xf4\x7e\xab\x27\x55\xa8\x92\xf4\xee\x33\xe6\x8f\x97\x80\x76\x96\xf3\x34\x79\x12\x4d\xf4\x09\x24\x60\x4b\x05\xfd\x91\x83\x22\x5a\x1a\x38\xae\x69\x52\xd6\x99\x2c\x2b\x3c\x99\x9a\x0b\x7e\xc7\x64\xcc\x1c\x4b\xbe\x70\xaa\x93\x77\xd3\x86\x68\x2c\xa3\x94\xef\xc2\xa1\x79\x42\xaa\x93\x0e\x13\x79\x19\x24\x8c\x01\xb3\x41\x23\xa1\x0c\x95\xff\x81\xfc\x11\xc6\xd0\xbd\xe3\x5a\x97\x45\x61\xba\xf3\xc4\x26\x04\x18\x06\xb4\xca\x07\xd5\x20\x17\x55\x41\xec\xae\xb6\x30\xd1\x65\x55\x95\xa8\x8c\xae\x54\xbd\x8d\x36\x82\x10\x85\xf0\x26\x71\x63\x62\xd7\x40\xd6\x05\xeb\x2a\x39\xab\xb7\x49\x59\xa7\x90\x0e\x67\x05\x47\x26\x59\x41\x80\x8c\xd4\x5c\xe9\xd8\x74\x87\xf7\x99\xfe\x7d\xa5\xee\xc6\x74\xba\x73\x83\x2d\x78\xab\xf7\x82\xc9\x25\x0a\xd4\x4f\x10\x6e\x09\xc0\x9e\x86\xfc\x58\xcd\x6a\xe9\x78\x16\x2e\x32\x4e\xa7\xe9\xbc\x8b\x20\xd8\x8c\x0a\x67\x3b\x4a\xdb\xd4\xf9\x56\x33\x87\xb2\x64\x1b\x17\x28\x85\x11\x16\xe4\x25\x9b\x2e\x05\x7c\xc8\x88\xb5\x1c\xc4\xf6\xb4\x1e\x8b\x19\xd9\x13\xf0\xb9\xc6\x8d\xa6\xec\x7c\xeb\x0d\x69\x6f\xfb\xfc\x90\x45\x47\x61\x3a\x29\x6c\x71\x64\x58\x0f\x1b\xba\x18\x74\x21\x74\x43\x18\x3f\x3b\x5e\x2a\xe7\x53\xc6\x14\x04\x9e\x54\xca\xd8\x35\xd6\xc3\xd1\x0f\xe6\xd5\xca\x17\x7c\xd0\xac\xe6\x18\xf2\x7f\x72\xe5\x25\x12\x64\x25\xd7\xd2\x51\x2e\xa7\x49\xf6\x35\x9e\xac\x2a\xfb\x1a\xd1\xcc\x2d\x26\x9c\x65\xdf\xa2\xfb\x53\x44\x04\x90\xce\xd3\x8e\xb1\x77\x7f\xe1\x88\x15\x6a\x96\x37\xef\x53\xd2\x5e\x05\x65\xa9\x98\x9e\xb3\xc2\x06\xe8\x99\x44\x9b\xf3\x60\x39\xb1\x00\xb7\x54\x37\x79\xed\x27\xec\x28\x84\xfe\xdf\x7e\x68\x96\x68\xdf\xd0\x8b\xea\x28\x7b\x94\xce\xa4\x6d\xcd\xd3\x8c\x5e\x09\xd1\x69\xaa\xcb\x9e\x15\x9c\x55\xf0\x51\x5b\xc0\x08\x00\x22\xf1\xd9\xe6\x6d\x39\x00\x3e\xef\x15\xf7\x68\x96\x8b\xc4\xf3\xb7\x81\xea\xd1\x22\x8a\x0a\x79\xa2\x84\xb0\x24\x49\xa8\xb5\x05\xcc\x38\x55\x03\x69\xdc\xeb\xc6\x88\xa3\x20\xd7\x3d\x93\xc0\x19\xb6\x2e\xcd\x25\xb1\xeb\x92\xc9\x1f\x14\xe5\xcc\x83\x7a\x65\x27\x69\xf3\xe0\x69\xd9\x9e\x38\xdc\x0c\xfa\xc3\x2b\x78\xb6\xd7\x18\x67\x6e\x21\xa9\x42\x7e\x08\x64\xb1\xa5\x46\xf7\xd0\x7e\x52\x39\x93\x99\xfc\x97\x59\x1e\x4b\x84\x45\xdb\xaa\xd6\x78\x89\x2d\xf2\x6c\xf2\xf4\x16\x1b\x7d\xfa\x7f\xcf\x6e\x9f\x21\xcd\x60\x53\x01\x56\x51\x1a\x3f\x21\xae\xec\xa9\x11\x02\x72\x28\xed\x0c\xd6\x5a\xed\xb0\x4a\xd3\x75\x31\xca\x8b\x41\x56\xce\x4c\xba\xa0\xa3\x44\x41\xde\xf3\x7a\x95\xe4\xac\xce\xb7\xcf\xad\x36\x17\x92\x83\x05\x7c\xe9\xa0\x39\x1a\x5d\xab\xbf\xf2\xc7\x58\x60\x7a\xe7\xb0\x40\xa3\xf3\x62\xa6\x40\x3c\xf8\xbc\x0d\x82\x6a\x7b\x82\xc3\xe9\x61\x38\xbd\xa6\xe7\x7e\x6e\x81\x48\x02\xde\x77\x74\x11\x4b\xb6\xe3\x45\x92\x61\xe1\x7e\xf6\xb5\xdd\xfe\x4c\xee\x57\x0b\x71\x58\xd7\x0b\x28\x62\x58\x98\x65\x59\x40\xb5\xfe\x91\x97\x6e\x59\x74\x4d\xa5\x23\xcb\x3d\x68\x6c\xf5\xeb\x3b\x6e\x75\x5c\x4f\xd3\x95\x16\x74\xf1\xb8\xf5\x79\x1f\xc7\x80\xe2\xca\x31\xa0\x53\x22\xf2\x27\xa3\xe4\x06\x8a\x95\xbf\x9f\x48\xb6\x91\x54\x35\xab\xcb\x1c\x51\xb7\x24\x13\x07\x80\x03\x4a\x33\x59\x94\x1a\x4d\x6b\x96\x1f\x72\x51\xe6\x44\xe4\x14\xeb\x42\xfc\x8e\xcb\xfa\xf5\x1f\x35\xd7\x92\x09\x9b\xc6\x7b\x2d\xd7\xea\x1c\x85\x88\x53\x7b\xe7\x21\x18\x5f\xc7\x1a\x0f\x94\x1c\x63\xbb\xde\xc1\x98\x6b\x24\x5c\x06\xab\xda\x26\x1c\xb8\x23\x9e\x12\xfe\x07\x83\x8a\x84\x7f\x34\x2b\x25\x78\xf2\x7b\xc3\xf5\x21\xb9\x7e\x95\x28\x0d\xb5\x93\xb5\xa2\x3f\x95\xc5\x2c\xb0\x4e\xe4\x1f\xa5\x50\xa0\x63\x3b\x6d\xe9\x43\x9d\x11\x57\x1e\x9e\x58\x69\xc7\x67\x19\x38\x3b\xe3\x19\xf4\xed\x56\x54\x62\x00\x90\x6b\x8f\xa5\xbc\x0e\x15\x37\xf4\xdf\x95\x0f\x03\x8a\xab\xa3\x48\x8c\x7d\x9c\xed\x4b\x4d\xeb\xa4\x4f\xe5\xb4\xc1\xea\x4b\xeb\x7d\x50\xba\xdc\x94\x92\xd5\x4a\x27\x4f\x6f\x6c\xc9\xd2\x33\x57\x66\x0b\xab\xd8\x3f\x8c\x96\x77\x75\xce\x12\xa1\x67\xb6\x5f\x35\x82\x68\x32\x2f\x96\xdd\x9c\xf2\xb9\x90\xa1\x47\xb3\x25\xcc\xaf\xaa\x9a\xed\xf6\x21\x64\xa0\x03\xb2\xa2\x95\x11\xb8\x08\x89\x1d\x18\x18\xe1\x65\xe5\x93\xd7\x32\x49\xae\x2b\xdc\x37\xa5\x7b\xb0\xb0\xdb\xb3\x04\x31\xbf\x3c\x31\x63\x9f\xd8\x27\x8f\x7f\x3d\xea\xde\x7f\xf7\xc6\x7a\xf4\xfc\xb3\x1d\xbd\x83\x30\x51\x2e\x73\x90\xaa\x90\x99\xbc\x8d\x92\xa3\x33\xe9\x13\x93\x5f\x0a\xd5\x14\x09\xc9\x1e\x0a\x15\xe8\x45\x52\xf2\x45\x9a\x54\xff\xfb\xcd\x8b\x17\x8b\xc5\x10\x1f\xf4\x4c\x6c\x1a\x77\xbf\xe1\xbb\xfe\x13\x0e\xff\xd6\x9b\xf8\x7f\xe4\x6a\x45\xa4\x8b\xcb\x79\x76\xa2\x45\xf6\x81\xd3\x12\xfa\x51\xe2\xb4\xd6\x76\x97\x8e\x88\xf2\x9c\xee\x6c\x7e\xec\x78\x57\x7b\xa6\xb9\xac\x97\xd0\xe3\xbc\xce\xa0\x93\x1b\xf8\x3c\x2a\x68\x9a\x64\x0f\xff\xf2\x93\x42\x37\x87\xcd\x6a\xfe\x35\xa0\x8c\x25\x94\x40\x23\xdb\x9f\x96\x10\x75\x0c\x5c\xc2\xc7\x38\x32\x69\x42\x27\xac\x5e\x30\xa1\x48\x30\x4d\x9a\x90\x1f\x3d\x16\xf8\x3b\x3e\x54\x97\xd8\x69\x04\x85\xfd\x9b\x7f\xb2\x30\x69\xd7\x07\x27\x12\x56\x27\x48\x1e\xfd\x27\xd7\xca\x57\xab\x12\xf2\x78\xd0\xf0\x48\x86\xff\x61\x79\x3a\x94\x0e\x42\xe4\x21\x88\x4b\x88\x62\x00\x7f\xa1\xc4\x71\x54\xaa\x56\x07\x9b\xe9\x3f\x0c\x3e\xbc\x3c\x81\x9b\xc1\x0d\x25\xd0\x69\x02\xe9\x69\xed\x3e\x27\x8a\xed\x05\x7d\x01\x2a\x9b\x51\xbf\x8d\xae\xc1\xf6\x14\xe1\x27\xae\xfd\xb6\x0f\x6b\x01\x93\xf8\xe5\x9f\xbf\x2e\x86\x10\xb2\x60\xe8\x27\x33\x70\x7d\x6b\xe9\x08\x35\x67\x85\x67\x78\x08\x09\x1c\x8e\xa1\x5f\x1d\x3d\x90\x67\x68\x32\xe7\xec\x4b\x57\x57\x71\xb8\x16\xfe\x88\x97\x45\x08\x6f\xea\x0e\x38\x6d\x8f\x03\xf8\x57\xeb\x04\x2c\x96\x01\x6d\x69\x41\xe3\xec\xe9\x61\xc6\xea\xf5\xcb\xa7\x47\xd2\x03\x87\x6a\x78\xa7\x0c\xdf\xda\x18\x37\x4a\x89\x73\xed\x0c\x26\x2c\x62\xcc\x12\x0a\xf4\xcf\xd1\x13\xf0\x00\x38\xc3\xe2\xfa\x95\xf3\x79\xb9\xa2\x58\x90\xd3\x01\x3c\x0e\x04\x64\x68\x08\x10\x06\x41\x7a\xa8\xe1\x34\x85\x6a\xdf\xe3\xf6\x9c\x99\x6e\x01\x6d\x60\xbc\xc4\x61\xcf\x76\x0c\x9f\x20\x45\x94\xf9\x31\x42\xe1\x50\x6b\x84\xb3\xac\x1c\x2c\xa7\x6f\x75\xe5\x2c\x9e\xb0\xc0\xd0\xad\x63\xd0\xb7\x5d\x4f\x04\xf1\x31\x26\x13\x3d\x20\x99\x0c\x1e\x0b\xac\xdc\xb1\xf9\x2c\x6e\xd5\xfa\x0c\xa1\xe8\x18\x9e\x6d\x08\x9d\x53\x45\x3e\x6a\xc6\xbe\x0a\xc1\x1a\xc0\x1b\x9b\xab\xdd\xca\x18\x23\x08\xb2\x44\xe1\x10\x78\xe5\xae\x6c\x45\xa1\x2b\x87\xb2\xaf\x15\xe2\xb3\xb5\xd6\xde\xe5\x92\x84\xf5\x4e\xa1\xc8\xea\x8d\xa2\x0f\xa8\x16\x97\x2d\x78\xef\x97\xb3\x57\xed\x19\x00\x0e\xf9\x3d\x3b\x54\x80\x6c\x61\xac\xe2\xf5\xda\x13\xf7\x84\x5a\xba\xb3\xd3\x5c\x01\x18\xc1\x44\x35\x04\x78\x43\x73\x29\x89\xbb\x4d\x58\x0c\x0f\x5f\x29\xf2\xa4\xea\x5f\x9c\x87\xae\xce\xef\x5f\x0b\x68\xdf\xd5\x90\x12\x4c\x70\x94\xff\x9c\xa2\x65\xf1\x3f\x3e\x6d\x9d\xe7\x4a\xba\xba\xd3\x8b\x18\xac\x3d\x95\xfb\xfd\xc3\x85\x7f\xeb\xe0\x0b\x1f\xb3\x9e\xcf\x34\xe2\x83\x67\x52\xab\x9c\xf0\x92\xeb\x04\x00\xaf\x50\x1c\x9b\xbe\xd3\x64\xc7\x4a\x49\xd7\xa0\xd6\x46\x40\x16\x7c\xd5\x6c\x36\x83\xb6\xa5\x50\x9b\x07\x0d\x4b\xd8\x3a\xf7\xe0\xf7\x03\x29\xf1\x62\xac\x76\xfb\xc8\x09\xfd\x0b\x39\x11\x46\x6b\x9d\x2e\xe1\x06\xb8\xb6\x3d\xa1\xeb\x79\x5d\x0a\xfe\x38\x96\xff\x85\xdc\x18\xd7\x53\xdc\x18\x36\x76\x01\xf9\x93\x38\x0f\xe7\x5d\xfe\x1b\xf9\x37\xb0\xa6\x64\x59\xc6\xea\xe5\xc8\x90\x4e\x2c\xfa\x72\x65\xaa\x70\x59\x09\x31\xa9\xe2\xb2\xa8\x00\x0f\xfc\xf2\x55\x60\x20\xdb\xcf\x2f\xb1\x3a\x82\x87\xff\x5e\xed\x78\x02\x5d\x55\x88\x3c\x92\x50\x02\x68\x0a\xb1\x4e\x33\x41\x0f\x52\x07\x17\x9e\x82\x79\xf9\x96\xc9\x0d\x2f\xbc\x4a\xf8\x54\xf2\xfb\xc4\xc8\xda\x34\x0c\xfe\x04\xdb\x93\x26\xbc\xce\x9f\x11\xe4\xa9\xcf\x15\xd1\x3c\x57\xba\x80\xd2\xff\x0d\xd3\x05\x64\x28\xd1\x81\x17\x2c\xff\x0d\x48\xb7\xe0\x39\xc2\x1e\x29\x40\x65\xab\xe3\x31\x68\xea\x5b\x2b\x65\x8e\xf0\x93\x8e\x07\xdb\x8e\x0f\x3f\xaf\x12\x96\x6b\x55\x11\x2b\x2f\x71\x2d\x11\xc9\x4f\xc0\x73\x02\x3d\x0e\xba\x28\x58\x75\x56\xb5\xff\x95\xf4\xf9\x06\xfc\x8f\xbd\x60\x32\x3e\xf1\x38\xdd\x5a\x33\x80\x41\x1d\xd4\xe7\x5c\x1d\xde\xa3\x96\x02\x87\x30\x86\xfe\x5a\xa1\x6e\xa7\x39\x2b\x0e\x61\xb5\x52\x29\x09\x9b\x8c\x15\xbb\x52\x9a\xad\x37\xaf\x0b\xf2\xde\x90\xf4\x2a\x90\x3d\x5d\x60\x98\x16\xa0\x67\x8c\xdc\x8a\x5e\xc4\x2a\x91\xdc\x28\x04\x4c\x97\xe2\x00\x3a\xe0\x5e\xf3\xe7\x41\x3f\xc1\xfd\xa6\x3c\xb1\xb2\xca\x24\x8e\x1d\x58\xf3\xd6\x8d\x40\x4d\x11\x6c\x29\x37\x01\xba\x87\x1f\xae\x53\xf3\x48\xd4\x04\xf8\x10\x74\x0c\x67\xf6\x22\x39\x37\x5d\x2b\x66\x92\x63\xce\x57\xd1\x69\x48\x08\xd8\xaa\x7b\x9b\x18\x78\xcf\x7c\xdc\x77\x8e\x99\x77\x43\xb2\xcb\x9a\x70\x41\x94\x18\x1e\xf4\x08\x74\xff\x5b\xa5\x09\x94\x01\x84\xc3\x0d\x61\xfb\x7f\x57\xde\xf1\x34\x79\xbf\x67\xfa\xb7\x34\x79\x75\x90\x6c\x57\xe6\xdf\xab\xd5\x51\xcb\xed\x12\xde\x0b\xa7\x60\xcc\xf6\x6e\xf5\xfa\x01\xd2\xa0\x66\x3f\xf0\x71\x75\xed\x6c\x1b\xc0\x33\x27\x86\xd0\x38\x87\x1e\x48\x1b\x13\xd5\x3d\x54\x42\xc9\x25\xf5\xcf\xe1\x90\xee\xa0\x36\xda\x96\x00\x5e\x56\x53\xd6\x6c\x5f\x20\xd3\xc8\x48\x48\xf6\x35\x13\x7f\x0e\xaf\x9e\xd2\xc9\x5e\xb0\xda\x9c\x15\xcb\x97\x83\xa7\x02\x63\xaf\x28\xed\x5b\xb9\xd0\x9d\x45\x1d\x14\xb1\xd8\xf1\x72\xaf\x94\xe8\x7d\xdb\x2f\xba\x80\x1d\x3f\xd5\xd4\xc5\xbb\xc6\x1c\xb2\x2a\x7c\xf1\xec\x2a\x7a\x9f\x87\xf7\x90\x04\x98\xc6\x70\x9a\x8a\x46\x23\xc7\x87\x5d\x8e\x85\x77\x30\x32\xa3\x7c\x63\xc4\x1b\x1f\xb9\x15\xcf\x19\x54\xb9\x5a\xed\x03\xf9\x87\x90\xb7\xdc\xbd\xd1\x3d\xde\x98\xaa\xdb\xcf\x80\xca\x01\xed\x2e\xcb\xbe\xa2\xa7\xb9\x97\xeb\xa7\x6d\xaf\x8b\x15\x47\x6e\xdd\x43\x36\xeb\xe8\x58\x51\xb3\x4d\xb2\x5e\xe6\x82\x55\x13\x33\x3e\x7a\xe5\xce\x35\x35\xf4\x12\xda\x99\x2e\x33\xbf\x03\x6f\xd8\x6e\xa2\x30\xce\xe4\x95\x2b\xea\xf5\xcf\xb8\x53\x3d\x50\xcc\xa2\xd2\xd5\xd9\x1a\x4c\x65\xf2\x15\xe0\x69\x52\x35\xf9\x16\x92\xb5\x62\x39\x15\xca\xad\xee\x8d\x4d\x33\x69\x1e\x42\x44\xf0\x62\x10\x11\xb9\x37\xcf\x5d\x55\xfe\xc9\xdd\x4b\x8b\x2a\x51\xf4\xb8\xae\x98\xd9\x1a\x82\xe1\x6e\x2b\x22\x36\x6f\x8e\xe9\xdf\x78\x11\x38\x69\x9a\xbd\x31\x2e\x17\x99\x5b\x66\x3c\xbf\x9e\x38\x8a\x34\x9b\x2a\x9c\x58\xa8\x88\xb5\x24\xad\x28\xd7\x3c\x3f\xe4\x9d\x1a\xd0\x28\x0e\x79\x39\x6f\xe0\x69\xce\xb0\xb1\x5a\xc1\x7e\x1b\xe7\xe7\x4e\xbd\x4b\x32\x14\xbc\xf9\xef\x4c\x88\x18\x28\x57\xfb\xab\xfb\x33\x8e\x24\x41\x7f\xc9\x6d\xb8\xa8\xed\xff\x55\xf8\x7f\x2b\x19\x6c\xea\x00\xd8\x19\xa4\x8f\xf6\x26\x2c\x7c\x5e\xa9\xff\x65\x11\x9e\xc8\x7a\xcb\x7b\x2a\x00\xa6\x1d\x32\x2a\xb0\x28\x5c\xf1\xc7\x1c\xec\x18\xfc\xd4\xae\xd7\x4b\xa1\xaa\x46\x8f\x5f\xab\x77\xf1\xa8\x6d\xef\x7e\x36\x11\xa6\x0f\xdf\xad\x38\xd4\xf5\x14\xb8\x33\xbd\x93\x39\xf6\x04\x1b\x4b\xa4\xfd\x3d\x85\xf2\xef\x79\x92\xb3\x3d\xe4\x57\xf6\x23\x1d\x76\xbe\x0b\x2c\x57\x78\xd3\x36\x3c\x7c\x5f\x5b\xcf\x4e\x74\xb8\xa2\x18\xc8\x67\x95\x8c\xd7\x6b\xdd\xb4\x6a\x8f\x23\x27\xc7\xa4\xa8\xd1\x25\x3c\xb2\x37\xac\xde\xa2\xf9\x0d\xa8\xdf\x18\x41\xac\x8d\x6a\x82\x38\xb4\xe8\xa6\x5d\x09\xb5\x02\xf0\xd2\x5a\xe9\x41\x36\xff\x9c\x0e\xe7\xa4\xa5\xeb\x6e\xd8\x94\xb3\x6d\xee\x03\xe4\x52\x6b\x5e\x41\x51\x5d\x37\x0e\xd2\x49\x6b\xbc\x88\x8b\xa0\x3b\x5c\x23\xb6\x5e\x75\x5c\x04\x5d\x88\x1d\x23\x2f\x21\x13\xe7\xf5\x88\xc0\x1c\xba\x58\xaf\xc3\x6c\x64\x06\x5c\x2c\x35\x90\x5d\x62\xa0\xb1\x2a\xe5\x46\xf0\xd6\x7c\x2d\x3a\x74\x26\xaf\xf0\x5f\x42\x82\x62\x8f\x02\xe7\x92\x5d\x08\x08\xd4\xdd\x3f\x4c\x4f\x4e\xae\x6c\xb9\x21\x94\xb5\x31\x0a\x84\x39\x5b\x06\x1c\x0f\xa9\x65\x3c\xd6\x46\x53\xad\xe0\x21\xae\x9a\xd5\x73\x5f\x7c\xa6\x34\x3c\xdd\x50\x9b\xb8\x67\x1a\x50\x96\xb7\xa5\x28\x9e\xf7\x14\x18\xa3\xf7\xd0\x43\x42\x59\x7c\x02\x26\x48\x7c\x81\xc5\x85\xb5\x0f\x6e\xee\xae\x1d\xa3\x38\x73\x96\x6f\x5d\xde\x3d\x8a\xeb\x31\x79\x11\x99\x21\x9f\x3a\x69\x63\x42\x56\xc4\x00\xc8\xe3\x5f\x5f\x4e\x44\x6b\x36\x45\x4e\xfc\x14\x1b\x2d\xf6\xd6\x18\xb3\x8b\x24\xc7\xd0\x52\x55\x4b\x0c\x4d\x3f\x42\x71\xb6\xf7\xb9\x54\x7b\x76\x2f\xa9\xe4\x6b\x56\xf2\xfb\x34\xf9\xd0\x8f\x1e\x6f\xe4\x43\x27\x5d\x25\xa4\x32\x47\xcb\xbe\x2e\x1d\x64\x66\x1a\x60\x03\x33\x21\x42\x9c\x26\xef\x64\xc9\xa4\x37\xc5\xcd\xf3\x2f\x84\xf9\x7f\xde\x16\xdc\x54\xe2\x57\x40\xd9\x04\x4f\x6d\x7d\x12\xd5\xf6\x93\xf3\xff\x39\x9a\xbc\x83\xdc\xf4\x9d\xdb\x7c\x29\x7d\x32\x67\xf9\x96\x2f\xcd\xd0\x9a\x19\x45\x2c\x44\xb4\xfe\xd2\x7c\xfc\x1e\xbf\x1d\x7d\xcc\x50\x2f\x42\x35\x0d\xfb\x82\xa4\x35\x96\x43\x2d\xb6\xf3\x75\x1e\xbb\xde\x39\x76\xbb\xec\xe1\x9d\x3b\x3a\xd6\x7e\x47\x77\x40\x49\x07\x97\xd9\x56\xc8\xe4\x4c\x6b\x9b\x88\x4a\xbd\x26\x4c\xd7\xe5\x9a\xe5\x91\x6f\x7a\x12\x3a\x4b\xf4\x42\x62\x8b\x15\x84\x4c\x3d\x95\xb7\x15\xe5\x2c\x71\x90\xbc\xc3\xfb\x7f\x69\x9b\x82\x7b\x21\x7d\x19\xcf\xc3\xec\x45\x61\x49\x54\x20\xdf\x3b\xf5\x80\xd9\xf5\x8c\xb9\x9e\x58\x1a\x30\x0f\x3f\x2d\xa0\x5b\x9d\x2e\xe1\x3a\x18\xa8\x44\x35\x8a\xe4\x8c\x54\x65\x5c\xb7\xcb\xe2\x60\x09\x31\x85\xf8\x8e\x17\xbe\x64\x30\xc0\x8d\x30\x4f\x14\xdb\xf0\x64\xc7\x8b\xb2\x69\xc3\xf3\x45\xe9\xee\x5f\x6c\xd6\xbf\x9f\xcd\x0a\xc1\xf5\x87\x34\x58\xfb\x0b\x29\xbe\x3c\x59\x9f\xc1\x93\x15\x8c\x93\xf6\x7a\xe6\x2d\x98\x2c\x3d\xc6\xe3\x57\xfe\x51\xf4\x9a\xa2\x8b\xd9\xb1\xee\x39\x0c\x5d\x2d\x75\xb8\x06\x46\x41\xef\xbb\x1a\xc3\x07\xf3\xc1\xde\xd2\x8b\xb9\xf1\xa7\x3c\xa6\xe6\x8a\x3b\xc7\xfe\x5b\x7b\xb5\x81\x11\xad\x56\x63\x57\x3c\xc0\x31\x61\xf5\x93\xca\xad\x7a\x7c\x95\x6d\xb6\xd2\x9b\xb2\xaa\x3f\x32\xd1\x9c\x05\x5e\x02\x35\x0b\x0f\x16\x8b\xb6\x43\xc5\x61\x06\x5f\x8c\x86\x50\xdf\xc5\x41\x4e\xf3\xae\xe2\x99\x83\x22\x67\x0b\x09\x6a\xc6\x3d\x47\xf0\xde\xba\xf5\xba\x45\xdd\xee\x5e\xb3\xfd\x9e\x6b\x1b\xb9\xeb\x04\x57\x01\x5f\x13\x7a\xc9\x24\xfa\x08\xbe\x7f\xff\xe3\xdb\xf6\xdb\x60\x64\x4f\xab\x69\xf8\x19\x2c\xdd\xa2\x7f\xe7\xde\x36\x42\x0c\xee\xdc\x04\x5a\xb9\x0f\x6f\xde\x2c\x3f\x5e\xbd\xf9\xf0\x7a\x14\x1a\x2f\xf8\xd9\xe0\x9a\xb8\x91\xd0\x9a\xa0\xe5\x56\x83\xb5\xd6\xec\xb8\xb6\x65\x03\x7e\xd6\xa8\x20\x37\x42\xc4\x10\x89\x99\xbc\xa5\x76\x20\xc5\xa6\x91\xe8\x59\xc9\x64\x32\xba\x70\x71\xff\xf0\xb3\x5b\xd3\xf8\x2d\x7e\xfb\x3c\xf1\x93\xf8\x26\x79\xeb\x7a\x1d\x58\x57\xca\xdf\x3b\xe3\x3a\x20\x52\xe3\xd0\x75\xb8\x34\x08\xec\x69\xd7\xe3\x83\xb4\x94\xfa\x84\xdd\x7a\x91\xdb\x81\x6b\x77\x1b\x7b\xed\x9c\x2c\x2f\x50\xb5\x85\x76\x53\x84\xee\x44\xf6\x6f\x87\x6e\x99\x49\xa2\x85\x64\x50\x65\x37\x38\xa6\xe4\x9a\xe2\xd9\x82\xc9\x4d\xc3\x36\xbc\x4a\x13\xdb\x79\x26\x77\xe5\x66\x0b\x58\x27\x9e\x4f\x1d\xab\x01\x58\x5d\xde\xf1\xd6\x11\xc2\x54\x24\xaa\xef\x4f\x93\x52\x66\x92\xe6\x24\x37\xbe\x79\xcc\x52\xfa\xfe\xbd\x9b\x8e\x39\x69\xae\x21\x42\x1f\x95\x99\xb4\x8c\xf7\x00\x31\x47\xee\x0c\x50\xfc\x80\xc3\x3a\x3a\xba\x4c\x73\x0b\x78\x0c\x32\x7d\x03\x8e\x95\x4c\xba\x94\x78\xd8\xd8\x88\x8d\x06\x73\x17\x71\x48\xc7\xe5\x89\xdd\x0c\x7b\x27\x68\x6c\xfd\xa7\xfe\xec\x37\xc0\x5c\xb8\xe5\x5d\xab\x95\x09\xc7\xd6\x8b\xb1\x89\x3a\x36\x0b\x04\xc7\x50\x9d\x14\xd4\x41\xf4\x8f\xc6\xce\x0b\x7f\x33\x18\x04\x56\xcd\x4a\xcc\x18\x12\xfe\x7e\x74\x50\x28\x92\xc7\x07\x35\xc1\x97\xf9\xae\x75\xb5\xcc\x31\x1d\xeb\x76\xa5\xd4\xc0\xbe\x5c\xd0\x2b\x18\x0d\x8a\x3e\x38\xb6\x18\x4d\x5e\x9f\x72\x5e\x26\xa4\x57\xb7\x97\xc8\x4a\x9f\xb1\x01\x89\xb2\x3a\x69\x38\x5e\x7f\x9a\x3c\x22\xa7\x21\xd0\x63\x37\x4b\xc2\xd2\x3b\x17\x09\xd8\x01\x31\x49\xbe\x28\x8a\x44\xf0\x12\xc5\x8b\x04\xde\x47\x46\xb5\x42\xa9\x3b\x44\xa9\xdf\xb9\x14\x06\x99\x37\xba\x32\xe2\x92\xe4\x1d\x49\x6d\xa5\x13\x96\x49\x8b\x7f\x65\xc5\xf1\x95\x45\x24\xd1\xee\xaf\x98\xb2\xbe\x47\xf4\x18\xd0\x58\xeb\x44\x49\x6e\xa5\x61\x26\x01\x64\x5c\x82\xd7\x74\x55\x01\xfc\x1f\x41\x69\xd3\x3f\x04\xbc\x5f\x4c\x22\x49\xe4\x71\x99\xd7\x52\x03\xa2\x77\xfe\x2b\xf3\xdf\xbf\xbf\xfa\x4f\x00\x00\x00\xff\xff\x9d\x64\xd9\x32\xbb\xa8\x03\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 239132, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 239803, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Types.java b/flyteidl/gen/pb-java/flyteidl/core/Types.java index e406390f7d..7a6c5a4d7d 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Types.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Types.java @@ -2732,6 +2732,689 @@ public flyteidl.core.Types.BlobType getDefaultInstanceForType() { } + public interface EnumTypeOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.core.EnumType) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + java.util.List + getValuesList(); + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + int getValuesCount(); + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + java.lang.String getValues(int index); + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + com.google.protobuf.ByteString + getValuesBytes(int index); + } + /** + *
+   * Enables declaring enum types, with predefined string values
+   * For len(values) > 0, the first value in the ordered list is regarded as the default value. If you wish
+   * To provide no defaults, make the first value as undefined.
+   * 
+ * + * Protobuf type {@code flyteidl.core.EnumType} + */ + public static final class EnumType extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.core.EnumType) + EnumTypeOrBuilder { + private static final long serialVersionUID = 0L; + // Use EnumType.newBuilder() to construct. + private EnumType(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private EnumType() { + values_ = com.google.protobuf.LazyStringArrayList.EMPTY; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private EnumType( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + values_ = new com.google.protobuf.LazyStringArrayList(); + mutable_bitField0_ |= 0x00000001; + } + values_.add(s); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + values_ = values_.getUnmodifiableView(); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Types.internal_static_flyteidl_core_EnumType_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Types.internal_static_flyteidl_core_EnumType_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Types.EnumType.class, flyteidl.core.Types.EnumType.Builder.class); + } + + public static final int VALUES_FIELD_NUMBER = 1; + private com.google.protobuf.LazyStringList values_; + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + public com.google.protobuf.ProtocolStringList + getValuesList() { + return values_; + } + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + public int getValuesCount() { + return values_.size(); + } + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + public java.lang.String getValues(int index) { + return values_.get(index); + } + /** + *
+     * Predefined set of enum values.
+     * 
+ * + * repeated string values = 1; + */ + public com.google.protobuf.ByteString + getValuesBytes(int index) { + return values_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < values_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, values_.getRaw(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < values_.size(); i++) { + dataSize += computeStringSizeNoTag(values_.getRaw(i)); + } + size += dataSize; + size += 1 * getValuesList().size(); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.core.Types.EnumType)) { + return super.equals(obj); + } + flyteidl.core.Types.EnumType other = (flyteidl.core.Types.EnumType) obj; + + if (!getValuesList() + .equals(other.getValuesList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getValuesCount() > 0) { + hash = (37 * hash) + VALUES_FIELD_NUMBER; + hash = (53 * hash) + getValuesList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.core.Types.EnumType parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Types.EnumType parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Types.EnumType parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Types.EnumType parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Types.EnumType parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Types.EnumType parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Types.EnumType parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Types.EnumType parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Types.EnumType parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.core.Types.EnumType parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Types.EnumType parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Types.EnumType parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.core.Types.EnumType prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Enables declaring enum types, with predefined string values
+     * For len(values) > 0, the first value in the ordered list is regarded as the default value. If you wish
+     * To provide no defaults, make the first value as undefined.
+     * 
+ * + * Protobuf type {@code flyteidl.core.EnumType} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.core.EnumType) + flyteidl.core.Types.EnumTypeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Types.internal_static_flyteidl_core_EnumType_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Types.internal_static_flyteidl_core_EnumType_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Types.EnumType.class, flyteidl.core.Types.EnumType.Builder.class); + } + + // Construct using flyteidl.core.Types.EnumType.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + values_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.core.Types.internal_static_flyteidl_core_EnumType_descriptor; + } + + @java.lang.Override + public flyteidl.core.Types.EnumType getDefaultInstanceForType() { + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.core.Types.EnumType build() { + flyteidl.core.Types.EnumType result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.core.Types.EnumType buildPartial() { + flyteidl.core.Types.EnumType result = new flyteidl.core.Types.EnumType(this); + int from_bitField0_ = bitField0_; + if (((bitField0_ & 0x00000001) != 0)) { + values_ = values_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.values_ = values_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.core.Types.EnumType) { + return mergeFrom((flyteidl.core.Types.EnumType)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.core.Types.EnumType other) { + if (other == flyteidl.core.Types.EnumType.getDefaultInstance()) return this; + if (!other.values_.isEmpty()) { + if (values_.isEmpty()) { + values_ = other.values_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureValuesIsMutable(); + values_.addAll(other.values_); + } + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.core.Types.EnumType parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.core.Types.EnumType) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private com.google.protobuf.LazyStringList values_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureValuesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + values_ = new com.google.protobuf.LazyStringArrayList(values_); + bitField0_ |= 0x00000001; + } + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public com.google.protobuf.ProtocolStringList + getValuesList() { + return values_.getUnmodifiableView(); + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public int getValuesCount() { + return values_.size(); + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public java.lang.String getValues(int index) { + return values_.get(index); + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public com.google.protobuf.ByteString + getValuesBytes(int index) { + return values_.getByteString(index); + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public Builder setValues( + int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureValuesIsMutable(); + values_.set(index, value); + onChanged(); + return this; + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public Builder addValues( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureValuesIsMutable(); + values_.add(value); + onChanged(); + return this; + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public Builder addAllValues( + java.lang.Iterable values) { + ensureValuesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, values_); + onChanged(); + return this; + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public Builder clearValues() { + values_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + *
+       * Predefined set of enum values.
+       * 
+ * + * repeated string values = 1; + */ + public Builder addValuesBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureValuesIsMutable(); + values_.add(value); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.core.EnumType) + } + + // @@protoc_insertion_point(class_scope:flyteidl.core.EnumType) + private static final flyteidl.core.Types.EnumType DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.core.Types.EnumType(); + } + + public static flyteidl.core.Types.EnumType getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public EnumType parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new EnumType(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.core.Types.EnumType getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + public interface LiteralTypeOrBuilder extends // @@protoc_insertion_point(interface_extends:flyteidl.core.LiteralType) com.google.protobuf.MessageOrBuilder { @@ -2853,6 +3536,31 @@ public interface LiteralTypeOrBuilder extends */ flyteidl.core.Types.BlobTypeOrBuilder getBlobOrBuilder(); + /** + *
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + boolean hasEnumType(); + /** + *
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + flyteidl.core.Types.EnumType getEnumType(); + /** + *
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + flyteidl.core.Types.EnumTypeOrBuilder getEnumTypeOrBuilder(); + /** *
      * This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking.  This might be used by
@@ -3001,6 +3709,20 @@ private LiteralType(
 
               break;
             }
+            case 58: {
+              flyteidl.core.Types.EnumType.Builder subBuilder = null;
+              if (typeCase_ == 7) {
+                subBuilder = ((flyteidl.core.Types.EnumType) type_).toBuilder();
+              }
+              type_ =
+                  input.readMessage(flyteidl.core.Types.EnumType.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((flyteidl.core.Types.EnumType) type_);
+                type_ = subBuilder.buildPartial();
+              }
+              typeCase_ = 7;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -3042,6 +3764,7 @@ public enum TypeCase
       COLLECTION_TYPE(3),
       MAP_VALUE_TYPE(4),
       BLOB(5),
+      ENUM_TYPE(7),
       TYPE_NOT_SET(0);
       private final int value;
       private TypeCase(int value) {
@@ -3062,6 +3785,7 @@ public static TypeCase forNumber(int value) {
           case 3: return COLLECTION_TYPE;
           case 4: return MAP_VALUE_TYPE;
           case 5: return BLOB;
+          case 7: return ENUM_TYPE;
           case 0: return TYPE_NOT_SET;
           default: return null;
         }
@@ -3260,6 +3984,44 @@ public flyteidl.core.Types.BlobTypeOrBuilder getBlobOrBuilder() {
       return flyteidl.core.Types.BlobType.getDefaultInstance();
     }
 
+    public static final int ENUM_TYPE_FIELD_NUMBER = 7;
+    /**
+     * 
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public boolean hasEnumType() { + return typeCase_ == 7; + } + /** + *
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public flyteidl.core.Types.EnumType getEnumType() { + if (typeCase_ == 7) { + return (flyteidl.core.Types.EnumType) type_; + } + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } + /** + *
+     * Defines an enum with pre-defined string values.
+     * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public flyteidl.core.Types.EnumTypeOrBuilder getEnumTypeOrBuilder() { + if (typeCase_ == 7) { + return (flyteidl.core.Types.EnumType) type_; + } + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } + public static final int METADATA_FIELD_NUMBER = 6; private com.google.protobuf.Struct metadata_; /** @@ -3328,6 +4090,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (metadata_ != null) { output.writeMessage(6, getMetadata()); } + if (typeCase_ == 7) { + output.writeMessage(7, (flyteidl.core.Types.EnumType) type_); + } unknownFields.writeTo(output); } @@ -3361,6 +4126,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(6, getMetadata()); } + if (typeCase_ == 7) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, (flyteidl.core.Types.EnumType) type_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -3403,6 +4172,10 @@ public boolean equals(final java.lang.Object obj) { if (!getBlob() .equals(other.getBlob())) return false; break; + case 7: + if (!getEnumType() + .equals(other.getEnumType())) return false; + break; case 0: default: } @@ -3442,6 +4215,10 @@ public int hashCode() { hash = (37 * hash) + BLOB_FIELD_NUMBER; hash = (53 * hash) + getBlob().hashCode(); break; + case 7: + hash = (37 * hash) + ENUM_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getEnumType().hashCode(); + break; case 0: default: } @@ -3647,6 +4424,13 @@ public flyteidl.core.Types.LiteralType buildPartial() { result.type_ = blobBuilder_.build(); } } + if (typeCase_ == 7) { + if (enumTypeBuilder_ == null) { + result.type_ = type_; + } else { + result.type_ = enumTypeBuilder_.build(); + } + } if (metadataBuilder_ == null) { result.metadata_ = metadata_; } else { @@ -3725,6 +4509,10 @@ public Builder mergeFrom(flyteidl.core.Types.LiteralType other) { mergeBlob(other.getBlob()); break; } + case ENUM_TYPE: { + mergeEnumType(other.getEnumType()); + break; + } case TYPE_NOT_SET: { break; } @@ -4535,6 +5323,178 @@ public flyteidl.core.Types.BlobTypeOrBuilder getBlobOrBuilder() { return blobBuilder_; } + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Types.EnumType, flyteidl.core.Types.EnumType.Builder, flyteidl.core.Types.EnumTypeOrBuilder> enumTypeBuilder_; + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public boolean hasEnumType() { + return typeCase_ == 7; + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public flyteidl.core.Types.EnumType getEnumType() { + if (enumTypeBuilder_ == null) { + if (typeCase_ == 7) { + return (flyteidl.core.Types.EnumType) type_; + } + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } else { + if (typeCase_ == 7) { + return enumTypeBuilder_.getMessage(); + } + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public Builder setEnumType(flyteidl.core.Types.EnumType value) { + if (enumTypeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + type_ = value; + onChanged(); + } else { + enumTypeBuilder_.setMessage(value); + } + typeCase_ = 7; + return this; + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public Builder setEnumType( + flyteidl.core.Types.EnumType.Builder builderForValue) { + if (enumTypeBuilder_ == null) { + type_ = builderForValue.build(); + onChanged(); + } else { + enumTypeBuilder_.setMessage(builderForValue.build()); + } + typeCase_ = 7; + return this; + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public Builder mergeEnumType(flyteidl.core.Types.EnumType value) { + if (enumTypeBuilder_ == null) { + if (typeCase_ == 7 && + type_ != flyteidl.core.Types.EnumType.getDefaultInstance()) { + type_ = flyteidl.core.Types.EnumType.newBuilder((flyteidl.core.Types.EnumType) type_) + .mergeFrom(value).buildPartial(); + } else { + type_ = value; + } + onChanged(); + } else { + if (typeCase_ == 7) { + enumTypeBuilder_.mergeFrom(value); + } + enumTypeBuilder_.setMessage(value); + } + typeCase_ = 7; + return this; + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public Builder clearEnumType() { + if (enumTypeBuilder_ == null) { + if (typeCase_ == 7) { + typeCase_ = 0; + type_ = null; + onChanged(); + } + } else { + if (typeCase_ == 7) { + typeCase_ = 0; + type_ = null; + } + enumTypeBuilder_.clear(); + } + return this; + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public flyteidl.core.Types.EnumType.Builder getEnumTypeBuilder() { + return getEnumTypeFieldBuilder().getBuilder(); + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + public flyteidl.core.Types.EnumTypeOrBuilder getEnumTypeOrBuilder() { + if ((typeCase_ == 7) && (enumTypeBuilder_ != null)) { + return enumTypeBuilder_.getMessageOrBuilder(); + } else { + if (typeCase_ == 7) { + return (flyteidl.core.Types.EnumType) type_; + } + return flyteidl.core.Types.EnumType.getDefaultInstance(); + } + } + /** + *
+       * Defines an enum with pre-defined string values.
+       * 
+ * + * .flyteidl.core.EnumType enum_type = 7; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Types.EnumType, flyteidl.core.Types.EnumType.Builder, flyteidl.core.Types.EnumTypeOrBuilder> + getEnumTypeFieldBuilder() { + if (enumTypeBuilder_ == null) { + if (!(typeCase_ == 7)) { + type_ = flyteidl.core.Types.EnumType.getDefaultInstance(); + } + enumTypeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Types.EnumType, flyteidl.core.Types.EnumType.Builder, flyteidl.core.Types.EnumTypeOrBuilder>( + (flyteidl.core.Types.EnumType) type_, + getParentForChildren(), + isClean()); + type_ = null; + } + typeCase_ = 7; + onChanged();; + return enumTypeBuilder_; + } + private com.google.protobuf.Struct metadata_; private com.google.protobuf.SingleFieldBuilderV3< com.google.protobuf.Struct, com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> metadataBuilder_; @@ -6298,6 +7258,11 @@ public flyteidl.core.Types.Error getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_flyteidl_core_BlobType_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_EnumType_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_EnumType_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor internal_static_flyteidl_core_LiteralType_descriptor; private static final @@ -6334,22 +7299,24 @@ public flyteidl.core.Types.Error getDefaultInstanceForType() { "format\030\001 \001(\t\022B\n\016dimensionality\030\002 \001(\0162*.f" + "lyteidl.core.BlobType.BlobDimensionality" + "\"/\n\022BlobDimensionality\022\n\n\006SINGLE\020\000\022\r\n\tMU" + - "LTIPART\020\001\"\260\002\n\013LiteralType\022+\n\006simple\030\001 \001(" + - "\0162\031.flyteidl.core.SimpleTypeH\000\022+\n\006schema" + - "\030\002 \001(\0132\031.flyteidl.core.SchemaTypeH\000\0225\n\017c" + - "ollection_type\030\003 \001(\0132\032.flyteidl.core.Lit" + - "eralTypeH\000\0224\n\016map_value_type\030\004 \001(\0132\032.fly" + - "teidl.core.LiteralTypeH\000\022\'\n\004blob\030\005 \001(\0132\027" + - ".flyteidl.core.BlobTypeH\000\022)\n\010metadata\030\006 " + - "\001(\0132\027.google.protobuf.StructB\006\n\004type\"/\n\017" + - "OutputReference\022\017\n\007node_id\030\001 \001(\t\022\013\n\003var\030" + - "\002 \001(\t\"0\n\005Error\022\026\n\016failed_node_id\030\001 \001(\t\022\017" + - "\n\007message\030\002 \001(\t*\206\001\n\nSimpleType\022\010\n\004NONE\020\000" + - "\022\013\n\007INTEGER\020\001\022\t\n\005FLOAT\020\002\022\n\n\006STRING\020\003\022\013\n\007" + - "BOOLEAN\020\004\022\014\n\010DATETIME\020\005\022\014\n\010DURATION\020\006\022\n\n" + - "\006BINARY\020\007\022\t\n\005ERROR\020\010\022\n\n\006STRUCT\020\tB6Z4gith" + - "ub.com/flyteorg/flyteidl/gen/pb-go/flyte" + - "idl/coreb\006proto3" + "LTIPART\020\001\"\032\n\010EnumType\022\016\n\006values\030\001 \003(\t\"\336\002" + + "\n\013LiteralType\022+\n\006simple\030\001 \001(\0162\031.flyteidl" + + ".core.SimpleTypeH\000\022+\n\006schema\030\002 \001(\0132\031.fly" + + "teidl.core.SchemaTypeH\000\0225\n\017collection_ty" + + "pe\030\003 \001(\0132\032.flyteidl.core.LiteralTypeH\000\0224" + + "\n\016map_value_type\030\004 \001(\0132\032.flyteidl.core.L" + + "iteralTypeH\000\022\'\n\004blob\030\005 \001(\0132\027.flyteidl.co" + + "re.BlobTypeH\000\022,\n\tenum_type\030\007 \001(\0132\027.flyte" + + "idl.core.EnumTypeH\000\022)\n\010metadata\030\006 \001(\0132\027." + + "google.protobuf.StructB\006\n\004type\"/\n\017Output" + + "Reference\022\017\n\007node_id\030\001 \001(\t\022\013\n\003var\030\002 \001(\t\"" + + "0\n\005Error\022\026\n\016failed_node_id\030\001 \001(\t\022\017\n\007mess" + + "age\030\002 \001(\t*\206\001\n\nSimpleType\022\010\n\004NONE\020\000\022\013\n\007IN" + + "TEGER\020\001\022\t\n\005FLOAT\020\002\022\n\n\006STRING\020\003\022\013\n\007BOOLEA" + + "N\020\004\022\014\n\010DATETIME\020\005\022\014\n\010DURATION\020\006\022\n\n\006BINAR" + + "Y\020\007\022\t\n\005ERROR\020\010\022\n\n\006STRUCT\020\tB6Z4github.com" + + "/flyteorg/flyteidl/gen/pb-go/flyteidl/co" + + "reb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -6382,20 +7349,26 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_BlobType_descriptor, new java.lang.String[] { "Format", "Dimensionality", }); - internal_static_flyteidl_core_LiteralType_descriptor = + internal_static_flyteidl_core_EnumType_descriptor = getDescriptor().getMessageTypes().get(2); + internal_static_flyteidl_core_EnumType_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_core_EnumType_descriptor, + new java.lang.String[] { "Values", }); + internal_static_flyteidl_core_LiteralType_descriptor = + getDescriptor().getMessageTypes().get(3); internal_static_flyteidl_core_LiteralType_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_LiteralType_descriptor, - new java.lang.String[] { "Simple", "Schema", "CollectionType", "MapValueType", "Blob", "Metadata", "Type", }); + new java.lang.String[] { "Simple", "Schema", "CollectionType", "MapValueType", "Blob", "EnumType", "Metadata", "Type", }); internal_static_flyteidl_core_OutputReference_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageTypes().get(4); internal_static_flyteidl_core_OutputReference_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_OutputReference_descriptor, new java.lang.String[] { "NodeId", "Var", }); internal_static_flyteidl_core_Error_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageTypes().get(5); internal_static_flyteidl_core_Error_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_Error_descriptor, diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index b6127624f9..1a7fe183c6 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -2875,6 +2875,58 @@ export namespace flyteidl { } } + /** Properties of an EnumType. */ + interface IEnumType { + + /** EnumType values */ + values?: (string[]|null); + } + + /** Represents an EnumType. */ + class EnumType implements IEnumType { + + /** + * Constructs a new EnumType. + * @param [properties] Properties to set + */ + constructor(properties?: flyteidl.core.IEnumType); + + /** EnumType values. */ + public values: string[]; + + /** + * Creates a new EnumType instance using the specified properties. + * @param [properties] Properties to set + * @returns EnumType instance + */ + public static create(properties?: flyteidl.core.IEnumType): flyteidl.core.EnumType; + + /** + * Encodes the specified EnumType message. Does not implicitly {@link flyteidl.core.EnumType.verify|verify} messages. + * @param message EnumType message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: flyteidl.core.IEnumType, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes an EnumType message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns EnumType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.core.EnumType; + + /** + * Verifies an EnumType message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + } + /** Properties of a LiteralType. */ interface ILiteralType { @@ -2893,6 +2945,9 @@ export namespace flyteidl { /** LiteralType blob */ blob?: (flyteidl.core.IBlobType|null); + /** LiteralType enumType */ + enumType?: (flyteidl.core.IEnumType|null); + /** LiteralType metadata */ metadata?: (google.protobuf.IStruct|null); } @@ -2921,11 +2976,14 @@ export namespace flyteidl { /** LiteralType blob. */ public blob?: (flyteidl.core.IBlobType|null); + /** LiteralType enumType. */ + public enumType?: (flyteidl.core.IEnumType|null); + /** LiteralType metadata. */ public metadata?: (google.protobuf.IStruct|null); /** LiteralType type. */ - public type?: ("simple"|"schema"|"collectionType"|"mapValueType"|"blob"); + public type?: ("simple"|"schema"|"collectionType"|"mapValueType"|"blob"|"enumType"); /** * Creates a new LiteralType instance using the specified properties. diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index d2460a9491..70d891595b 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -6929,6 +6929,124 @@ export const flyteidl = $root.flyteidl = (() => { return BlobType; })(); + core.EnumType = (function() { + + /** + * Properties of an EnumType. + * @memberof flyteidl.core + * @interface IEnumType + * @property {Array.|null} [values] EnumType values + */ + + /** + * Constructs a new EnumType. + * @memberof flyteidl.core + * @classdesc Represents an EnumType. + * @implements IEnumType + * @constructor + * @param {flyteidl.core.IEnumType=} [properties] Properties to set + */ + function EnumType(properties) { + this.values = []; + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * EnumType values. + * @member {Array.} values + * @memberof flyteidl.core.EnumType + * @instance + */ + EnumType.prototype.values = $util.emptyArray; + + /** + * Creates a new EnumType instance using the specified properties. + * @function create + * @memberof flyteidl.core.EnumType + * @static + * @param {flyteidl.core.IEnumType=} [properties] Properties to set + * @returns {flyteidl.core.EnumType} EnumType instance + */ + EnumType.create = function create(properties) { + return new EnumType(properties); + }; + + /** + * Encodes the specified EnumType message. Does not implicitly {@link flyteidl.core.EnumType.verify|verify} messages. + * @function encode + * @memberof flyteidl.core.EnumType + * @static + * @param {flyteidl.core.IEnumType} message EnumType message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + EnumType.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.values != null && message.values.length) + for (let i = 0; i < message.values.length; ++i) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.values[i]); + return writer; + }; + + /** + * Decodes an EnumType message from the specified reader or buffer. + * @function decode + * @memberof flyteidl.core.EnumType + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {flyteidl.core.EnumType} EnumType + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + EnumType.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.core.EnumType(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (!(message.values && message.values.length)) + message.values = []; + message.values.push(reader.string()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Verifies an EnumType message. + * @function verify + * @memberof flyteidl.core.EnumType + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + EnumType.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.values != null && message.hasOwnProperty("values")) { + if (!Array.isArray(message.values)) + return "values: array expected"; + for (let i = 0; i < message.values.length; ++i) + if (!$util.isString(message.values[i])) + return "values: string[] expected"; + } + return null; + }; + + return EnumType; + })(); + core.LiteralType = (function() { /** @@ -6940,6 +7058,7 @@ export const flyteidl = $root.flyteidl = (() => { * @property {flyteidl.core.ILiteralType|null} [collectionType] LiteralType collectionType * @property {flyteidl.core.ILiteralType|null} [mapValueType] LiteralType mapValueType * @property {flyteidl.core.IBlobType|null} [blob] LiteralType blob + * @property {flyteidl.core.IEnumType|null} [enumType] LiteralType enumType * @property {google.protobuf.IStruct|null} [metadata] LiteralType metadata */ @@ -6998,6 +7117,14 @@ export const flyteidl = $root.flyteidl = (() => { */ LiteralType.prototype.blob = null; + /** + * LiteralType enumType. + * @member {flyteidl.core.IEnumType|null|undefined} enumType + * @memberof flyteidl.core.LiteralType + * @instance + */ + LiteralType.prototype.enumType = null; + /** * LiteralType metadata. * @member {google.protobuf.IStruct|null|undefined} metadata @@ -7011,12 +7138,12 @@ export const flyteidl = $root.flyteidl = (() => { /** * LiteralType type. - * @member {"simple"|"schema"|"collectionType"|"mapValueType"|"blob"|undefined} type + * @member {"simple"|"schema"|"collectionType"|"mapValueType"|"blob"|"enumType"|undefined} type * @memberof flyteidl.core.LiteralType * @instance */ Object.defineProperty(LiteralType.prototype, "type", { - get: $util.oneOfGetter($oneOfFields = ["simple", "schema", "collectionType", "mapValueType", "blob"]), + get: $util.oneOfGetter($oneOfFields = ["simple", "schema", "collectionType", "mapValueType", "blob", "enumType"]), set: $util.oneOfSetter($oneOfFields) }); @@ -7056,6 +7183,8 @@ export const flyteidl = $root.flyteidl = (() => { $root.flyteidl.core.BlobType.encode(message.blob, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); if (message.metadata != null && message.hasOwnProperty("metadata")) $root.google.protobuf.Struct.encode(message.metadata, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim(); + if (message.enumType != null && message.hasOwnProperty("enumType")) + $root.flyteidl.core.EnumType.encode(message.enumType, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); return writer; }; @@ -7092,6 +7221,9 @@ export const flyteidl = $root.flyteidl = (() => { case 5: message.blob = $root.flyteidl.core.BlobType.decode(reader, reader.uint32()); break; + case 7: + message.enumType = $root.flyteidl.core.EnumType.decode(reader, reader.uint32()); + break; case 6: message.metadata = $root.google.protobuf.Struct.decode(reader, reader.uint32()); break; @@ -7173,6 +7305,16 @@ export const flyteidl = $root.flyteidl = (() => { return "blob." + error; } } + if (message.enumType != null && message.hasOwnProperty("enumType")) { + if (properties.type === 1) + return "type: multiple values"; + properties.type = 1; + { + let error = $root.flyteidl.core.EnumType.verify(message.enumType); + if (error) + return "enumType." + error; + } + } if (message.metadata != null && message.hasOwnProperty("metadata")) { let error = $root.google.protobuf.Struct.verify(message.metadata); if (error) diff --git a/flyteidl/gen/pb_python/flyteidl/core/types_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/types_pb2.py index 3ffa9f4f7b..ce022498fc 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/types_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/types_pb2.py @@ -22,7 +22,7 @@ package='flyteidl.core', syntax='proto3', serialized_options=_b('Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/core'), - serialized_pb=_b('\n\x19\x66lyteidl/core/types.proto\x12\rflyteidl.core\x1a\x1cgoogle/protobuf/struct.proto\"\x8c\x02\n\nSchemaType\x12\x37\n\x07\x63olumns\x18\x03 \x03(\x0b\x32&.flyteidl.core.SchemaType.SchemaColumn\x1a\xc4\x01\n\x0cSchemaColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\x37.flyteidl.core.SchemaType.SchemaColumn.SchemaColumnType\"_\n\x10SchemaColumnType\x12\x0b\n\x07INTEGER\x10\x00\x12\t\n\x05\x46LOAT\x10\x01\x12\n\n\x06STRING\x10\x02\x12\x0b\n\x07\x42OOLEAN\x10\x03\x12\x0c\n\x08\x44\x41TETIME\x10\x04\x12\x0c\n\x08\x44URATION\x10\x05\"\x8f\x01\n\x08\x42lobType\x12\x0e\n\x06\x66ormat\x18\x01 \x01(\t\x12\x42\n\x0e\x64imensionality\x18\x02 \x01(\x0e\x32*.flyteidl.core.BlobType.BlobDimensionality\"/\n\x12\x42lobDimensionality\x12\n\n\x06SINGLE\x10\x00\x12\r\n\tMULTIPART\x10\x01\"\xb0\x02\n\x0bLiteralType\x12+\n\x06simple\x18\x01 \x01(\x0e\x32\x19.flyteidl.core.SimpleTypeH\x00\x12+\n\x06schema\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.SchemaTypeH\x00\x12\x35\n\x0f\x63ollection_type\x18\x03 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeH\x00\x12\x34\n\x0emap_value_type\x18\x04 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeH\x00\x12\'\n\x04\x62lob\x18\x05 \x01(\x0b\x32\x17.flyteidl.core.BlobTypeH\x00\x12)\n\x08metadata\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\n\x04type\"/\n\x0fOutputReference\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x0b\n\x03var\x18\x02 \x01(\t\"0\n\x05\x45rror\x12\x16\n\x0e\x66\x61iled_node_id\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t*\x86\x01\n\nSimpleType\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07INTEGER\x10\x01\x12\t\n\x05\x46LOAT\x10\x02\x12\n\n\x06STRING\x10\x03\x12\x0b\n\x07\x42OOLEAN\x10\x04\x12\x0c\n\x08\x44\x41TETIME\x10\x05\x12\x0c\n\x08\x44URATION\x10\x06\x12\n\n\x06\x42INARY\x10\x07\x12\t\n\x05\x45RROR\x10\x08\x12\n\n\x06STRUCT\x10\tB6Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') + serialized_pb=_b('\n\x19\x66lyteidl/core/types.proto\x12\rflyteidl.core\x1a\x1cgoogle/protobuf/struct.proto\"\x8c\x02\n\nSchemaType\x12\x37\n\x07\x63olumns\x18\x03 \x03(\x0b\x32&.flyteidl.core.SchemaType.SchemaColumn\x1a\xc4\x01\n\x0cSchemaColumn\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x45\n\x04type\x18\x02 \x01(\x0e\x32\x37.flyteidl.core.SchemaType.SchemaColumn.SchemaColumnType\"_\n\x10SchemaColumnType\x12\x0b\n\x07INTEGER\x10\x00\x12\t\n\x05\x46LOAT\x10\x01\x12\n\n\x06STRING\x10\x02\x12\x0b\n\x07\x42OOLEAN\x10\x03\x12\x0c\n\x08\x44\x41TETIME\x10\x04\x12\x0c\n\x08\x44URATION\x10\x05\"\x8f\x01\n\x08\x42lobType\x12\x0e\n\x06\x66ormat\x18\x01 \x01(\t\x12\x42\n\x0e\x64imensionality\x18\x02 \x01(\x0e\x32*.flyteidl.core.BlobType.BlobDimensionality\"/\n\x12\x42lobDimensionality\x12\n\n\x06SINGLE\x10\x00\x12\r\n\tMULTIPART\x10\x01\"\x1a\n\x08\x45numType\x12\x0e\n\x06values\x18\x01 \x03(\t\"\xde\x02\n\x0bLiteralType\x12+\n\x06simple\x18\x01 \x01(\x0e\x32\x19.flyteidl.core.SimpleTypeH\x00\x12+\n\x06schema\x18\x02 \x01(\x0b\x32\x19.flyteidl.core.SchemaTypeH\x00\x12\x35\n\x0f\x63ollection_type\x18\x03 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeH\x00\x12\x34\n\x0emap_value_type\x18\x04 \x01(\x0b\x32\x1a.flyteidl.core.LiteralTypeH\x00\x12\'\n\x04\x62lob\x18\x05 \x01(\x0b\x32\x17.flyteidl.core.BlobTypeH\x00\x12,\n\tenum_type\x18\x07 \x01(\x0b\x32\x17.flyteidl.core.EnumTypeH\x00\x12)\n\x08metadata\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructB\x06\n\x04type\"/\n\x0fOutputReference\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x0b\n\x03var\x18\x02 \x01(\t\"0\n\x05\x45rror\x12\x16\n\x0e\x66\x61iled_node_id\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t*\x86\x01\n\nSimpleType\x12\x08\n\x04NONE\x10\x00\x12\x0b\n\x07INTEGER\x10\x01\x12\t\n\x05\x46LOAT\x10\x02\x12\n\n\x06STRING\x10\x03\x12\x0b\n\x07\x42OOLEAN\x10\x04\x12\x0c\n\x08\x44\x41TETIME\x10\x05\x12\x0c\n\x08\x44URATION\x10\x06\x12\n\n\x06\x42INARY\x10\x07\x12\t\n\x05\x45RROR\x10\x08\x12\n\n\x06STRUCT\x10\tB6Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') , dependencies=[google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,]) @@ -75,8 +75,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=898, - serialized_end=1032, + serialized_start=972, + serialized_end=1106, ) _sym_db.RegisterEnumDescriptor(_SIMPLETYPE) @@ -262,6 +262,37 @@ ) +_ENUMTYPE = _descriptor.Descriptor( + name='EnumType', + full_name='flyteidl.core.EnumType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='values', full_name='flyteidl.core.EnumType.values', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=491, + serialized_end=517, +) + + _LITERALTYPE = _descriptor.Descriptor( name='LiteralType', full_name='flyteidl.core.LiteralType', @@ -305,7 +336,14 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='metadata', full_name='flyteidl.core.LiteralType.metadata', index=5, + name='enum_type', full_name='flyteidl.core.LiteralType.enum_type', index=5, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='metadata', full_name='flyteidl.core.LiteralType.metadata', index=6, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, @@ -326,8 +364,8 @@ name='type', full_name='flyteidl.core.LiteralType.type', index=0, containing_type=None, fields=[]), ], - serialized_start=492, - serialized_end=796, + serialized_start=520, + serialized_end=870, ) @@ -364,8 +402,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=798, - serialized_end=845, + serialized_start=872, + serialized_end=919, ) @@ -402,8 +440,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=847, - serialized_end=895, + serialized_start=921, + serialized_end=969, ) _SCHEMATYPE_SCHEMACOLUMN.fields_by_name['type'].enum_type = _SCHEMATYPE_SCHEMACOLUMN_SCHEMACOLUMNTYPE @@ -417,6 +455,7 @@ _LITERALTYPE.fields_by_name['collection_type'].message_type = _LITERALTYPE _LITERALTYPE.fields_by_name['map_value_type'].message_type = _LITERALTYPE _LITERALTYPE.fields_by_name['blob'].message_type = _BLOBTYPE +_LITERALTYPE.fields_by_name['enum_type'].message_type = _ENUMTYPE _LITERALTYPE.fields_by_name['metadata'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT _LITERALTYPE.oneofs_by_name['type'].fields.append( _LITERALTYPE.fields_by_name['simple']) @@ -433,8 +472,12 @@ _LITERALTYPE.oneofs_by_name['type'].fields.append( _LITERALTYPE.fields_by_name['blob']) _LITERALTYPE.fields_by_name['blob'].containing_oneof = _LITERALTYPE.oneofs_by_name['type'] +_LITERALTYPE.oneofs_by_name['type'].fields.append( + _LITERALTYPE.fields_by_name['enum_type']) +_LITERALTYPE.fields_by_name['enum_type'].containing_oneof = _LITERALTYPE.oneofs_by_name['type'] DESCRIPTOR.message_types_by_name['SchemaType'] = _SCHEMATYPE DESCRIPTOR.message_types_by_name['BlobType'] = _BLOBTYPE +DESCRIPTOR.message_types_by_name['EnumType'] = _ENUMTYPE DESCRIPTOR.message_types_by_name['LiteralType'] = _LITERALTYPE DESCRIPTOR.message_types_by_name['OutputReference'] = _OUTPUTREFERENCE DESCRIPTOR.message_types_by_name['Error'] = _ERROR @@ -463,6 +506,13 @@ )) _sym_db.RegisterMessage(BlobType) +EnumType = _reflection.GeneratedProtocolMessageType('EnumType', (_message.Message,), dict( + DESCRIPTOR = _ENUMTYPE, + __module__ = 'flyteidl.core.types_pb2' + # @@protoc_insertion_point(class_scope:flyteidl.core.EnumType) + )) +_sym_db.RegisterMessage(EnumType) + LiteralType = _reflection.GeneratedProtocolMessageType('LiteralType', (_message.Message,), dict( DESCRIPTOR = _LITERALTYPE, __module__ = 'flyteidl.core.types_pb2' diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index d656fffa4b..3fbe973b95 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -253,6 +253,7 @@ Class | Method | HTTP request | Description - [CoreContainer](docs/CoreContainer.md) - [CoreContainerPort](docs/CoreContainerPort.md) - [CoreDataLoadingConfig](docs/CoreDataLoadingConfig.md) + - [CoreEnumType](docs/CoreEnumType.md) - [CoreError](docs/CoreError.md) - [CoreExecutionError](docs/CoreExecutionError.md) - [CoreIOStrategy](docs/CoreIOStrategy.md) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index e0f2cd4865..e584c4c760 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -154,6 +154,7 @@ from flyteadmin.models.core_container import CoreContainer from flyteadmin.models.core_container_port import CoreContainerPort from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig +from flyteadmin.models.core_enum_type import CoreEnumType from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError from flyteadmin.models.core_io_strategy import CoreIOStrategy diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index 22d96dcd1a..dedd6c2cf7 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -147,6 +147,7 @@ from flyteadmin.models.core_container import CoreContainer from flyteadmin.models.core_container_port import CoreContainerPort from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig +from flyteadmin.models.core_enum_type import CoreEnumType from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError from flyteadmin.models.core_io_strategy import CoreIOStrategy diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_enum_type.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_enum_type.py new file mode 100644 index 0000000000..bf9e6f85c6 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_enum_type.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + + +class CoreEnumType(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'values': 'list[str]' + } + + attribute_map = { + 'values': 'values' + } + + def __init__(self, values=None): # noqa: E501 + """CoreEnumType - a model defined in Swagger""" # noqa: E501 + + self._values = None + self.discriminator = None + + if values is not None: + self.values = values + + @property + def values(self): + """Gets the values of this CoreEnumType. # noqa: E501 + + Predefined set of enum values. # noqa: E501 + + :return: The values of this CoreEnumType. # noqa: E501 + :rtype: list[str] + """ + return self._values + + @values.setter + def values(self, values): + """Sets the values of this CoreEnumType. + + Predefined set of enum values. # noqa: E501 + + :param values: The values of this CoreEnumType. # noqa: E501 + :type: list[str] + """ + + self._values = values + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(CoreEnumType, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, CoreEnumType): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_literal_type.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_literal_type.py index 687118e97e..b32e2462f8 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_literal_type.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_literal_type.py @@ -17,6 +17,7 @@ import six from flyteadmin.models.core_blob_type import CoreBlobType # noqa: F401,E501 +from flyteadmin.models.core_enum_type import CoreEnumType # noqa: F401,E501 from flyteadmin.models.core_literal_type import CoreLiteralType # noqa: F401,E501 from flyteadmin.models.core_schema_type import CoreSchemaType # noqa: F401,E501 from flyteadmin.models.core_simple_type import CoreSimpleType # noqa: F401,E501 @@ -42,6 +43,7 @@ class CoreLiteralType(object): 'collection_type': 'CoreLiteralType', 'map_value_type': 'CoreLiteralType', 'blob': 'CoreBlobType', + 'enum_type': 'CoreEnumType', 'metadata': 'ProtobufStruct' } @@ -51,10 +53,11 @@ class CoreLiteralType(object): 'collection_type': 'collection_type', 'map_value_type': 'map_value_type', 'blob': 'blob', + 'enum_type': 'enum_type', 'metadata': 'metadata' } - def __init__(self, simple=None, schema=None, collection_type=None, map_value_type=None, blob=None, metadata=None): # noqa: E501 + def __init__(self, simple=None, schema=None, collection_type=None, map_value_type=None, blob=None, enum_type=None, metadata=None): # noqa: E501 """CoreLiteralType - a model defined in Swagger""" # noqa: E501 self._simple = None @@ -62,6 +65,7 @@ def __init__(self, simple=None, schema=None, collection_type=None, map_value_typ self._collection_type = None self._map_value_type = None self._blob = None + self._enum_type = None self._metadata = None self.discriminator = None @@ -75,6 +79,8 @@ def __init__(self, simple=None, schema=None, collection_type=None, map_value_typ self.map_value_type = map_value_type if blob is not None: self.blob = blob + if enum_type is not None: + self.enum_type = enum_type if metadata is not None: self.metadata = metadata @@ -193,6 +199,29 @@ def blob(self, blob): self._blob = blob + @property + def enum_type(self): + """Gets the enum_type of this CoreLiteralType. # noqa: E501 + + Defines an enum with pre-defined string values. # noqa: E501 + + :return: The enum_type of this CoreLiteralType. # noqa: E501 + :rtype: CoreEnumType + """ + return self._enum_type + + @enum_type.setter + def enum_type(self, enum_type): + """Sets the enum_type of this CoreLiteralType. + + Defines an enum with pre-defined string values. # noqa: E501 + + :param enum_type: The enum_type of this CoreLiteralType. # noqa: E501 + :type: CoreEnumType + """ + + self._enum_type = enum_type + @property def metadata(self): """Gets the metadata of this CoreLiteralType. # noqa: E501 diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_enum_type.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_enum_type.py new file mode 100644 index 0000000000..f13f76b41e --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_enum_type.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.core_enum_type import CoreEnumType # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestCoreEnumType(unittest.TestCase): + """CoreEnumType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCoreEnumType(self): + """Test CoreEnumType""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.core_enum_type.CoreEnumType() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/protos/docs/admin/admin.rst b/flyteidl/protos/docs/admin/admin.rst deleted file mode 100644 index e2ece4cdc3..0000000000 --- a/flyteidl/protos/docs/admin/admin.rst +++ /dev/null @@ -1,3340 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/admin/common.proto: - -flyteidl/admin/common.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.Annotations: - -Annotations ------------------------------------------------------------------- - -Annotation values to be applied to an execution resource. -In the future a mode (e.g. OVERRIDE, APPEND, etc) can be defined -to specify how to merge annotations defined at registration and execution time. - - - -.. csv-table:: Annotations type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "values", ":ref:`ref_flyteidl.admin.Annotations.ValuesEntry`", "repeated", "Map of custom annotations to be applied to the execution resource." - - - - - - - -.. _ref_flyteidl.admin.Annotations.ValuesEntry: - -Annotations.ValuesEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: Annotations.ValuesEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.admin.AuthRole: - -AuthRole ------------------------------------------------------------------- - -Defines permissions associated with executions created by this launch plan spec. -Use either of these roles when they have permissions required by your workflow execution. -Deprecated. - - - -.. csv-table:: AuthRole type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "assumable_iam_role", ":ref:`ref_string`", "", "Defines an optional iam role which will be used for tasks run in executions created with this launch plan." - "kubernetes_service_account", ":ref:`ref_string`", "", "Defines an optional kubernetes service account which will be used for tasks run in executions created with this launch plan." - - - - - - - -.. _ref_flyteidl.admin.EmailNotification: - -EmailNotification ------------------------------------------------------------------- - - - - - -.. csv-table:: EmailNotification type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "recipients_email", ":ref:`ref_string`", "repeated", "The list of email addresses recipients for this notification." - - - - - - - -.. _ref_flyteidl.admin.Labels: - -Labels ------------------------------------------------------------------- - -Label values to be applied to an execution resource. -In the future a mode (e.g. OVERRIDE, APPEND, etc) can be defined -to specify how to merge labels defined at registration and execution time. - - - -.. csv-table:: Labels type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "values", ":ref:`ref_flyteidl.admin.Labels.ValuesEntry`", "repeated", "Map of custom labels to be applied to the execution resource." - - - - - - - -.. _ref_flyteidl.admin.Labels.ValuesEntry: - -Labels.ValuesEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: Labels.ValuesEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.admin.NamedEntity: - -NamedEntity ------------------------------------------------------------------- - -Describes information common to a NamedEntity, identified by a project / -domain / name / resource type combination - - - -.. csv-table:: NamedEntity type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.core.ResourceType`", "", "" - "id", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "", "" - "metadata", ":ref:`ref_flyteidl.admin.NamedEntityMetadata`", "", "" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityGetRequest: - -NamedEntityGetRequest ------------------------------------------------------------------- - -A request to retrieve the metadata associated with a NamedEntityIdentifier - - - -.. csv-table:: NamedEntityGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.core.ResourceType`", "", "" - "id", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "", "" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityIdentifier: - -NamedEntityIdentifier ------------------------------------------------------------------- - -Encapsulation of fields that identifies a Flyte resource. -A resource can internally have multiple versions. - - - -.. csv-table:: NamedEntityIdentifier type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Name of the project the resource belongs to." - "domain", ":ref:`ref_string`", "", "Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project." - "name", ":ref:`ref_string`", "", "User provided value for the resource. The combination of project + domain + name uniquely identifies the resource. +optional - in certain contexts - like 'List API', 'Launch plans'" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityIdentifierList: - -NamedEntityIdentifierList ------------------------------------------------------------------- - -Represents a list of NamedEntityIdentifiers. - - - -.. csv-table:: NamedEntityIdentifierList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "entities", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "repeated", "A list of identifiers." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.NamedEntityIdentifierListRequest: - -NamedEntityIdentifierListRequest ------------------------------------------------------------------- - -Represents a request structure to list identifiers. - - - -.. csv-table:: NamedEntityIdentifierListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Name of the project that contains the identifiers." - "domain", ":ref:`ref_string`", "", "Name of the domain the identifiers belongs to within the project." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. +optional" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityList: - -NamedEntityList ------------------------------------------------------------------- - -Represents a list of NamedEntityIdentifiers. - - - -.. csv-table:: NamedEntityList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "entities", ":ref:`ref_flyteidl.admin.NamedEntity`", "repeated", "A list of NamedEntity objects" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.NamedEntityListRequest: - -NamedEntityListRequest ------------------------------------------------------------------- - -Represents a request structure to list NamedEntity objects - - - -.. csv-table:: NamedEntityListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.core.ResourceType`", "", "" - "project", ":ref:`ref_string`", "", "Name of the project that contains the identifiers." - "domain", ":ref:`ref_string`", "", "Name of the domain the identifiers belongs to within the project." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. +optional" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityMetadata: - -NamedEntityMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: NamedEntityMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "description", ":ref:`ref_string`", "", "Common description across all versions of the entity +optional" - "state", ":ref:`ref_flyteidl.admin.NamedEntityState`", "", "Shared state across all version of the entity At this point in time, only workflow entities can have their state archived." - - - - - - - -.. _ref_flyteidl.admin.NamedEntityUpdateRequest: - -NamedEntityUpdateRequest ------------------------------------------------------------------- - -Request to set the referenced launch plan state to the configured value. - - - -.. csv-table:: NamedEntityUpdateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.core.ResourceType`", "", "Resource type of the metadata to update" - "id", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "", "Identifier of the metadata to update" - "metadata", ":ref:`ref_flyteidl.admin.NamedEntityMetadata`", "", "Metadata object to set as the new value" - - - - - - - -.. _ref_flyteidl.admin.NamedEntityUpdateResponse: - -NamedEntityUpdateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.Notification: - -Notification ------------------------------------------------------------------- - -Represents a structure for notifications based on execution status. -The Notification content is configured within Admin. Future iterations could -expose configuring notifications with custom content. - - - -.. csv-table:: Notification type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "phases", ":ref:`ref_flyteidl.core.WorkflowExecution.Phase`", "repeated", "A list of phases to which users can associate the notifications to." - "email", ":ref:`ref_flyteidl.admin.EmailNotification`", "", "" - "pager_duty", ":ref:`ref_flyteidl.admin.PagerDutyNotification`", "", "" - "slack", ":ref:`ref_flyteidl.admin.SlackNotification`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ObjectGetRequest: - -ObjectGetRequest ------------------------------------------------------------------- - -Represents a structure to fetch a single resource. - - - -.. csv-table:: ObjectGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "Indicates a unique version of resource." - - - - - - - -.. _ref_flyteidl.admin.PagerDutyNotification: - -PagerDutyNotification ------------------------------------------------------------------- - - - - - -.. csv-table:: PagerDutyNotification type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "recipients_email", ":ref:`ref_string`", "repeated", "Currently, PagerDuty notifications leverage email to trigger a notification." - - - - - - - -.. _ref_flyteidl.admin.RawOutputDataConfig: - -RawOutputDataConfig ------------------------------------------------------------------- - -Encapsulates user settings pertaining to offloaded data (i.e. Blobs, Schema, query data, etc.). -See https://github.com/flyteorg/flyte/issues/211 for more background information. - - - -.. csv-table:: RawOutputDataConfig type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "output_location_prefix", ":ref:`ref_string`", "", "Prefix for where offloaded data from user workflows will be written e.g. s3://bucket/key or s3://bucket/" - - - - - - - -.. _ref_flyteidl.admin.ResourceListRequest: - -ResourceListRequest ------------------------------------------------------------------- - -Represents a request structure to retrieve a list of resources. -Resources include: Task, Workflow, LaunchPlan - - - -.. csv-table:: ResourceListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "", "id represents the unique identifier of the resource." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - - - - - - - -.. _ref_flyteidl.admin.SlackNotification: - -SlackNotification ------------------------------------------------------------------- - - - - - -.. csv-table:: SlackNotification type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "recipients_email", ":ref:`ref_string`", "repeated", "Currently, Slack notifications leverage email to trigger a notification." - - - - - - - -.. _ref_flyteidl.admin.Sort: - -Sort ------------------------------------------------------------------- - -Species sort ordering in a list request. - - - -.. csv-table:: Sort type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "Indicates an attribute to sort the response values. TODO(katrogan): Add string validation here. This should never be empty." - "direction", ":ref:`ref_flyteidl.admin.Sort.Direction`", "", "Indicates the direction to apply sort key for response values. +optional" - - - - - - - -.. _ref_flyteidl.admin.UrlBlob: - -UrlBlob ------------------------------------------------------------------- - -Represents a string url and associated metadata used throughout the platform. - - - -.. csv-table:: UrlBlob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "url", ":ref:`ref_string`", "", "Actual url value." - "bytes", ":ref:`ref_int64`", "", "Represents the size of the file accessible at the above url." - - - - - - - - - -.. _ref_flyteidl.admin.NamedEntityState: - -NamedEntityState ------------------------------------------------------------------- - -The status of the named entity is used to control its visibility in the UI. - -.. csv-table:: Enum NamedEntityState values - :header: "Name", "Number", "Description" - :widths: auto - - "NAMED_ENTITY_ACTIVE", "0", "By default, all named entities are considered active and under development." - "NAMED_ENTITY_ARCHIVED", "1", "Archived named entities are no longer visible in the UI." - "SYSTEM_GENERATED", "2", "System generated entities that aren't explicitly created or managed by a user." - - - -.. _ref_flyteidl.admin.Sort.Direction: - -Sort.Direction ------------------------------------------------------------------- - - - -.. csv-table:: Enum Sort.Direction values - :header: "Name", "Number", "Description" - :widths: auto - - "DESCENDING", "0", "" - "ASCENDING", "1", "" - - - - - - - - - - -.. _ref_flyteidl/admin/event.proto: - -flyteidl/admin/event.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.EventErrorAlreadyInTerminalState: - -EventErrorAlreadyInTerminalState ------------------------------------------------------------------- - - - - - -.. csv-table:: EventErrorAlreadyInTerminalState type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "current_phase", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.admin.EventFailureReason: - -EventFailureReason ------------------------------------------------------------------- - - - - - -.. csv-table:: EventFailureReason type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "already_in_terminal_state", ":ref:`ref_flyteidl.admin.EventErrorAlreadyInTerminalState`", "", "" - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionEventRequest: - -NodeExecutionEventRequest ------------------------------------------------------------------- - -Request to send a notification that a node execution event has occurred. - - - -.. csv-table:: NodeExecutionEventRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "request_id", ":ref:`ref_string`", "", "Unique ID for this request that can be traced between services" - "event", ":ref:`ref_flyteidl.event.NodeExecutionEvent`", "", "Details about the event that occurred." - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionEventResponse: - -NodeExecutionEventResponse ------------------------------------------------------------------- - -a placeholder for now - - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionEventRequest: - -TaskExecutionEventRequest ------------------------------------------------------------------- - -Request to send a notification that a task execution event has occurred. - - - -.. csv-table:: TaskExecutionEventRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "request_id", ":ref:`ref_string`", "", "Unique ID for this request that can be traced between services" - "event", ":ref:`ref_flyteidl.event.TaskExecutionEvent`", "", "Details about the event that occurred." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionEventResponse: - -TaskExecutionEventResponse ------------------------------------------------------------------- - -a placeholder for now - - - - - - - - -.. _ref_flyteidl.admin.WorkflowExecutionEventRequest: - -WorkflowExecutionEventRequest ------------------------------------------------------------------- - -Request to send a notification that a workflow execution event has occurred. - - - -.. csv-table:: WorkflowExecutionEventRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "request_id", ":ref:`ref_string`", "", "Unique ID for this request that can be traced between services" - "event", ":ref:`ref_flyteidl.event.WorkflowExecutionEvent`", "", "Details about the event that occurred." - - - - - - - -.. _ref_flyteidl.admin.WorkflowExecutionEventResponse: - -WorkflowExecutionEventResponse ------------------------------------------------------------------- - -a placeholder for now - - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/execution.proto: - -flyteidl/admin/execution.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.AbortMetadata: - -AbortMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: AbortMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cause", ":ref:`ref_string`", "", "In the case of a user-specified abort, this will pass along the user-supplied cause." - "principal", ":ref:`ref_string`", "", "Identifies the entity (if any) responsible for terminating the execution" - - - - - - - -.. _ref_flyteidl.admin.Execution: - -Execution ------------------------------------------------------------------- - -A workflow execution represents an instantiated workflow, including all inputs and additional -metadata as well as computed results included state, outputs, and duration-based attributes. -Used as a response object used in Get and List execution requests. - - - -.. csv-table:: Execution type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Unique identifier of the workflow execution." - "spec", ":ref:`ref_flyteidl.admin.ExecutionSpec`", "", "User-provided configuration and inputs for launching the execution." - "closure", ":ref:`ref_flyteidl.admin.ExecutionClosure`", "", "Execution results." - - - - - - - -.. _ref_flyteidl.admin.ExecutionClosure: - -ExecutionClosure ------------------------------------------------------------------- - -Encapsulates the results of the Execution - - - -.. csv-table:: ExecutionClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "outputs", ":ref:`ref_flyteidl.admin.LiteralMapBlob`", "", "A map of outputs in the case of a successful execution." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information in the case of a failed execution." - "abort_cause", ":ref:`ref_string`", "", "**Deprecated.** In the case of a user-specified abort, this will pass along the user-supplied cause." - "abort_metadata", ":ref:`ref_flyteidl.admin.AbortMetadata`", "", "In the case of a user-specified abort, this will pass along the user and their supplied cause." - "computed_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "**Deprecated.** Inputs computed and passed for execution. computed_inputs depends on inputs in ExecutionSpec, fixed and default inputs in launch plan" - "phase", ":ref:`ref_flyteidl.core.WorkflowExecution.Phase`", "", "Most recent recorded phase for the execution." - "started_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Reported ime at which the execution began running." - "duration", ":ref:`ref_google.protobuf.Duration`", "", "The amount of time the execution spent running." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Reported time at which the execution was created." - "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Reported time at which the execution was last updated." - "notifications", ":ref:`ref_flyteidl.admin.Notification`", "repeated", "The notification settings to use after merging the CreateExecutionRequest and the launch plan notification settings. An execution launched with notifications will always prefer that definition to notifications defined statically in a launch plan." - "workflow_id", ":ref:`ref_flyteidl.core.Identifier`", "", "Identifies the workflow definition for this execution." - - - - - - - -.. _ref_flyteidl.admin.ExecutionCreateRequest: - -ExecutionCreateRequest ------------------------------------------------------------------- - -Request to launch an execution with the given project, domain and optionally name. - - - -.. csv-table:: ExecutionCreateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Name of the project the execution belongs to." - "domain", ":ref:`ref_string`", "", "Name of the domain the execution belongs to. A domain can be considered as a subset within a specific project." - "name", ":ref:`ref_string`", "", "User provided value for the resource. If none is provided the system will generate a unique string. +optional" - "spec", ":ref:`ref_flyteidl.admin.ExecutionSpec`", "", "Additional fields necessary to launch the execution." - "inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "The inputs required to start the execution. All required inputs must be included in this map. If not required and not provided, defaults apply." - - - - - - - -.. _ref_flyteidl.admin.ExecutionCreateResponse: - -ExecutionCreateResponse ------------------------------------------------------------------- - -The unique identifier for a successfully created execution. -If the name was *not* specified in the create request, this identifier will include a generated name. - - - -.. csv-table:: ExecutionCreateResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ExecutionList: - -ExecutionList ------------------------------------------------------------------- - -Used as a response for request to list executions. - - - -.. csv-table:: ExecutionList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "executions", ":ref:`ref_flyteidl.admin.Execution`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.ExecutionMetadata: - -ExecutionMetadata ------------------------------------------------------------------- - -Represents attributes about an execution which are not required to launch the execution but are useful to record. -These attributes are assigned at launch time and do not change. - - - -.. csv-table:: ExecutionMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "mode", ":ref:`ref_flyteidl.admin.ExecutionMetadata.ExecutionMode`", "", "" - "principal", ":ref:`ref_string`", "", "Identifier of the entity that triggered this execution. For systems using back-end authentication any value set here will be discarded in favor of the authenticated user context." - "nesting", ":ref:`ref_uint32`", "", "Indicates the nestedness of this execution. If a user launches a workflow execution, the default nesting is 0. If this execution further launches a workflow (child workflow), the nesting level is incremented by 0 => 1 Generally, if workflow at nesting level k launches a workflow then the child workflow will have nesting = k + 1." - "scheduled_at", ":ref:`ref_google.protobuf.Timestamp`", "", "For scheduled executions, the requested time for execution for this specific schedule invocation." - "parent_node_execution", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Which subworkflow node launched this execution" - "reference_execution", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Optional, a reference workflow execution related to this execution. In the case of a relaunch, this references the original workflow execution." - "system_metadata", ":ref:`ref_flyteidl.admin.SystemMetadata`", "", "Optional, platform-specific metadata about the execution. In this the future this may be gated behind an ACL or some sort of authorization." - - - - - - - -.. _ref_flyteidl.admin.ExecutionRelaunchRequest: - -ExecutionRelaunchRequest ------------------------------------------------------------------- - -Request to relaunch the referenced execution. - - - -.. csv-table:: ExecutionRelaunchRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Identifier of the workflow execution to relaunch." - "name", ":ref:`ref_string`", "", "User provided value for the relaunched execution. If none is provided the system will generate a unique string. +optional" - - - - - - - -.. _ref_flyteidl.admin.ExecutionSpec: - -ExecutionSpec ------------------------------------------------------------------- - -An ExecutionSpec encompasses all data used to launch this execution. The Spec does not change over the lifetime -of an execution as it progresses across phase changes.. - - - -.. csv-table:: ExecutionSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "launch_plan", ":ref:`ref_flyteidl.core.Identifier`", "", "Launch plan to be executed" - "inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "**Deprecated.** Input values to be passed for the execution" - "metadata", ":ref:`ref_flyteidl.admin.ExecutionMetadata`", "", "Metadata for the execution" - "notifications", ":ref:`ref_flyteidl.admin.NotificationList`", "", "List of notifications based on Execution status transitions When this list is not empty it is used rather than any notifications defined in the referenced launch plan. When this list is empty, the notifications defined for the launch plan will be applied." - "disable_all", ":ref:`ref_bool`", "", "This should be set to true if all notifications are intended to be disabled for this execution." - "labels", ":ref:`ref_flyteidl.admin.Labels`", "", "Labels to apply to the execution resource." - "annotations", ":ref:`ref_flyteidl.admin.Annotations`", "", "Annotations to apply to the execution resource." - "security_context", ":ref:`ref_flyteidl.core.SecurityContext`", "", "Optional: security context override to apply this execution." - "auth_role", ":ref:`ref_flyteidl.admin.AuthRole`", "", "**Deprecated.** Optional: auth override to apply this execution." - "quality_of_service", ":ref:`ref_flyteidl.core.QualityOfService`", "", "Indicates the runtime priority of the execution." - - - - - - - -.. _ref_flyteidl.admin.ExecutionTerminateRequest: - -ExecutionTerminateRequest ------------------------------------------------------------------- - -Request to terminate an in-progress execution. This action is irreversible. -If an execution is already terminated, this request will simply be a no-op. -This request will fail if it references a non-existent execution. -If the request succeeds the phase "ABORTED" will be recorded for the termination -with the optional cause added to the output_result. - - - -.. csv-table:: ExecutionTerminateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Uniquely identifies the individual workflow execution to be terminated." - "cause", ":ref:`ref_string`", "", "Optional reason for aborting." - - - - - - - -.. _ref_flyteidl.admin.ExecutionTerminateResponse: - -ExecutionTerminateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.LiteralMapBlob: - -LiteralMapBlob ------------------------------------------------------------------- - -Input/output data can represented by actual values or a link to where values are stored - - - -.. csv-table:: LiteralMapBlob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "values", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Data in LiteralMap format" - "uri", ":ref:`ref_string`", "", "In the event that the map is too large, we return a uri to the data" - - - - - - - -.. _ref_flyteidl.admin.NotificationList: - -NotificationList ------------------------------------------------------------------- - - - - - -.. csv-table:: NotificationList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "notifications", ":ref:`ref_flyteidl.admin.Notification`", "repeated", "" - - - - - - - -.. _ref_flyteidl.admin.SystemMetadata: - -SystemMetadata ------------------------------------------------------------------- - -Represents system rather than user-facing metadata about an execution. - - - -.. csv-table:: SystemMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "execution_cluster", ":ref:`ref_string`", "", "Which execution cluster this execution ran on." - - - - - - - -.. _ref_flyteidl.admin.WorkflowExecutionGetDataRequest: - -WorkflowExecutionGetDataRequest ------------------------------------------------------------------- - -Request structure to fetch inputs and output urls for an execution. - - - -.. csv-table:: WorkflowExecutionGetDataRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "The identifier of the execution for which to fetch inputs and outputs." - - - - - - - -.. _ref_flyteidl.admin.WorkflowExecutionGetDataResponse: - -WorkflowExecutionGetDataResponse ------------------------------------------------------------------- - -Response structure for WorkflowExecutionGetDataRequest which contains inputs and outputs for an execution. - - - -.. csv-table:: WorkflowExecutionGetDataResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "outputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of execution outputs." - "inputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of execution inputs." - "full_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_inputs will only be populated if they are under a configured size threshold." - "full_outputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_outputs will only be populated if they are under a configured size threshold." - - - - - - - -.. _ref_flyteidl.admin.WorkflowExecutionGetRequest: - -WorkflowExecutionGetRequest ------------------------------------------------------------------- - -A message used to fetch a single workflow execution entity. - - - -.. csv-table:: WorkflowExecutionGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Uniquely identifies an individual workflow execution." - - - - - - - - - -.. _ref_flyteidl.admin.ExecutionMetadata.ExecutionMode: - -ExecutionMetadata.ExecutionMode ------------------------------------------------------------------- - -The method by which this execution was launched. - -.. csv-table:: Enum ExecutionMetadata.ExecutionMode values - :header: "Name", "Number", "Description" - :widths: auto - - "MANUAL", "0", "The default execution mode, MANUAL implies that an execution was launched by an individual." - "SCHEDULED", "1", "A schedule triggered this execution launch." - "SYSTEM", "2", "A system process was responsible for launching this execution rather an individual." - "RELAUNCH", "3", "This execution was launched with identical inputs as a previous execution." - "CHILD_WORKFLOW", "4", "This execution was triggered by another execution." - - - - - - - - - - -.. _ref_flyteidl/admin/launch_plan.proto: - -flyteidl/admin/launch_plan.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.ActiveLaunchPlanListRequest: - -ActiveLaunchPlanListRequest ------------------------------------------------------------------- - -Represents a request structure to list active launch plans within a project/domain. - - - -.. csv-table:: ActiveLaunchPlanListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Name of the project that contains the identifiers." - "domain", ":ref:`ref_string`", "", "Name of the domain the identifiers belongs to within the project." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - - - - - - - -.. _ref_flyteidl.admin.ActiveLaunchPlanRequest: - -ActiveLaunchPlanRequest ------------------------------------------------------------------- - -Represents a request struct for finding an active launch plan for a given NamedEntityIdentifier - - - -.. csv-table:: ActiveLaunchPlanRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.admin.NamedEntityIdentifier`", "", "" - - - - - - - -.. _ref_flyteidl.admin.Auth: - -Auth ------------------------------------------------------------------- - -Defines permissions associated with executions created by this launch plan spec. -Use either of these roles when they have permissions required by your workflow execution. -Deprecated. - - - -.. csv-table:: Auth type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "assumable_iam_role", ":ref:`ref_string`", "", "Defines an optional iam role which will be used for tasks run in executions created with this launch plan." - "kubernetes_service_account", ":ref:`ref_string`", "", "Defines an optional kubernetes service account which will be used for tasks run in executions created with this launch plan." - - - - - - - -.. _ref_flyteidl.admin.LaunchPlan: - -LaunchPlan ------------------------------------------------------------------- - -A LaunchPlan provides the capability to templatize workflow executions. -Launch plans simplify associating one or more schedules, inputs and notifications with your workflows. -Launch plans can be shared and used to trigger executions with predefined inputs even when a workflow -definition doesn't necessarily have a default value for said input. - - - -.. csv-table:: LaunchPlan type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "" - "spec", ":ref:`ref_flyteidl.admin.LaunchPlanSpec`", "", "" - "closure", ":ref:`ref_flyteidl.admin.LaunchPlanClosure`", "", "" - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanClosure: - -LaunchPlanClosure ------------------------------------------------------------------- - -Values computed by the flyte platform after launch plan registration. -These include expected_inputs required to be present in a CreateExecutionRequest -to launch the reference workflow as well timestamp values associated with the launch plan. - - - -.. csv-table:: LaunchPlanClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "state", ":ref:`ref_flyteidl.admin.LaunchPlanState`", "", "Indicate the Launch plan phase" - "expected_inputs", ":ref:`ref_flyteidl.core.ParameterMap`", "", "Indicates the set of inputs to execute the Launch plan" - "expected_outputs", ":ref:`ref_flyteidl.core.VariableMap`", "", "Indicates the set of outputs from the Launch plan" - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the launch plan was created." - "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the launch plan was last updated." - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanCreateRequest: - -LaunchPlanCreateRequest ------------------------------------------------------------------- - -Request to register a launch plan. A LaunchPlanSpec may include a complete or incomplete set of inputs required -to launch a workflow execution. By default all launch plans are registered in state INACTIVE. If you wish to -set the state to ACTIVE, you must submit a LaunchPlanUpdateRequest, after you have created a launch plan. - - - -.. csv-table:: LaunchPlanCreateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "Uniquely identifies a launch plan entity." - "spec", ":ref:`ref_flyteidl.admin.LaunchPlanSpec`", "", "User-provided launch plan details, including reference workflow, inputs and other metadata." - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanCreateResponse: - -LaunchPlanCreateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanList: - -LaunchPlanList ------------------------------------------------------------------- - -Response object for list launch plan requests. - - - -.. csv-table:: LaunchPlanList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "launch_plans", ":ref:`ref_flyteidl.admin.LaunchPlan`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanMetadata: - -LaunchPlanMetadata ------------------------------------------------------------------- - -Additional launch plan attributes included in the LaunchPlanSpec not strictly required to launch -the reference workflow. - - - -.. csv-table:: LaunchPlanMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "schedule", ":ref:`ref_flyteidl.admin.Schedule`", "", "Schedule to execute the Launch Plan" - "notifications", ":ref:`ref_flyteidl.admin.Notification`", "repeated", "List of notifications based on Execution status transitions" - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanSpec: - -LaunchPlanSpec ------------------------------------------------------------------- - -User-provided launch plan definition and configuration values. - - - -.. csv-table:: LaunchPlanSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workflow_id", ":ref:`ref_flyteidl.core.Identifier`", "", "Reference to the Workflow template that the launch plan references" - "entity_metadata", ":ref:`ref_flyteidl.admin.LaunchPlanMetadata`", "", "Metadata for the Launch Plan" - "default_inputs", ":ref:`ref_flyteidl.core.ParameterMap`", "", "Input values to be passed for the execution" - "fixed_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Fixed, non-overridable inputs for the Launch Plan" - "role", ":ref:`ref_string`", "", "**Deprecated.** String to indicate the role to use to execute the workflow underneath" - "labels", ":ref:`ref_flyteidl.admin.Labels`", "", "Custom labels to be applied to the execution resource." - "annotations", ":ref:`ref_flyteidl.admin.Annotations`", "", "Custom annotations to be applied to the execution resource." - "auth", ":ref:`ref_flyteidl.admin.Auth`", "", "**Deprecated.** Indicates the permission associated with workflow executions triggered with this launch plan." - "auth_role", ":ref:`ref_flyteidl.admin.AuthRole`", "", "**Deprecated.** " - "security_context", ":ref:`ref_flyteidl.core.SecurityContext`", "", "Indicates security context for permissions triggered with this launch plan" - "quality_of_service", ":ref:`ref_flyteidl.core.QualityOfService`", "", "Indicates the runtime priority of the execution." - "raw_output_data_config", ":ref:`ref_flyteidl.admin.RawOutputDataConfig`", "", "" - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanUpdateRequest: - -LaunchPlanUpdateRequest ------------------------------------------------------------------- - -Request to set the referenced launch plan state to the configured value. - - - -.. csv-table:: LaunchPlanUpdateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "Identifier of launch plan for which to change state." - "state", ":ref:`ref_flyteidl.admin.LaunchPlanState`", "", "Desired state to apply to the launch plan." - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanUpdateResponse: - -LaunchPlanUpdateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - - - -.. _ref_flyteidl.admin.LaunchPlanState: - -LaunchPlanState ------------------------------------------------------------------- - -By default any launch plan regardless of state can be used to launch a workflow execution. -However, at most one version of a launch plan -(e.g. a NamedEntityIdentifier set of shared project, domain and name values) can be -active at a time in regards to *schedules*. That is, at most one schedule in a NamedEntityIdentifier -group will be observed and trigger executions at a defined cadence. - -.. csv-table:: Enum LaunchPlanState values - :header: "Name", "Number", "Description" - :widths: auto - - "INACTIVE", "0", "" - "ACTIVE", "1", "" - - - - - - - - - - -.. _ref_flyteidl/admin/matchable_resource.proto: - -flyteidl/admin/matchable_resource.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.ClusterResourceAttributes: - -ClusterResourceAttributes ------------------------------------------------------------------- - - - - - -.. csv-table:: ClusterResourceAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.ClusterResourceAttributes.AttributesEntry`", "repeated", "Custom resource attributes which will be applied in cluster resource creation (e.g. quotas). Map keys are the *case-sensitive* names of variables in templatized resource files. Map values should be the custom values which get substituted during resource creation." - - - - - - - -.. _ref_flyteidl.admin.ClusterResourceAttributes.AttributesEntry: - -ClusterResourceAttributes.AttributesEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: ClusterResourceAttributes.AttributesEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ExecutionClusterLabel: - -ExecutionClusterLabel ------------------------------------------------------------------- - - - - - -.. csv-table:: ExecutionClusterLabel type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "value", ":ref:`ref_string`", "", "Label value to determine where the execution will be run" - - - - - - - -.. _ref_flyteidl.admin.ExecutionQueueAttributes: - -ExecutionQueueAttributes ------------------------------------------------------------------- - - - - - -.. csv-table:: ExecutionQueueAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tags", ":ref:`ref_string`", "repeated", "Tags used for assigning execution queues for tasks defined within this project." - - - - - - - -.. _ref_flyteidl.admin.ListMatchableAttributesRequest: - -ListMatchableAttributesRequest ------------------------------------------------------------------- - -Request all matching resource attributes. - - - -.. csv-table:: ListMatchableAttributesRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ListMatchableAttributesResponse: - -ListMatchableAttributesResponse ------------------------------------------------------------------- - -Response for a request for all matching resource attributes. - - - -.. csv-table:: ListMatchableAttributesResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "configurations", ":ref:`ref_flyteidl.admin.MatchableAttributesConfiguration`", "repeated", "" - - - - - - - -.. _ref_flyteidl.admin.MatchableAttributesConfiguration: - -MatchableAttributesConfiguration ------------------------------------------------------------------- - -Represents a custom set of attributes applied for either a domain; a domain and project; or -domain, project and workflow name. - - - -.. csv-table:: MatchableAttributesConfiguration type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" - "domain", ":ref:`ref_string`", "", "" - "project", ":ref:`ref_string`", "", "" - "workflow", ":ref:`ref_string`", "", "" - "launch_plan", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.admin.MatchingAttributes: - -MatchingAttributes ------------------------------------------------------------------- - -Generic container for encapsulating all types of the above attributes messages. - - - -.. csv-table:: MatchingAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_resource_attributes", ":ref:`ref_flyteidl.admin.TaskResourceAttributes`", "", "" - "cluster_resource_attributes", ":ref:`ref_flyteidl.admin.ClusterResourceAttributes`", "", "" - "execution_queue_attributes", ":ref:`ref_flyteidl.admin.ExecutionQueueAttributes`", "", "" - "execution_cluster_label", ":ref:`ref_flyteidl.admin.ExecutionClusterLabel`", "", "" - "quality_of_service", ":ref:`ref_flyteidl.core.QualityOfService`", "", "" - "plugin_overrides", ":ref:`ref_flyteidl.admin.PluginOverrides`", "", "" - - - - - - - -.. _ref_flyteidl.admin.PluginOverride: - -PluginOverride ------------------------------------------------------------------- - -This MatchableAttribute configures selecting alternate plugin implementations for a given task type. -In addition to an override implementation a selection of fallbacks can be provided or other modes -for handling cases where the desired plugin override is not enabled in a given Flyte deployment. - - - -.. csv-table:: PluginOverride type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier." - "plugin_id", ":ref:`ref_string`", "repeated", "A set of plugin ids which should handle tasks of this type instead of the default registered plugin. The list will be tried in order until a plugin is found with that id." - "missing_plugin_behavior", ":ref:`ref_flyteidl.admin.PluginOverride.MissingPluginBehavior`", "", "Defines the behavior when no plugin from the plugin_id list is not found." - - - - - - - -.. _ref_flyteidl.admin.PluginOverrides: - -PluginOverrides ------------------------------------------------------------------- - - - - - -.. csv-table:: PluginOverrides type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "overrides", ":ref:`ref_flyteidl.admin.PluginOverride`", "repeated", "" - - - - - - - -.. _ref_flyteidl.admin.TaskResourceAttributes: - -TaskResourceAttributes ------------------------------------------------------------------- - - - - - -.. csv-table:: TaskResourceAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "defaults", ":ref:`ref_flyteidl.admin.TaskResourceSpec`", "", "" - "limits", ":ref:`ref_flyteidl.admin.TaskResourceSpec`", "", "" - - - - - - - -.. _ref_flyteidl.admin.TaskResourceSpec: - -TaskResourceSpec ------------------------------------------------------------------- - - - - - -.. csv-table:: TaskResourceSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cpu", ":ref:`ref_string`", "", "" - "gpu", ":ref:`ref_string`", "", "" - "memory", ":ref:`ref_string`", "", "" - "storage", ":ref:`ref_string`", "", "" - - - - - - - - - -.. _ref_flyteidl.admin.MatchableResource: - -MatchableResource ------------------------------------------------------------------- - -Defines a resource that can be configured by customizable Project-, ProjectDomain- or WorkflowAttributes -based on matching tags. - -.. csv-table:: Enum MatchableResource values - :header: "Name", "Number", "Description" - :widths: auto - - "TASK_RESOURCE", "0", "Applies to customizable task resource requests and limits." - "CLUSTER_RESOURCE", "1", "Applies to configuring templated kubernetes cluster resources." - "EXECUTION_QUEUE", "2", "Configures task and dynamic task execution queue assignment." - "EXECUTION_CLUSTER_LABEL", "3", "Configures the K8s cluster label to be used for execution to be run" - "QUALITY_OF_SERVICE_SPECIFICATION", "4", "Configures default quality of service when undefined in an execution spec." - "PLUGIN_OVERRIDE", "5", "Selects configurable plugin implementation behavior for a given task type." - - - -.. _ref_flyteidl.admin.PluginOverride.MissingPluginBehavior: - -PluginOverride.MissingPluginBehavior ------------------------------------------------------------------- - - - -.. csv-table:: Enum PluginOverride.MissingPluginBehavior values - :header: "Name", "Number", "Description" - :widths: auto - - "FAIL", "0", "" - "USE_DEFAULT", "1", "Uses the system-configured default implementation." - - - - - - - - - - -.. _ref_flyteidl/admin/node_execution.proto: - -flyteidl/admin/node_execution.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.DynamicWorkflowNodeMetadata: - -DynamicWorkflowNodeMetadata ------------------------------------------------------------------- - -For dynamic workflow nodes we capture information about the dynamic workflow definition that gets generated. - - - -.. csv-table:: DynamicWorkflowNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." - "compiled_workflow", ":ref:`ref_flyteidl.core.CompiledWorkflowClosure`", "", "Represents the compiled representation of the embedded dynamic workflow." - - - - - - - -.. _ref_flyteidl.admin.NodeExecution: - -NodeExecution ------------------------------------------------------------------- - -Encapsulates all details for a single node execution entity. -A node represents a component in the overall workflow graph. A node launch a task, multiple tasks, an entire nested -sub-workflow, or even a separate child-workflow execution. -The same task can be called repeatedly in a single workflow but each node is unique. - - - -.. csv-table:: NodeExecution type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Uniquely identifies an individual node execution." - "input_uri", ":ref:`ref_string`", "", "Path to remote data store where input blob is stored." - "closure", ":ref:`ref_flyteidl.admin.NodeExecutionClosure`", "", "Computed results associated with this node execution." - "metadata", ":ref:`ref_flyteidl.admin.NodeExecutionMetaData`", "", "Metadata for Node Execution" - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionClosure: - -NodeExecutionClosure ------------------------------------------------------------------- - -Container for node execution details and results. - - - -.. csv-table:: NodeExecutionClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "output_uri", ":ref:`ref_string`", "", "" - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the Node" - "phase", ":ref:`ref_flyteidl.core.NodeExecution.Phase`", "", "The last recorded phase for this node execution." - "started_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the node execution began running." - "duration", ":ref:`ref_google.protobuf.Duration`", "", "The amount of time the node execution spent running." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the node execution was created." - "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the node execution was last updated." - "workflow_node_metadata", ":ref:`ref_flyteidl.admin.WorkflowNodeMetadata`", "", "" - "task_node_metadata", ":ref:`ref_flyteidl.admin.TaskNodeMetadata`", "", "" - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionForTaskListRequest: - -NodeExecutionForTaskListRequest ------------------------------------------------------------------- - -Represents a request structure to retrieve a list of node execution entities launched by a specific task. - - - -.. csv-table:: NodeExecutionForTaskListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_execution_id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Indicates the node execution to filter by." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionGetDataRequest: - -NodeExecutionGetDataRequest ------------------------------------------------------------------- - -Request structure to fetch inputs and output urls for a node execution. - - - -.. csv-table:: NodeExecutionGetDataRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "The identifier of the node execution for which to fetch inputs and outputs." - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionGetDataResponse: - -NodeExecutionGetDataResponse ------------------------------------------------------------------- - -Response structure for NodeExecutionGetDataRequest which contains inputs and outputs for a node execution. - - - -.. csv-table:: NodeExecutionGetDataResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "inputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of node execution inputs." - "outputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of node execution outputs." - "full_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_inputs will only be populated if they are under a configured size threshold." - "full_outputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_outputs will only be populated if they are under a configured size threshold." - "dynamic_workflow", ":ref:`ref_flyteidl.admin.DynamicWorkflowNodeMetadata`", "", "Optional Workflow closure for a dynamically generated workflow, in the case this node yields a dynamic workflow we return its structure here." - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionGetRequest: - -NodeExecutionGetRequest ------------------------------------------------------------------- - -A message used to fetch a single node execution entity. - - - -.. csv-table:: NodeExecutionGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Uniquely identifies an individual node execution." - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionList: - -NodeExecutionList ------------------------------------------------------------------- - -Request structure to retrieve a list of node execution entities. - - - -.. csv-table:: NodeExecutionList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "node_executions", ":ref:`ref_flyteidl.admin.NodeExecution`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionListRequest: - -NodeExecutionListRequest ------------------------------------------------------------------- - -Represents a request structure to retrieve a list of node execution entities. - - - -.. csv-table:: NodeExecutionListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workflow_execution_id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Indicates the workflow execution to filter by." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the, server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - "unique_parent_id", ":ref:`ref_string`", "", "Unique identifier of the parent node in the execution +optional" - - - - - - - -.. _ref_flyteidl.admin.NodeExecutionMetaData: - -NodeExecutionMetaData ------------------------------------------------------------------- - -Represents additional attributes related to a Node Execution - - - -.. csv-table:: NodeExecutionMetaData type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "retry_group", ":ref:`ref_string`", "", "Node executions are grouped depending on retries of the parent Retry group is unique within the context of a parent node." - "is_parent_node", ":ref:`ref_bool`", "", "Boolean flag indicating if the node has child nodes under it" - "spec_node_id", ":ref:`ref_string`", "", "Node id of the node in the original workflow This maps to value of WorkflowTemplate.nodes[X].id" - - - - - - - -.. _ref_flyteidl.admin.TaskNodeMetadata: - -TaskNodeMetadata ------------------------------------------------------------------- - -Metadata for the case in which the node is a TaskNode - - - -.. csv-table:: TaskNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cache_status", ":ref:`ref_flyteidl.core.CatalogCacheStatus`", "", "Captures the status of caching for this execution." - "catalog_key", ":ref:`ref_flyteidl.core.CatalogMetadata`", "", "This structure carries the catalog artifact information" - - - - - - - -.. _ref_flyteidl.admin.WorkflowNodeMetadata: - -WorkflowNodeMetadata ------------------------------------------------------------------- - -Metadata for a WorkflowNode - - - -.. csv-table:: WorkflowNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "executionId", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/notification.proto: - -flyteidl/admin/notification.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.EmailMessage: - -EmailMessage ------------------------------------------------------------------- - -Represents the Email object that is sent to a publisher/subscriber -to forward the notification. -Note: This is internal to Admin and doesn't need to be exposed to other components. - - - -.. csv-table:: EmailMessage type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "recipients_email", ":ref:`ref_string`", "repeated", "The list of email addresses to receive an email with the content populated in the other fields. Currently, each email recipient will receive its own email. This populates the TO field." - "sender_email", ":ref:`ref_string`", "", "The email of the sender. This populates the FROM field." - "subject_line", ":ref:`ref_string`", "", "The content of the subject line. This populates the SUBJECT field." - "body", ":ref:`ref_string`", "", "The content of the email body. This populates the BODY field." - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/project.proto: - -flyteidl/admin/project.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.Domain: - -Domain ------------------------------------------------------------------- - -Namespace within a project commonly used to differentiate between different service instances. -e.g. "production", "development", etc. - - - -.. csv-table:: Domain type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_string`", "", "" - "name", ":ref:`ref_string`", "", "Display name." - - - - - - - -.. _ref_flyteidl.admin.Project: - -Project ------------------------------------------------------------------- - -Top-level namespace used to classify different entities like workflows and executions. - - - -.. csv-table:: Project type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_string`", "", "" - "name", ":ref:`ref_string`", "", "Display name." - "domains", ":ref:`ref_flyteidl.admin.Domain`", "repeated", "" - "description", ":ref:`ref_string`", "", "" - "labels", ":ref:`ref_flyteidl.admin.Labels`", "", "Leverage Labels from flyteidel.admin.common.proto to tag projects with ownership information." - "state", ":ref:`ref_flyteidl.admin.Project.ProjectState`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectListRequest: - -ProjectListRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "limit", ":ref:`ref_uint32`", "", "Indicates the number of projects to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" - - - - - - - -.. _ref_flyteidl.admin.ProjectRegisterRequest: - -ProjectRegisterRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectRegisterRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_flyteidl.admin.Project`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectRegisterResponse: - -ProjectRegisterResponse ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.admin.ProjectUpdateResponse: - -ProjectUpdateResponse ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.admin.Projects: - -Projects ------------------------------------------------------------------- - - - - - -.. csv-table:: Projects type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "projects", ":ref:`ref_flyteidl.admin.Project`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - - - -.. _ref_flyteidl.admin.Project.ProjectState: - -Project.ProjectState ------------------------------------------------------------------- - -The state of the project is used to control its visibility in the UI and validity. - -.. csv-table:: Enum Project.ProjectState values - :header: "Name", "Number", "Description" - :widths: auto - - "ACTIVE", "0", "By default, all projects are considered active." - "ARCHIVED", "1", "Archived projects are no longer visible in the UI and no longer valid." - "SYSTEM_GENERATED", "2", "System generated projects that aren't explicitly created or managed by a user." - - - - - - - - - - -.. _ref_flyteidl/admin/project_domain_attributes.proto: - -flyteidl/admin/project_domain_attributes.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributes: - -ProjectDomainAttributes ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectDomainAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." - "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." - "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteRequest: - -ProjectDomainAttributesDeleteRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectDomainAttributesDeleteRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references." - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references." - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteResponse: - -ProjectDomainAttributesDeleteResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesGetRequest: - -ProjectDomainAttributesGetRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectDomainAttributesGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references." - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references." - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesGetResponse: - -ProjectDomainAttributesGetResponse ------------------------------------------------------------------- - - - - - -.. csv-table:: ProjectDomainAttributesGetResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateRequest: - -ProjectDomainAttributesUpdateRequest ------------------------------------------------------------------- - -Sets custom attributes for a project-domain combination. - - - -.. csv-table:: ProjectDomainAttributesUpdateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateResponse: - -ProjectDomainAttributesUpdateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/schedule.proto: - -flyteidl/admin/schedule.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.CronSchedule: - -CronSchedule ------------------------------------------------------------------- - - - - - -.. csv-table:: CronSchedule type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "schedule", ":ref:`ref_string`", "", "Standard/default cron implementation as described by https://en.wikipedia.org/wiki/Cron#CRON_expression; Also supports nonstandard predefined scheduling definitions as described by https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions except @reboot" - "offset", ":ref:`ref_string`", "", "ISO 8601 duration as described by https://en.wikipedia.org/wiki/ISO_8601#Durations" - - - - - - - -.. _ref_flyteidl.admin.FixedRate: - -FixedRate ------------------------------------------------------------------- - -Option for schedules run at a certain frequency e.g. every 2 minutes. - - - -.. csv-table:: FixedRate type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "value", ":ref:`ref_uint32`", "", "" - "unit", ":ref:`ref_flyteidl.admin.FixedRateUnit`", "", "" - - - - - - - -.. _ref_flyteidl.admin.Schedule: - -Schedule ------------------------------------------------------------------- - -Defines complete set of information required to trigger an execution on a schedule. - - - -.. csv-table:: Schedule type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cron_expression", ":ref:`ref_string`", "", "**Deprecated.** Uses AWS syntax: Minutes Hours Day-of-month Month Day-of-week Year e.g. for a schedule that runs every 15 minutes: 0/15 * * * ? *" - "rate", ":ref:`ref_flyteidl.admin.FixedRate`", "", "" - "cron_schedule", ":ref:`ref_flyteidl.admin.CronSchedule`", "", "" - "kickoff_time_input_arg", ":ref:`ref_string`", "", "Name of the input variable that the kickoff time will be supplied to when the workflow is kicked off." - - - - - - - - - -.. _ref_flyteidl.admin.FixedRateUnit: - -FixedRateUnit ------------------------------------------------------------------- - -Represents a frequency at which to run a schedule. - -.. csv-table:: Enum FixedRateUnit values - :header: "Name", "Number", "Description" - :widths: auto - - "MINUTE", "0", "" - "HOUR", "1", "" - "DAY", "2", "" - - - - - - - - - - -.. _ref_flyteidl/admin/task.proto: - -flyteidl/admin/task.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.Task: - -Task ------------------------------------------------------------------- - -Flyte workflows are composed of many ordered tasks. That is small, reusable, self-contained logical blocks -arranged to process workflow inputs and produce a deterministic set of outputs. -Tasks can come in many varieties tuned for specialized behavior. - - - -.. csv-table:: Task type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task." - "closure", ":ref:`ref_flyteidl.admin.TaskClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the task." - - - - - - - -.. _ref_flyteidl.admin.TaskClosure: - -TaskClosure ------------------------------------------------------------------- - -Compute task attributes which include values derived from the TaskSpec, as well as plugin-specific data -and task metadata. - - - -.. csv-table:: TaskClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "compiled_task", ":ref:`ref_flyteidl.core.CompiledTask`", "", "Represents the compiled representation of the task from the specification provided." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task was created." - - - - - - - -.. _ref_flyteidl.admin.TaskCreateRequest: - -TaskCreateRequest ------------------------------------------------------------------- - -Represents a request structure to create a revision of a task. - - - -.. csv-table:: TaskCreateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task." - "spec", ":ref:`ref_flyteidl.admin.TaskSpec`", "", "Represents the specification for task." - - - - - - - -.. _ref_flyteidl.admin.TaskCreateResponse: - -TaskCreateResponse ------------------------------------------------------------------- - -Represents a response structure if task creation succeeds. - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.TaskList: - -TaskList ------------------------------------------------------------------- - -Represents a list of tasks returned from the admin. - - - -.. csv-table:: TaskList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tasks", ":ref:`ref_flyteidl.admin.Task`", "repeated", "A list of tasks returned based on the request." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.TaskSpec: - -TaskSpec ------------------------------------------------------------------- - -Represents a structure that encapsulates the user-configured specification of the task. - - - -.. csv-table:: TaskSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "template", ":ref:`ref_flyteidl.core.TaskTemplate`", "", "Template of the task that encapsulates all the metadata of the task." - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/task_execution.proto: - -flyteidl/admin/task_execution.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.TaskExecution: - -TaskExecution ------------------------------------------------------------------- - -Encapsulates all details for a single task execution entity. -A task execution represents an instantiated task, including all inputs and additional -metadata as well as computed results included state, outputs, and duration-based attributes. - - - -.. csv-table:: TaskExecution type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution." - "input_uri", ":ref:`ref_string`", "", "Path to remote data store where input blob is stored." - "closure", ":ref:`ref_flyteidl.admin.TaskExecutionClosure`", "", "Task execution details and results." - "is_parent", ":ref:`ref_bool`", "", "Whether this task spawned nodes." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionClosure: - -TaskExecutionClosure ------------------------------------------------------------------- - -Container for task execution details and results. - - - -.. csv-table:: TaskExecutionClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "output_uri", ":ref:`ref_string`", "", "Path to remote data store where output blob is stored if the execution succeeded (and produced outputs)." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the task execution. Populated if the execution failed." - "phase", ":ref:`ref_flyteidl.core.TaskExecution.Phase`", "", "The last recorded phase for this task execution." - "logs", ":ref:`ref_flyteidl.core.TaskLog`", "repeated", "Detailed log information output by the task execution." - "started_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution began running." - "duration", ":ref:`ref_google.protobuf.Duration`", "", "The amount of time the task execution spent running." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was created." - "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was last updated." - "custom_info", ":ref:`ref_google.protobuf.Struct`", "", "Custom data specific to the task plugin." - "reason", ":ref:`ref_string`", "", "If there is an explanation for the most recent phase transition, the reason will capture it." - "task_type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier." - "metadata", ":ref:`ref_flyteidl.event.TaskExecutionMetadata`", "", "Metadata around how a task was executed." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionGetDataRequest: - -TaskExecutionGetDataRequest ------------------------------------------------------------------- - -Request structure to fetch inputs and output urls for a task execution. - - - -.. csv-table:: TaskExecutionGetDataRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "The identifier of the task execution for which to fetch inputs and outputs." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionGetDataResponse: - -TaskExecutionGetDataResponse ------------------------------------------------------------------- - -Response structure for TaskExecutionGetDataRequest which contains inputs and outputs for a task execution. - - - -.. csv-table:: TaskExecutionGetDataResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "inputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of task execution inputs." - "outputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "Signed url to fetch a core.LiteralMap of task execution outputs." - "full_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_inputs will only be populated if they are under a configured size threshold." - "full_outputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Optional, full_outputs will only be populated if they are under a configured size threshold." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionGetRequest: - -TaskExecutionGetRequest ------------------------------------------------------------------- - -A message used to fetch a single task execution entity. - - - -.. csv-table:: TaskExecutionGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionList: - -TaskExecutionList ------------------------------------------------------------------- - -Response structure for a query to list of task execution entities. - - - -.. csv-table:: TaskExecutionList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_executions", ":ref:`ref_flyteidl.admin.TaskExecution`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.TaskExecutionListRequest: - -TaskExecutionListRequest ------------------------------------------------------------------- - -Represents a request structure to retrieve a list of task execution entities. - - - -.. csv-table:: TaskExecutionListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "node_execution_id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Indicates the node execution to filter by." - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering for returned list. +optional" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/version.proto: - -flyteidl/admin/version.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.GetVersionRequest: - -GetVersionRequest ------------------------------------------------------------------- - -Empty request for GetVersion - - - - - - - - -.. _ref_flyteidl.admin.GetVersionResponse: - -GetVersionResponse ------------------------------------------------------------------- - -Response for the GetVersion API - - - -.. csv-table:: GetVersionResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "control_plane_version", ":ref:`ref_flyteidl.admin.Version`", "", "The control plane version information. FlyteAdmin and related components form the control plane of Flyte" - - - - - - - -.. _ref_flyteidl.admin.Version: - -Version ------------------------------------------------------------------- - -Provides Version information for a component - - - -.. csv-table:: Version type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "Build", ":ref:`ref_string`", "", "Specifies the GIT sha of the build" - "Version", ":ref:`ref_string`", "", "Version for the build, should follow a semver" - "BuildTime", ":ref:`ref_string`", "", "Build timestamp" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/workflow.proto: - -flyteidl/admin/workflow.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.Workflow: - -Workflow ------------------------------------------------------------------- - -Represents the workflow structure stored in the Admin -A workflow is created by ordering tasks and associating outputs to inputs -in order to produce a directed-acyclic execution graph. - - - -.. csv-table:: Workflow type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." - "closure", ":ref:`ref_flyteidl.admin.WorkflowClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the workflow." - - - - - - - -.. _ref_flyteidl.admin.WorkflowClosure: - -WorkflowClosure ------------------------------------------------------------------- - -A container holding the compiled workflow produced from the WorkflowSpec and additional metadata. - - - -.. csv-table:: WorkflowClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "compiled_workflow", ":ref:`ref_flyteidl.core.CompiledWorkflowClosure`", "", "Represents the compiled representation of the workflow from the specification provided." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the workflow was created." - - - - - - - -.. _ref_flyteidl.admin.WorkflowCreateRequest: - -WorkflowCreateRequest ------------------------------------------------------------------- - -Represents a request structure to create a revision of a workflow. - - - -.. csv-table:: WorkflowCreateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." - "spec", ":ref:`ref_flyteidl.admin.WorkflowSpec`", "", "Represents the specification for workflow." - - - - - - - -.. _ref_flyteidl.admin.WorkflowCreateResponse: - -WorkflowCreateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.WorkflowList: - -WorkflowList ------------------------------------------------------------------- - -Represents a list of workflows returned from the admin. - - - -.. csv-table:: WorkflowList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workflows", ":ref:`ref_flyteidl.admin.Workflow`", "repeated", "A list of workflows returned based on the request." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - - - - - -.. _ref_flyteidl.admin.WorkflowSpec: - -WorkflowSpec ------------------------------------------------------------------- - -Represents a structure that encapsulates the specification of the workflow. - - - -.. csv-table:: WorkflowSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "template", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "Template of the task that encapsulates all the metadata of the workflow." - "sub_workflows", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "repeated", "Workflows that are embedded into other workflows need to be passed alongside the parent workflow to the propeller compiler (since the compiler doesn't have any knowledge of other workflows - ie, it doesn't reach out to Admin to see other registered workflows). In fact, subworkflows do not even need to be registered." - - - - - - - - - - - - - - - - -.. _ref_flyteidl/admin/workflow_attributes.proto: - -flyteidl/admin/workflow_attributes.proto -================================================================== - - - - - -.. _ref_flyteidl.admin.WorkflowAttributes: - -WorkflowAttributes ------------------------------------------------------------------- - - - - - -.. csv-table:: WorkflowAttributes type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." - "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." - "workflow", ":ref:`ref_string`", "", "Workflow name for which this set of attributes will be applied." - "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesDeleteRequest: - -WorkflowAttributesDeleteRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: WorkflowAttributesDeleteRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references." - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references." - "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references." - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesDeleteResponse: - -WorkflowAttributesDeleteResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesGetRequest: - -WorkflowAttributesGetRequest ------------------------------------------------------------------- - - - - - -.. csv-table:: WorkflowAttributesGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references." - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references." - "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references." - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesGetResponse: - -WorkflowAttributesGetResponse ------------------------------------------------------------------- - - - - - -.. csv-table:: WorkflowAttributesGetResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesUpdateRequest: - -WorkflowAttributesUpdateRequest ------------------------------------------------------------------- - -Sets custom attributes for a project, domain and workflow combination. - - - -.. csv-table:: WorkflowAttributesUpdateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesUpdateResponse: - -WorkflowAttributesUpdateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - - - - - - - - - - - - - - - diff --git a/flyteidl/protos/docs/core/core.rst b/flyteidl/protos/docs/core/core.rst deleted file mode 100644 index ef83d74eba..0000000000 --- a/flyteidl/protos/docs/core/core.rst +++ /dev/null @@ -1,3293 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/core/catalog.proto: - -flyteidl/core/catalog.proto -================================================================== - - - - - -.. _ref_flyteidl.core.CatalogArtifactTag: - -CatalogArtifactTag ------------------------------------------------------------------- - - - - - -.. csv-table:: CatalogArtifactTag type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifact_id", ":ref:`ref_string`", "", "Artifact ID is generated name" - "name", ":ref:`ref_string`", "", "Flyte computes the tag automatically, as the hash of the values" - - - - - - - -.. _ref_flyteidl.core.CatalogMetadata: - -CatalogMetadata ------------------------------------------------------------------- - -Catalog artifact information with specific metadata - - - -.. csv-table:: CatalogMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset_id", ":ref:`ref_flyteidl.core.Identifier`", "", "Dataset ID in the catalog" - "artifact_tag", ":ref:`ref_flyteidl.core.CatalogArtifactTag`", "", "Artifact tag in the catalog" - "source_task_execution", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Today we only support TaskExecutionIdentifier as a source, as catalog caching only works for task executions" - - - - - - - - - -.. _ref_flyteidl.core.CatalogCacheStatus: - -CatalogCacheStatus ------------------------------------------------------------------- - -Indicates the status of CatalogCaching. The reason why this is not embeded in TaskNodeMetadata is, that we may use for other types of nodes as well in the future - -.. csv-table:: Enum CatalogCacheStatus values - :header: "Name", "Number", "Description" - :widths: auto - - "CACHE_DISABLED", "0", "Used to indicate that caching was disabled" - "CACHE_MISS", "1", "Used to indicate that the cache lookup resulted in no matches" - "CACHE_HIT", "2", "used to indicate that the associated artifact was a result of a previous execution" - "CACHE_POPULATED", "3", "used to indicate that the resultant artifact was added to the cache" - "CACHE_LOOKUP_FAILURE", "4", "Used to indicate that cache lookup failed because of an error" - "CACHE_PUT_FAILURE", "5", "Used to indicate that cache lookup failed because of an error" - - - - - - - - - - -.. _ref_flyteidl/core/compiler.proto: - -flyteidl/core/compiler.proto -================================================================== - - - - - -.. _ref_flyteidl.core.CompiledTask: - -CompiledTask ------------------------------------------------------------------- - -Output of the Compilation step. This object represent one Task. We store more metadata at this layer - - - -.. csv-table:: CompiledTask type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "template", ":ref:`ref_flyteidl.core.TaskTemplate`", "", "Completely contained TaskTemplate" - - - - - - - -.. _ref_flyteidl.core.CompiledWorkflow: - -CompiledWorkflow ------------------------------------------------------------------- - -Output of the compilation Step. This object represents one workflow. We store more metadata at this layer - - - -.. csv-table:: CompiledWorkflow type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "template", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "Completely contained Workflow Template" - "connections", ":ref:`ref_flyteidl.core.ConnectionSet`", "", "For internal use only! This field is used by the system and must not be filled in. Any values set will be ignored." - - - - - - - -.. _ref_flyteidl.core.CompiledWorkflowClosure: - -CompiledWorkflowClosure ------------------------------------------------------------------- - -A Compiled Workflow Closure contains all the information required to start a new execution, or to visualize a workflow -and its details. The CompiledWorkflowClosure should always contain a primary workflow, that is the main workflow that -will being the execution. All subworkflows are denormalized. WorkflowNodes refer to the workflow identifiers of -compiled subworkflows. - - - -.. csv-table:: CompiledWorkflowClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "primary", ":ref:`ref_flyteidl.core.CompiledWorkflow`", "", "+required" - "sub_workflows", ":ref:`ref_flyteidl.core.CompiledWorkflow`", "repeated", "Guaranteed that there will only exist one and only one workflow with a given id, i.e., every sub workflow has a unique identifier. Also every enclosed subworkflow is used either by a primary workflow or by a subworkflow as an inlined workflow +optional" - "tasks", ":ref:`ref_flyteidl.core.CompiledTask`", "repeated", "Guaranteed that there will only exist one and only one task with a given id, i.e., every task has a unique id +required (atleast 1)" - - - - - - - -.. _ref_flyteidl.core.ConnectionSet: - -ConnectionSet ------------------------------------------------------------------- - -Adjacency list for the workflow. This is created as part of the compilation process. Every process after the compilation -step uses this created ConnectionSet - - - -.. csv-table:: ConnectionSet type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "downstream", ":ref:`ref_flyteidl.core.ConnectionSet.DownstreamEntry`", "repeated", "A list of all the node ids that are downstream from a given node id" - "upstream", ":ref:`ref_flyteidl.core.ConnectionSet.UpstreamEntry`", "repeated", "A list of all the node ids, that are upstream of this node id" - - - - - - - -.. _ref_flyteidl.core.ConnectionSet.DownstreamEntry: - -ConnectionSet.DownstreamEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: ConnectionSet.DownstreamEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.ConnectionSet.IdList`", "", "" - - - - - - - -.. _ref_flyteidl.core.ConnectionSet.IdList: - -ConnectionSet.IdList ------------------------------------------------------------------- - - - - - -.. csv-table:: ConnectionSet.IdList type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "ids", ":ref:`ref_string`", "repeated", "" - - - - - - - -.. _ref_flyteidl.core.ConnectionSet.UpstreamEntry: - -ConnectionSet.UpstreamEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: ConnectionSet.UpstreamEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.ConnectionSet.IdList`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/core/condition.proto: - -flyteidl/core/condition.proto -================================================================== - - - - - -.. _ref_flyteidl.core.BooleanExpression: - -BooleanExpression ------------------------------------------------------------------- - -Defines a boolean expression tree. It can be a simple or a conjunction expression. -Multiple expressions can be combined using a conjunction or a disjunction to result in a final boolean result. - - - -.. csv-table:: BooleanExpression type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "conjunction", ":ref:`ref_flyteidl.core.ConjunctionExpression`", "", "" - "comparison", ":ref:`ref_flyteidl.core.ComparisonExpression`", "", "" - - - - - - - -.. _ref_flyteidl.core.ComparisonExpression: - -ComparisonExpression ------------------------------------------------------------------- - -Defines a 2-level tree where the root is a comparison operator and Operands are primitives or known variables. -Each expression results in a boolean result. - - - -.. csv-table:: ComparisonExpression type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "operator", ":ref:`ref_flyteidl.core.ComparisonExpression.Operator`", "", "" - "left_value", ":ref:`ref_flyteidl.core.Operand`", "", "" - "right_value", ":ref:`ref_flyteidl.core.Operand`", "", "" - - - - - - - -.. _ref_flyteidl.core.ConjunctionExpression: - -ConjunctionExpression ------------------------------------------------------------------- - -Defines a conjunction expression of two boolean expressions. - - - -.. csv-table:: ConjunctionExpression type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "operator", ":ref:`ref_flyteidl.core.ConjunctionExpression.LogicalOperator`", "", "" - "left_expression", ":ref:`ref_flyteidl.core.BooleanExpression`", "", "" - "right_expression", ":ref:`ref_flyteidl.core.BooleanExpression`", "", "" - - - - - - - -.. _ref_flyteidl.core.Operand: - -Operand ------------------------------------------------------------------- - -Defines an operand to a comparison expression. - - - -.. csv-table:: Operand type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "primitive", ":ref:`ref_flyteidl.core.Primitive`", "", "Can be a constant" - "var", ":ref:`ref_string`", "", "Or one of this node's input variables" - - - - - - - - - -.. _ref_flyteidl.core.ComparisonExpression.Operator: - -ComparisonExpression.Operator ------------------------------------------------------------------- - -Binary Operator for each expression - -.. csv-table:: Enum ComparisonExpression.Operator values - :header: "Name", "Number", "Description" - :widths: auto - - "EQ", "0", "" - "NEQ", "1", "" - "GT", "2", "Greater Than" - "GTE", "3", "" - "LT", "4", "Less Than" - "LTE", "5", "" - - - -.. _ref_flyteidl.core.ConjunctionExpression.LogicalOperator: - -ConjunctionExpression.LogicalOperator ------------------------------------------------------------------- - -Nested conditions. They can be conjoined using AND / OR -Order of evaluation is not important as the operators are Commutative - -.. csv-table:: Enum ConjunctionExpression.LogicalOperator values - :header: "Name", "Number", "Description" - :widths: auto - - "AND", "0", "Conjunction" - "OR", "1", "" - - - - - - - - - - -.. _ref_flyteidl/core/dynamic_job.proto: - -flyteidl/core/dynamic_job.proto -================================================================== - - - - - -.. _ref_flyteidl.core.DynamicJobSpec: - -DynamicJobSpec ------------------------------------------------------------------- - -Describes a set of tasks to execute and how the final outputs are produced. - - - -.. csv-table:: DynamicJobSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "nodes", ":ref:`ref_flyteidl.core.Node`", "repeated", "A collection of nodes to execute." - "min_successes", ":ref:`ref_int64`", "", "An absolute number of successful completions of nodes required to mark this job as succeeded. As soon as this criteria is met, the dynamic job will be marked as successful and outputs will be computed. If this number becomes impossible to reach (e.g. number of currently running tasks + number of already succeeded tasks < min_successes) the task will be aborted immediately and marked as failed. The default value of this field, if not specified, is the count of nodes repeated field." - "outputs", ":ref:`ref_flyteidl.core.Binding`", "repeated", "Describes how to bind the final output of the dynamic job from the outputs of executed nodes. The referenced ids in bindings should have the generated id for the subtask." - "tasks", ":ref:`ref_flyteidl.core.TaskTemplate`", "repeated", "[Optional] A complete list of task specs referenced in nodes." - "subworkflows", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "repeated", "[Optional] A complete list of task specs referenced in nodes." - - - - - - - - - - - - - - - - -.. _ref_flyteidl/core/errors.proto: - -flyteidl/core/errors.proto -================================================================== - - - - - -.. _ref_flyteidl.core.ContainerError: - -ContainerError ------------------------------------------------------------------- - -Error message to propagate detailed errors from container executions to the execution -engine. - - - -.. csv-table:: ContainerError type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "code", ":ref:`ref_string`", "", "A simplified code for errors, so that we can provide a glossary of all possible errors." - "message", ":ref:`ref_string`", "", "A detailed error message." - "kind", ":ref:`ref_flyteidl.core.ContainerError.Kind`", "", "An abstract error kind for this error. Defaults to Non_Recoverable if not specified." - "origin", ":ref:`ref_flyteidl.core.ExecutionError.ErrorKind`", "", "Defines the origin of the error (system, user, unknown)." - - - - - - - -.. _ref_flyteidl.core.ErrorDocument: - -ErrorDocument ------------------------------------------------------------------- - -Defines the errors.pb file format the container can produce to communicate -failure reasons to the execution engine. - - - -.. csv-table:: ErrorDocument type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "error", ":ref:`ref_flyteidl.core.ContainerError`", "", "The error raised during execution." - - - - - - - - - -.. _ref_flyteidl.core.ContainerError.Kind: - -ContainerError.Kind ------------------------------------------------------------------- - -Defines a generic error type that dictates the behavior of the retry strategy. - -.. csv-table:: Enum ContainerError.Kind values - :header: "Name", "Number", "Description" - :widths: auto - - "NON_RECOVERABLE", "0", "" - "RECOVERABLE", "1", "" - - - - - - - - - - -.. _ref_flyteidl/core/execution.proto: - -flyteidl/core/execution.proto -================================================================== - - - - - -.. _ref_flyteidl.core.ExecutionError: - -ExecutionError ------------------------------------------------------------------- - -Represents the error message from the execution. - - - -.. csv-table:: ExecutionError type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "code", ":ref:`ref_string`", "", "Error code indicates a grouping of a type of error. More Info: <Link>" - "message", ":ref:`ref_string`", "", "Detailed description of the error - including stack trace." - "error_uri", ":ref:`ref_string`", "", "Full error contents accessible via a URI" - "kind", ":ref:`ref_flyteidl.core.ExecutionError.ErrorKind`", "", "" - - - - - - - -.. _ref_flyteidl.core.NodeExecution: - -NodeExecution ------------------------------------------------------------------- - -Indicates various phases of Node Execution - - - - - - - - -.. _ref_flyteidl.core.QualityOfService: - -QualityOfService ------------------------------------------------------------------- - -Indicates the priority of an execution. - - - -.. csv-table:: QualityOfService type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tier", ":ref:`ref_flyteidl.core.QualityOfService.Tier`", "", "" - "spec", ":ref:`ref_flyteidl.core.QualityOfServiceSpec`", "", "" - - - - - - - -.. _ref_flyteidl.core.QualityOfServiceSpec: - -QualityOfServiceSpec ------------------------------------------------------------------- - -Represents customized execution run-time attributes. - - - -.. csv-table:: QualityOfServiceSpec type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "queueing_budget", ":ref:`ref_google.protobuf.Duration`", "", "Indicates how much queueing delay an execution can tolerate." - - - - - - - -.. _ref_flyteidl.core.TaskExecution: - -TaskExecution ------------------------------------------------------------------- - -Phases that task plugins can go through. Not all phases may be applicable to a specific plugin task, -but this is the cumulative list that customers may want to know about for their task. - - - - - - - - -.. _ref_flyteidl.core.TaskLog: - -TaskLog ------------------------------------------------------------------- - -Log information for the task that is specific to a log sink -When our log story is flushed out, we may have more metadata here like log link expiry - - - -.. csv-table:: TaskLog type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "uri", ":ref:`ref_string`", "", "" - "name", ":ref:`ref_string`", "", "" - "message_format", ":ref:`ref_flyteidl.core.TaskLog.MessageFormat`", "", "" - "ttl", ":ref:`ref_google.protobuf.Duration`", "", "" - - - - - - - -.. _ref_flyteidl.core.WorkflowExecution: - -WorkflowExecution ------------------------------------------------------------------- - -Indicates various phases of Workflow Execution - - - - - - - - - - -.. _ref_flyteidl.core.ExecutionError.ErrorKind: - -ExecutionError.ErrorKind ------------------------------------------------------------------- - -Error type: System or User - -.. csv-table:: Enum ExecutionError.ErrorKind values - :header: "Name", "Number", "Description" - :widths: auto - - "UNKNOWN", "0", "" - "USER", "1", "" - "SYSTEM", "2", "" - - - -.. _ref_flyteidl.core.NodeExecution.Phase: - -NodeExecution.Phase ------------------------------------------------------------------- - - - -.. csv-table:: Enum NodeExecution.Phase values - :header: "Name", "Number", "Description" - :widths: auto - - "UNDEFINED", "0", "" - "QUEUED", "1", "" - "RUNNING", "2", "" - "SUCCEEDED", "3", "" - "FAILING", "4", "" - "FAILED", "5", "" - "ABORTED", "6", "" - "SKIPPED", "7", "" - "TIMED_OUT", "8", "" - "DYNAMIC_RUNNING", "9", "" - - - -.. _ref_flyteidl.core.QualityOfService.Tier: - -QualityOfService.Tier ------------------------------------------------------------------- - - - -.. csv-table:: Enum QualityOfService.Tier values - :header: "Name", "Number", "Description" - :widths: auto - - "UNDEFINED", "0", "Default: no quality of service specified." - "HIGH", "1", "" - "MEDIUM", "2", "" - "LOW", "3", "" - - - -.. _ref_flyteidl.core.TaskExecution.Phase: - -TaskExecution.Phase ------------------------------------------------------------------- - - - -.. csv-table:: Enum TaskExecution.Phase values - :header: "Name", "Number", "Description" - :widths: auto - - "UNDEFINED", "0", "" - "QUEUED", "1", "" - "RUNNING", "2", "" - "SUCCEEDED", "3", "" - "ABORTED", "4", "" - "FAILED", "5", "" - "INITIALIZING", "6", "To indicate cases where task is initializing, like: ErrImagePull, ContainerCreating, PodInitializing" - "WAITING_FOR_RESOURCES", "7", "To address cases, where underlying resource is not available: Backoff error, Resource quota exceeded" - - - -.. _ref_flyteidl.core.TaskLog.MessageFormat: - -TaskLog.MessageFormat ------------------------------------------------------------------- - - - -.. csv-table:: Enum TaskLog.MessageFormat values - :header: "Name", "Number", "Description" - :widths: auto - - "UNKNOWN", "0", "" - "CSV", "1", "" - "JSON", "2", "" - - - -.. _ref_flyteidl.core.WorkflowExecution.Phase: - -WorkflowExecution.Phase ------------------------------------------------------------------- - - - -.. csv-table:: Enum WorkflowExecution.Phase values - :header: "Name", "Number", "Description" - :widths: auto - - "UNDEFINED", "0", "" - "QUEUED", "1", "" - "RUNNING", "2", "" - "SUCCEEDING", "3", "" - "SUCCEEDED", "4", "" - "FAILING", "5", "" - "FAILED", "6", "" - "ABORTED", "7", "" - "TIMED_OUT", "8", "" - - - - - - - - - - -.. _ref_flyteidl/core/identifier.proto: - -flyteidl/core/identifier.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Identifier: - -Identifier ------------------------------------------------------------------- - -Encapsulation of fields that uniquely identifies a Flyte resource. - - - -.. csv-table:: Identifier type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "resource_type", ":ref:`ref_flyteidl.core.ResourceType`", "", "Identifies the specific type of resource that this identifer corresponds to." - "project", ":ref:`ref_string`", "", "Name of the project the resource belongs to." - "domain", ":ref:`ref_string`", "", "Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project." - "name", ":ref:`ref_string`", "", "User provided value for the resource." - "version", ":ref:`ref_string`", "", "Specific version of the resource." - - - - - - - -.. _ref_flyteidl.core.NodeExecutionIdentifier: - -NodeExecutionIdentifier ------------------------------------------------------------------- - -Encapsulation of fields that identify a Flyte node execution entity. - - - -.. csv-table:: NodeExecutionIdentifier type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "node_id", ":ref:`ref_string`", "", "" - "execution_id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "" - - - - - - - -.. _ref_flyteidl.core.TaskExecutionIdentifier: - -TaskExecutionIdentifier ------------------------------------------------------------------- - -Encapsulation of fields that identify a Flyte task execution entity. - - - -.. csv-table:: TaskExecutionIdentifier type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_id", ":ref:`ref_flyteidl.core.Identifier`", "", "" - "node_execution_id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "" - "retry_attempt", ":ref:`ref_uint32`", "", "" - - - - - - - -.. _ref_flyteidl.core.WorkflowExecutionIdentifier: - -WorkflowExecutionIdentifier ------------------------------------------------------------------- - -Encapsulation of fields that uniquely identifies a Flyte workflow execution - - - -.. csv-table:: WorkflowExecutionIdentifier type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "Name of the project the resource belongs to." - "domain", ":ref:`ref_string`", "", "Name of the domain the resource belongs to. A domain can be considered as a subset within a specific project." - "name", ":ref:`ref_string`", "", "User or system provided value for the resource." - - - - - - - - - -.. _ref_flyteidl.core.ResourceType: - -ResourceType ------------------------------------------------------------------- - -Indicates a resource type within Flyte. - -.. csv-table:: Enum ResourceType values - :header: "Name", "Number", "Description" - :widths: auto - - "UNSPECIFIED", "0", "" - "TASK", "1", "" - "WORKFLOW", "2", "" - "LAUNCH_PLAN", "3", "" - "DATASET", "4", "A dataset represents an entity modeled in Flyte DataCatalog. A Dataset is also a versioned entity and can be a compilation of multiple individual objects. Eventually all Catalog objects should be modeled similar to Flyte Objects. The Dataset entities makes it possible for the UI and CLI to act on the objects in a similar manner to other Flyte objects" - - - - - - - - - - -.. _ref_flyteidl/core/interface.proto: - -flyteidl/core/interface.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Parameter: - -Parameter ------------------------------------------------------------------- - -A parameter is used as input to a launch plan and has -the special ability to have a default value or mark itself as required. - - - -.. csv-table:: Parameter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "var", ":ref:`ref_flyteidl.core.Variable`", "", "+required Variable. Defines the type of the variable backing this parameter." - "default", ":ref:`ref_flyteidl.core.Literal`", "", "Defines a default value that has to match the variable type defined." - "required", ":ref:`ref_bool`", "", "+optional, is this value required to be filled." - - - - - - - -.. _ref_flyteidl.core.ParameterMap: - -ParameterMap ------------------------------------------------------------------- - -A map of Parameters. - - - -.. csv-table:: ParameterMap type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "parameters", ":ref:`ref_flyteidl.core.ParameterMap.ParametersEntry`", "repeated", "Defines a map of parameter names to parameters." - - - - - - - -.. _ref_flyteidl.core.ParameterMap.ParametersEntry: - -ParameterMap.ParametersEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: ParameterMap.ParametersEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.Parameter`", "", "" - - - - - - - -.. _ref_flyteidl.core.TypedInterface: - -TypedInterface ------------------------------------------------------------------- - -Defines strongly typed inputs and outputs. - - - -.. csv-table:: TypedInterface type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "inputs", ":ref:`ref_flyteidl.core.VariableMap`", "", "" - "outputs", ":ref:`ref_flyteidl.core.VariableMap`", "", "" - - - - - - - -.. _ref_flyteidl.core.Variable: - -Variable ------------------------------------------------------------------- - -Defines a strongly typed variable. - - - -.. csv-table:: Variable type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "type", ":ref:`ref_flyteidl.core.LiteralType`", "", "Variable literal type." - "description", ":ref:`ref_string`", "", "+optional string describing input variable" - - - - - - - -.. _ref_flyteidl.core.VariableMap: - -VariableMap ------------------------------------------------------------------- - -A map of Variables - - - -.. csv-table:: VariableMap type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "variables", ":ref:`ref_flyteidl.core.VariableMap.VariablesEntry`", "repeated", "Defines a map of variable names to variables." - - - - - - - -.. _ref_flyteidl.core.VariableMap.VariablesEntry: - -VariableMap.VariablesEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: VariableMap.VariablesEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.Variable`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/core/literals.proto: - -flyteidl/core/literals.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Binary: - -Binary ------------------------------------------------------------------- - -A simple byte array with a tag to help different parts of the system communicate about what is in the byte array. -It's strongly advisable that consumers of this type define a unique tag and validate the tag before parsing the data. - - - -.. csv-table:: Binary type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "value", ":ref:`ref_bytes`", "", "" - "tag", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.core.Binding: - -Binding ------------------------------------------------------------------- - -An input/output binding of a variable to either static value or a node output. - - - -.. csv-table:: Binding type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "var", ":ref:`ref_string`", "", "Variable name must match an input/output variable of the node." - "binding", ":ref:`ref_flyteidl.core.BindingData`", "", "Data to use to bind this variable." - - - - - - - -.. _ref_flyteidl.core.BindingData: - -BindingData ------------------------------------------------------------------- - -Specifies either a simple value or a reference to another output. - - - -.. csv-table:: BindingData type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "scalar", ":ref:`ref_flyteidl.core.Scalar`", "", "A simple scalar value." - "collection", ":ref:`ref_flyteidl.core.BindingDataCollection`", "", "A collection of binding data. This allows nesting of binding data to any number of levels." - "promise", ":ref:`ref_flyteidl.core.OutputReference`", "", "References an output promised by another node." - "map", ":ref:`ref_flyteidl.core.BindingDataMap`", "", "A map of bindings. The key is always a string." - - - - - - - -.. _ref_flyteidl.core.BindingDataCollection: - -BindingDataCollection ------------------------------------------------------------------- - -A collection of BindingData items. - - - -.. csv-table:: BindingDataCollection type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "bindings", ":ref:`ref_flyteidl.core.BindingData`", "repeated", "" - - - - - - - -.. _ref_flyteidl.core.BindingDataMap: - -BindingDataMap ------------------------------------------------------------------- - -A map of BindingData items. - - - -.. csv-table:: BindingDataMap type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "bindings", ":ref:`ref_flyteidl.core.BindingDataMap.BindingsEntry`", "repeated", "" - - - - - - - -.. _ref_flyteidl.core.BindingDataMap.BindingsEntry: - -BindingDataMap.BindingsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: BindingDataMap.BindingsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.BindingData`", "", "" - - - - - - - -.. _ref_flyteidl.core.Blob: - -Blob ------------------------------------------------------------------- - -Refers to an offloaded set of files. It encapsulates the type of the store and a unique uri for where the data is. -There are no restrictions on how the uri is formatted since it will depend on how to interact with the store. - - - -.. csv-table:: Blob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "metadata", ":ref:`ref_flyteidl.core.BlobMetadata`", "", "" - "uri", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.core.BlobMetadata: - -BlobMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: BlobMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "type", ":ref:`ref_flyteidl.core.BlobType`", "", "" - - - - - - - -.. _ref_flyteidl.core.KeyValuePair: - -KeyValuePair ------------------------------------------------------------------- - -A generic key value pair. - - - -.. csv-table:: KeyValuePair type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "required." - "value", ":ref:`ref_string`", "", "+optional." - - - - - - - -.. _ref_flyteidl.core.Literal: - -Literal ------------------------------------------------------------------- - -A simple value. This supports any level of nesting (e.g. array of array of array of Blobs) as well as simple primitives. - - - -.. csv-table:: Literal type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "scalar", ":ref:`ref_flyteidl.core.Scalar`", "", "A simple value." - "collection", ":ref:`ref_flyteidl.core.LiteralCollection`", "", "A collection of literals to allow nesting." - "map", ":ref:`ref_flyteidl.core.LiteralMap`", "", "A map of strings to literals." - - - - - - - -.. _ref_flyteidl.core.LiteralCollection: - -LiteralCollection ------------------------------------------------------------------- - -A collection of literals. This is a workaround since oneofs in proto messages cannot contain a repeated field. - - - -.. csv-table:: LiteralCollection type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "literals", ":ref:`ref_flyteidl.core.Literal`", "repeated", "" - - - - - - - -.. _ref_flyteidl.core.LiteralMap: - -LiteralMap ------------------------------------------------------------------- - -A map of literals. This is a workaround since oneofs in proto messages cannot contain a repeated field. - - - -.. csv-table:: LiteralMap type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "literals", ":ref:`ref_flyteidl.core.LiteralMap.LiteralsEntry`", "repeated", "" - - - - - - - -.. _ref_flyteidl.core.LiteralMap.LiteralsEntry: - -LiteralMap.LiteralsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: LiteralMap.LiteralsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.Literal`", "", "" - - - - - - - -.. _ref_flyteidl.core.Primitive: - -Primitive ------------------------------------------------------------------- - -Primitive Types - - - -.. csv-table:: Primitive type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "integer", ":ref:`ref_int64`", "", "" - "float_value", ":ref:`ref_double`", "", "" - "string_value", ":ref:`ref_string`", "", "" - "boolean", ":ref:`ref_bool`", "", "" - "datetime", ":ref:`ref_google.protobuf.Timestamp`", "", "" - "duration", ":ref:`ref_google.protobuf.Duration`", "", "" - - - - - - - -.. _ref_flyteidl.core.RetryStrategy: - -RetryStrategy ------------------------------------------------------------------- - -Retry strategy associated with an executable unit. - - - -.. csv-table:: RetryStrategy type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "retries", ":ref:`ref_uint32`", "", "Number of retries. Retries will be consumed when the job fails with a recoverable error. The number of retries must be less than or equals to 10." - - - - - - - -.. _ref_flyteidl.core.Scalar: - -Scalar ------------------------------------------------------------------- - - - - - -.. csv-table:: Scalar type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "primitive", ":ref:`ref_flyteidl.core.Primitive`", "", "" - "blob", ":ref:`ref_flyteidl.core.Blob`", "", "" - "binary", ":ref:`ref_flyteidl.core.Binary`", "", "" - "schema", ":ref:`ref_flyteidl.core.Schema`", "", "" - "none_type", ":ref:`ref_flyteidl.core.Void`", "", "" - "error", ":ref:`ref_flyteidl.core.Error`", "", "" - "generic", ":ref:`ref_google.protobuf.Struct`", "", "" - - - - - - - -.. _ref_flyteidl.core.Schema: - -Schema ------------------------------------------------------------------- - -A strongly typed schema that defines the interface of data retrieved from the underlying storage medium. - - - -.. csv-table:: Schema type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "uri", ":ref:`ref_string`", "", "" - "type", ":ref:`ref_flyteidl.core.SchemaType`", "", "" - - - - - - - -.. _ref_flyteidl.core.Void: - -Void ------------------------------------------------------------------- - -Used to denote a nil/null/None assignment to a scalar value. The underlying LiteralType for Void is intentionally -undefined since it can be assigned to a scalar of any LiteralType. - - - - - - - - - - - - - - - - - -.. _ref_flyteidl/core/security.proto: - -flyteidl/core/security.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Identity: - -Identity ------------------------------------------------------------------- - -Identity encapsulates the various security identities a task can run as. It's up to the underlying plugin to pick the -right identity for the execution environment. - - - -.. csv-table:: Identity type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "iam_role", ":ref:`ref_string`", "", "iam_role references the fully qualified name of Identity & Access Management role to impersonate." - "k8s_service_account", ":ref:`ref_string`", "", "k8s_service_account references a kubernetes service account to impersonate." - "oauth2_client", ":ref:`ref_flyteidl.core.OAuth2Client`", "", "oauth2_client references an oauth2 client. Backend plugins can use this information to impersonate the client when making external calls." - - - - - - - -.. _ref_flyteidl.core.OAuth2Client: - -OAuth2Client ------------------------------------------------------------------- - -OAuth2Client encapsulates OAuth2 Client Credentials to be used when making calls on behalf of that task. - - - -.. csv-table:: OAuth2Client type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "client_id", ":ref:`ref_string`", "", "client_id is the public id for the client to use. The system will not perform any pre-auth validation that the secret requested matches the client_id indicated here. +required" - "client_secret", ":ref:`ref_flyteidl.core.Secret`", "", "client_secret is a reference to the secret used to authenticate the OAuth2 client. +required" - - - - - - - -.. _ref_flyteidl.core.OAuth2TokenRequest: - -OAuth2TokenRequest ------------------------------------------------------------------- - -OAuth2TokenRequest encapsulates information needed to request an OAuth2 token. -FLYTE_TOKENS_ENV_PREFIX will be passed to indicate the prefix of the environment variables that will be present if -tokens are passed through environment variables. -FLYTE_TOKENS_PATH_PREFIX will be passed to indicate the prefix of the path where secrets will be mounted if tokens -are passed through file mounts. - - - -.. csv-table:: OAuth2TokenRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_string`", "", "name indicates a unique id for the token request within this task token requests. It'll be used as a suffix for environment variables and as a filename for mounting tokens as files. +required" - "type", ":ref:`ref_flyteidl.core.OAuth2TokenRequest.Type`", "", "type indicates the type of the request to make. Defaults to CLIENT_CREDENTIALS. +required" - "client", ":ref:`ref_flyteidl.core.OAuth2Client`", "", "client references the client_id/secret to use to request the OAuth2 token. +required" - "idp_discovery_endpoint", ":ref:`ref_string`", "", "idp_discovery_endpoint references the discovery endpoint used to retrieve token endpoint and other related information. +optional" - "token_endpoint", ":ref:`ref_string`", "", "token_endpoint references the token issuance endpoint. If idp_discovery_endpoint is not provided, this parameter is mandatory. +optional" - - - - - - - -.. _ref_flyteidl.core.Secret: - -Secret ------------------------------------------------------------------- - -Secret encapsulates information about the secret a task needs to proceed. An environment variable -FLYTE_SECRETS_ENV_PREFIX will be passed to indicate the prefix of the environment variables that will be present if -secrets are passed through environment variables. -FLYTE_SECRETS_DEFAULT_DIR will be passed to indicate the prefix of the path where secrets will be mounted if secrets -are passed through file mounts. - - - -.. csv-table:: Secret type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "group", ":ref:`ref_string`", "", "The name of the secret group where to find the key referenced below. For K8s secrets, this should be the name of the v1/secret object. For Confidant, this should be the Credential name. For Vault, this should be the secret name. For AWS Secret Manager, this should be the name of the secret. +required" - "group_version", ":ref:`ref_string`", "", "The group version to fetch. This is not supported in all secret management systems. It'll be ignored for the ones that do not support it. +optional" - "key", ":ref:`ref_string`", "", "The name of the secret to mount. This has to match an existing secret in the system. It's up to the implementation of the secret management system to require case sensitivity. For K8s secrets, Confidant and Vault, this should match one of the keys inside the secret. For AWS Secret Manager, it's ignored. +optional" - "mount_requirement", ":ref:`ref_flyteidl.core.Secret.MountType`", "", "mount_requirement is optional. Indicates where the secret has to be mounted. If provided, the execution will fail if the underlying key management system cannot satisfy that requirement. If not provided, the default location will depend on the key management system. +optional" - - - - - - - -.. _ref_flyteidl.core.SecurityContext: - -SecurityContext ------------------------------------------------------------------- - -SecurityContext holds security attributes that apply to tasks. - - - -.. csv-table:: SecurityContext type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "run_as", ":ref:`ref_flyteidl.core.Identity`", "", "run_as encapsulates the identity a pod should run as. If the task fills in multiple fields here, it'll be up to the backend plugin to choose the appropriate identity for the execution engine the task will run on." - "secrets", ":ref:`ref_flyteidl.core.Secret`", "repeated", "secrets indicate the list of secrets the task needs in order to proceed. Secrets will be mounted/passed to the pod as it starts. If the plugin responsible for kicking of the task will not run it on a flyte cluster (e.g. AWS Batch), it's the responsibility of the plugin to fetch the secret (which means propeller identity will need access to the secret) and to pass it to the remote execution engine." - "tokens", ":ref:`ref_flyteidl.core.OAuth2TokenRequest`", "repeated", "tokens indicate the list of token requests the task needs in order to proceed. Tokens will be mounted/passed to the pod as it starts. If the plugin responsible for kicking of the task will not run it on a flyte cluster (e.g. AWS Batch), it's the responsibility of the plugin to fetch the secret (which means propeller identity will need access to the secret) and to pass it to the remote execution engine." - - - - - - - - - -.. _ref_flyteidl.core.OAuth2TokenRequest.Type: - -OAuth2TokenRequest.Type ------------------------------------------------------------------- - -Type of the token requested. - -.. csv-table:: Enum OAuth2TokenRequest.Type values - :header: "Name", "Number", "Description" - :widths: auto - - "CLIENT_CREDENTIALS", "0", "CLIENT_CREDENTIALS indicates a 2-legged OAuth token requested using client credentials." - - - -.. _ref_flyteidl.core.Secret.MountType: - -Secret.MountType ------------------------------------------------------------------- - - - -.. csv-table:: Enum Secret.MountType values - :header: "Name", "Number", "Description" - :widths: auto - - "ANY", "0", "Default case, indicates the client can tolerate either mounting options." - "ENV_VAR", "1", "ENV_VAR indicates the secret needs to be mounted as an environment variable." - "FILE", "2", "FILE indicates the secret needs to be mounted as a file." - - - - - - - - - - -.. _ref_flyteidl/core/tasks.proto: - -flyteidl/core/tasks.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Container: - -Container ------------------------------------------------------------------- - - - - - -.. csv-table:: Container type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "image", ":ref:`ref_string`", "", "Container image url. Eg: docker/redis:latest" - "command", ":ref:`ref_string`", "repeated", "Command to be executed, if not provided, the default entrypoint in the container image will be used." - "args", ":ref:`ref_string`", "repeated", "These will default to Flyte given paths. If provided, the system will not append known paths. If the task still needs flyte's inputs and outputs path, add $(FLYTE_INPUT_FILE), $(FLYTE_OUTPUT_FILE) wherever makes sense and the system will populate these before executing the container." - "resources", ":ref:`ref_flyteidl.core.Resources`", "", "Container resources requirement as specified by the container engine." - "env", ":ref:`ref_flyteidl.core.KeyValuePair`", "repeated", "Environment variables will be set as the container is starting up." - "config", ":ref:`ref_flyteidl.core.KeyValuePair`", "repeated", "**Deprecated.** Allows extra configs to be available for the container. TODO: elaborate on how configs will become available. Deprecated, please use TaskTemplate.config instead." - "ports", ":ref:`ref_flyteidl.core.ContainerPort`", "repeated", "Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but not supported on AWS Batch) Only K8s" - "data_config", ":ref:`ref_flyteidl.core.DataLoadingConfig`", "", "BETA: Optional configuration for DataLoading. If not specified, then default values are used. This makes it possible to to run a completely portable container, that uses inputs and outputs only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment. If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation to understand the default paths. Only K8s" - - - - - - - -.. _ref_flyteidl.core.ContainerPort: - -ContainerPort ------------------------------------------------------------------- - -Defines port properties for a container. - - - -.. csv-table:: ContainerPort type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "container_port", ":ref:`ref_uint32`", "", "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536." - - - - - - - -.. _ref_flyteidl.core.DataLoadingConfig: - -DataLoadingConfig ------------------------------------------------------------------- - -This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. -Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path -Any outputs generated by the user container - within output_path are automatically uploaded. - - - -.. csv-table:: DataLoadingConfig type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "enabled", ":ref:`ref_bool`", "", "Flag enables DataLoading Config. If this is not set, data loading will not be used!" - "input_path", ":ref:`ref_string`", "", "File system path (start at root). This folder will contain all the inputs exploded to a separate file. Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format /var/flyte/inputs/y -> Y is a file in Binary format /var/flyte/inputs/z/... -> Note Z itself is a directory More information about the protocol - refer to docs #TODO reference docs here" - "output_path", ":ref:`ref_string`", "", "File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file" - "format", ":ref:`ref_flyteidl.core.DataLoadingConfig.LiteralMapFormat`", "", "In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding" - "io_strategy", ":ref:`ref_flyteidl.core.IOStrategy`", "", "" - - - - - - - -.. _ref_flyteidl.core.IOStrategy: - -IOStrategy ------------------------------------------------------------------- - -Strategy to use when dealing with Blob, Schema, or multipart blob data (large datasets) - - - -.. csv-table:: IOStrategy type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "download_mode", ":ref:`ref_flyteidl.core.IOStrategy.DownloadMode`", "", "Mode to use to manage downloads" - "upload_mode", ":ref:`ref_flyteidl.core.IOStrategy.UploadMode`", "", "Mode to use to manage uploads" - - - - - - - -.. _ref_flyteidl.core.K8sObjectMetadata: - -K8sObjectMetadata ------------------------------------------------------------------- - -Metadata for building a kubernetes object when a task is executed. - - - -.. csv-table:: K8sObjectMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "labels", ":ref:`ref_flyteidl.core.K8sObjectMetadata.LabelsEntry`", "repeated", "Optional labels to add to the pod definition." - "annotations", ":ref:`ref_flyteidl.core.K8sObjectMetadata.AnnotationsEntry`", "repeated", "Optional annotations to add to the pod definition." - - - - - - - -.. _ref_flyteidl.core.K8sObjectMetadata.AnnotationsEntry: - -K8sObjectMetadata.AnnotationsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: K8sObjectMetadata.AnnotationsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.core.K8sObjectMetadata.LabelsEntry: - -K8sObjectMetadata.LabelsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: K8sObjectMetadata.LabelsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.core.K8sPod: - -K8sPod ------------------------------------------------------------------- - -Defines a pod spec and additional pod metadata that is created when a task is executed. - - - -.. csv-table:: K8sPod type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "metadata", ":ref:`ref_flyteidl.core.K8sObjectMetadata`", "", "Contains additional metadata for building a kubernetes pod." - "pod_spec", ":ref:`ref_google.protobuf.Struct`", "", "Defines the primary pod spec created when a task is executed. This should be a JSON-marshalled pod spec, which can be defined in - go, using: https://github.com/kubernetes/api/blob/release-1.21/core/v1/types.go#L2936 - python: using https://github.com/kubernetes-client/python/blob/release-19.0/kubernetes/client/models/v1_pod_spec.py" - - - - - - - -.. _ref_flyteidl.core.Resources: - -Resources ------------------------------------------------------------------- - -A customizable interface to convey resources requested for a container. This can be interpretted differently for different -container engines. - - - -.. csv-table:: Resources type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "requests", ":ref:`ref_flyteidl.core.Resources.ResourceEntry`", "repeated", "The desired set of resources requested. ResourceNames must be unique within the list." - "limits", ":ref:`ref_flyteidl.core.Resources.ResourceEntry`", "repeated", "Defines a set of bounds (e.g. min/max) within which the task can reliably run. ResourceNames must be unique within the list." - - - - - - - -.. _ref_flyteidl.core.Resources.ResourceEntry: - -Resources.ResourceEntry ------------------------------------------------------------------- - -Encapsulates a resource name and value. - - - -.. csv-table:: Resources.ResourceEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_flyteidl.core.Resources.ResourceName`", "", "Resource name." - "value", ":ref:`ref_string`", "", "Value must be a valid k8s quantity. See https://github.com/kubernetes/apimachinery/blob/master/pkg/api/resource/quantity.go#L30-L80" - - - - - - - -.. _ref_flyteidl.core.RuntimeMetadata: - -RuntimeMetadata ------------------------------------------------------------------- - -Runtime information. This is losely defined to allow for extensibility. - - - -.. csv-table:: RuntimeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "type", ":ref:`ref_flyteidl.core.RuntimeMetadata.RuntimeType`", "", "Type of runtime." - "version", ":ref:`ref_string`", "", "Version of the runtime. All versions should be backward compatible. However, certain cases call for version checks to ensure tighter validation or setting expectations." - "flavor", ":ref:`ref_string`", "", "+optional It can be used to provide extra information about the runtime (e.g. python, golang... etc.)." - - - - - - - -.. _ref_flyteidl.core.TaskMetadata: - -TaskMetadata ------------------------------------------------------------------- - -Task Metadata - - - -.. csv-table:: TaskMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "discoverable", ":ref:`ref_bool`", "", "Indicates whether the system should attempt to lookup this task's output to avoid duplication of work." - "runtime", ":ref:`ref_flyteidl.core.RuntimeMetadata`", "", "Runtime information about the task." - "timeout", ":ref:`ref_google.protobuf.Duration`", "", "The overall timeout of a task including user-triggered retries." - "retries", ":ref:`ref_flyteidl.core.RetryStrategy`", "", "Number of retries per task." - "discovery_version", ":ref:`ref_string`", "", "Indicates a logical version to apply to this task for the purpose of discovery." - "deprecated_error_message", ":ref:`ref_string`", "", "If set, this indicates that this task is deprecated. This will enable owners of tasks to notify consumers of the ending of support for a given task." - "interruptible", ":ref:`ref_bool`", "", "" - - - - - - - -.. _ref_flyteidl.core.TaskTemplate: - -TaskTemplate ------------------------------------------------------------------- - -A Task structure that uniquely identifies a task in the system -Tasks are registered as a first step in the system. - - - -.. csv-table:: TaskTemplate type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "Auto generated taskId by the system. Task Id uniquely identifies this task globally." - "type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier. This can be used to customize any of the components. If no extensions are provided in the system, Flyte will resolve the this task to its TaskCategory and default the implementation registered for the TaskCategory." - "metadata", ":ref:`ref_flyteidl.core.TaskMetadata`", "", "Extra metadata about the task." - "interface", ":ref:`ref_flyteidl.core.TypedInterface`", "", "A strongly typed interface for the task. This enables others to use this task within a workflow and gauarantees compile-time validation of the workflow to avoid costly runtime failures." - "custom", ":ref:`ref_google.protobuf.Struct`", "", "Custom data about the task. This is extensible to allow various plugins in the system." - "container", ":ref:`ref_flyteidl.core.Container`", "", "" - "k8s_pod", ":ref:`ref_flyteidl.core.K8sPod`", "", "" - "task_type_version", ":ref:`ref_int32`", "", "This can be used to customize task handling at execution time for the same task type." - "security_context", ":ref:`ref_flyteidl.core.SecurityContext`", "", "security_context encapsulates security attributes requested to run this task." - "config", ":ref:`ref_flyteidl.core.TaskTemplate.ConfigEntry`", "repeated", "Metadata about the custom defined for this task. This is extensible to allow various plugins in the system to use as required. reserve the field numbers 1 through 15 for very frequently occurring message elements" - - - - - - - -.. _ref_flyteidl.core.TaskTemplate.ConfigEntry: - -TaskTemplate.ConfigEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: TaskTemplate.ConfigEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - - - -.. _ref_flyteidl.core.DataLoadingConfig.LiteralMapFormat: - -DataLoadingConfig.LiteralMapFormat ------------------------------------------------------------------- - -LiteralMapFormat decides the encoding format in which the input metadata should be made available to the containers. -If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. -JSON and YAML do not need any protobuf definitions to read it -All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) - -.. csv-table:: Enum DataLoadingConfig.LiteralMapFormat values - :header: "Name", "Number", "Description" - :widths: auto - - "JSON", "0", "JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html" - "YAML", "1", "" - "PROTO", "2", "Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core" - - - -.. _ref_flyteidl.core.IOStrategy.DownloadMode: - -IOStrategy.DownloadMode ------------------------------------------------------------------- - -Mode to use for downloading - -.. csv-table:: Enum IOStrategy.DownloadMode values - :header: "Name", "Number", "Description" - :widths: auto - - "DOWNLOAD_EAGER", "0", "All data will be downloaded before the main container is executed" - "DOWNLOAD_STREAM", "1", "Data will be downloaded as a stream and an End-Of-Stream marker will be written to indicate all data has been downloaded. Refer to protocol for details" - "DO_NOT_DOWNLOAD", "2", "Large objects (offloaded) will not be downloaded" - - - -.. _ref_flyteidl.core.IOStrategy.UploadMode: - -IOStrategy.UploadMode ------------------------------------------------------------------- - -Mode to use for uploading - -.. csv-table:: Enum IOStrategy.UploadMode values - :header: "Name", "Number", "Description" - :widths: auto - - "UPLOAD_ON_EXIT", "0", "All data will be uploaded after the main container exits" - "UPLOAD_EAGER", "1", "Data will be uploaded as it appears. Refer to protocol specification for details" - "DO_NOT_UPLOAD", "2", "Data will not be uploaded, only references will be written" - - - -.. _ref_flyteidl.core.Resources.ResourceName: - -Resources.ResourceName ------------------------------------------------------------------- - -Known resource names. - -.. csv-table:: Enum Resources.ResourceName values - :header: "Name", "Number", "Description" - :widths: auto - - "UNKNOWN", "0", "" - "CPU", "1", "" - "GPU", "2", "" - "MEMORY", "3", "" - "STORAGE", "4", "" - - - -.. _ref_flyteidl.core.RuntimeMetadata.RuntimeType: - -RuntimeMetadata.RuntimeType ------------------------------------------------------------------- - - - -.. csv-table:: Enum RuntimeMetadata.RuntimeType values - :header: "Name", "Number", "Description" - :widths: auto - - "OTHER", "0", "" - "FLYTE_SDK", "1", "" - - - - - - - - - - -.. _ref_flyteidl/core/types.proto: - -flyteidl/core/types.proto -================================================================== - - - - - -.. _ref_flyteidl.core.BlobType: - -BlobType ------------------------------------------------------------------- - -Defines type behavior for blob objects - - - -.. csv-table:: BlobType type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "format", ":ref:`ref_string`", "", "Format can be a free form string understood by SDK/UI etc like csv, parquet etc" - "dimensionality", ":ref:`ref_flyteidl.core.BlobType.BlobDimensionality`", "", "" - - - - - - - -.. _ref_flyteidl.core.Error: - -Error ------------------------------------------------------------------- - -Represents an error thrown from a node. - - - -.. csv-table:: Error type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "failed_node_id", ":ref:`ref_string`", "", "The node id that threw the error." - "message", ":ref:`ref_string`", "", "Error message thrown." - - - - - - - -.. _ref_flyteidl.core.LiteralType: - -LiteralType ------------------------------------------------------------------- - -Defines a strong type to allow type checking between interfaces. - - - -.. csv-table:: LiteralType type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "simple", ":ref:`ref_flyteidl.core.SimpleType`", "", "A simple type that can be compared one-to-one with another." - "schema", ":ref:`ref_flyteidl.core.SchemaType`", "", "A complex type that requires matching of inner fields." - "collection_type", ":ref:`ref_flyteidl.core.LiteralType`", "", "Defines the type of the value of a collection. Only homogeneous collections are allowed." - "map_value_type", ":ref:`ref_flyteidl.core.LiteralType`", "", "Defines the type of the value of a map type. The type of the key is always a string." - "blob", ":ref:`ref_flyteidl.core.BlobType`", "", "A blob might have specialized implementation details depending on associated metadata." - "metadata", ":ref:`ref_google.protobuf.Struct`", "", "This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking. This might be used by consumers to identify special behavior or display extended information for the type." - - - - - - - -.. _ref_flyteidl.core.OutputReference: - -OutputReference ------------------------------------------------------------------- - -A reference to an output produced by a node. The type can be retrieved -and validated- from -the underlying interface of the node. - - - -.. csv-table:: OutputReference type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "node_id", ":ref:`ref_string`", "", "Node id must exist at the graph layer." - "var", ":ref:`ref_string`", "", "Variable name must refer to an output variable for the node." - - - - - - - -.. _ref_flyteidl.core.SchemaType: - -SchemaType ------------------------------------------------------------------- - -Defines schema columns and types to strongly type-validate schemas interoperability. - - - -.. csv-table:: SchemaType type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "columns", ":ref:`ref_flyteidl.core.SchemaType.SchemaColumn`", "repeated", "A list of ordered columns this schema comprises of." - - - - - - - -.. _ref_flyteidl.core.SchemaType.SchemaColumn: - -SchemaType.SchemaColumn ------------------------------------------------------------------- - - - - - -.. csv-table:: SchemaType.SchemaColumn type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_string`", "", "A unique name -within the schema type- for the column" - "type", ":ref:`ref_flyteidl.core.SchemaType.SchemaColumn.SchemaColumnType`", "", "The column type. This allows a limited set of types currently." - - - - - - - - - -.. _ref_flyteidl.core.BlobType.BlobDimensionality: - -BlobType.BlobDimensionality ------------------------------------------------------------------- - - - -.. csv-table:: Enum BlobType.BlobDimensionality values - :header: "Name", "Number", "Description" - :widths: auto - - "SINGLE", "0", "" - "MULTIPART", "1", "" - - - -.. _ref_flyteidl.core.SchemaType.SchemaColumn.SchemaColumnType: - -SchemaType.SchemaColumn.SchemaColumnType ------------------------------------------------------------------- - - - -.. csv-table:: Enum SchemaType.SchemaColumn.SchemaColumnType values - :header: "Name", "Number", "Description" - :widths: auto - - "INTEGER", "0", "" - "FLOAT", "1", "" - "STRING", "2", "" - "BOOLEAN", "3", "" - "DATETIME", "4", "" - "DURATION", "5", "" - - - -.. _ref_flyteidl.core.SimpleType: - -SimpleType ------------------------------------------------------------------- - -Define a set of simple types. - -.. csv-table:: Enum SimpleType values - :header: "Name", "Number", "Description" - :widths: auto - - "NONE", "0", "" - "INTEGER", "1", "" - "FLOAT", "2", "" - "STRING", "3", "" - "BOOLEAN", "4", "" - "DATETIME", "5", "" - "DURATION", "6", "" - "BINARY", "7", "" - "ERROR", "8", "" - "STRUCT", "9", "" - - - - - - - - - - -.. _ref_flyteidl/core/workflow.proto: - -flyteidl/core/workflow.proto -================================================================== - - - - - -.. _ref_flyteidl.core.Alias: - -Alias ------------------------------------------------------------------- - -Links a variable to an alias. - - - -.. csv-table:: Alias type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "var", ":ref:`ref_string`", "", "Must match one of the output variable names on a node." - "alias", ":ref:`ref_string`", "", "A workflow-level unique alias that downstream nodes can refer to in their input." - - - - - - - -.. _ref_flyteidl.core.BranchNode: - -BranchNode ------------------------------------------------------------------- - -BranchNode is a special node that alter the flow of the workflow graph. It allows the control flow to branch at -runtime based on a series of conditions that get evaluated on various parameters (e.g. inputs, primtives). - - - -.. csv-table:: BranchNode type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "if_else", ":ref:`ref_flyteidl.core.IfElseBlock`", "", "+required" - - - - - - - -.. _ref_flyteidl.core.IfBlock: - -IfBlock ------------------------------------------------------------------- - -Defines a condition and the execution unit that should be executed if the condition is satisfied. - - - -.. csv-table:: IfBlock type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "condition", ":ref:`ref_flyteidl.core.BooleanExpression`", "", "" - "then_node", ":ref:`ref_flyteidl.core.Node`", "", "" - - - - - - - -.. _ref_flyteidl.core.IfElseBlock: - -IfElseBlock ------------------------------------------------------------------- - -Defines a series of if/else blocks. The first branch whose condition evaluates to true is the one to execute. -If no conditions were satisfied, the else_node or the error will execute. - - - -.. csv-table:: IfElseBlock type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "case", ":ref:`ref_flyteidl.core.IfBlock`", "", "+required. First condition to evaluate." - "other", ":ref:`ref_flyteidl.core.IfBlock`", "repeated", "+optional. Additional branches to evaluate." - "else_node", ":ref:`ref_flyteidl.core.Node`", "", "The node to execute in case none of the branches were taken." - "error", ":ref:`ref_flyteidl.core.Error`", "", "An error to throw in case none of the branches were taken." - - - - - - - -.. _ref_flyteidl.core.Node: - -Node ------------------------------------------------------------------- - -A Workflow graph Node. One unit of execution in the graph. Each node can be linked to a Task, a Workflow or a branch -node. - - - -.. csv-table:: Node type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_string`", "", "A workflow-level unique identifier that identifies this node in the workflow. "inputs" and "outputs" are reserved node ids that cannot be used by other nodes." - "metadata", ":ref:`ref_flyteidl.core.NodeMetadata`", "", "Extra metadata about the node." - "inputs", ":ref:`ref_flyteidl.core.Binding`", "repeated", "Specifies how to bind the underlying interface's inputs. All required inputs specified in the underlying interface must be fullfilled." - "upstream_node_ids", ":ref:`ref_string`", "repeated", "+optional Specifies execution depdendency for this node ensuring it will only get scheduled to run after all its upstream nodes have completed. This node will have an implicit depdendency on any node that appears in inputs field." - "output_aliases", ":ref:`ref_flyteidl.core.Alias`", "repeated", "+optional. A node can define aliases for a subset of its outputs. This is particularly useful if different nodes need to conform to the same interface (e.g. all branches in a branch node). Downstream nodes must refer to this nodes outputs using the alias if one's specified." - "task_node", ":ref:`ref_flyteidl.core.TaskNode`", "", "Information about the Task to execute in this node." - "workflow_node", ":ref:`ref_flyteidl.core.WorkflowNode`", "", "Information about the Workflow to execute in this mode." - "branch_node", ":ref:`ref_flyteidl.core.BranchNode`", "", "Information about the branch node to evaluate in this node." - - - - - - - -.. _ref_flyteidl.core.NodeMetadata: - -NodeMetadata ------------------------------------------------------------------- - -Defines extra information about the Node. - - - -.. csv-table:: NodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_string`", "", "A friendly name for the Node" - "timeout", ":ref:`ref_google.protobuf.Duration`", "", "The overall timeout of a task." - "retries", ":ref:`ref_flyteidl.core.RetryStrategy`", "", "Number of retries per task." - "interruptible", ":ref:`ref_bool`", "", "" - - - - - - - -.. _ref_flyteidl.core.TaskNode: - -TaskNode ------------------------------------------------------------------- - -Refers to the task that the Node is to execute. - - - -.. csv-table:: TaskNode type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "reference_id", ":ref:`ref_flyteidl.core.Identifier`", "", "A globally unique identifier for the task." - - - - - - - -.. _ref_flyteidl.core.WorkflowMetadata: - -WorkflowMetadata ------------------------------------------------------------------- - -This is workflow layer metadata. These settings are only applicable to the workflow as a whole, and do not -percolate down to child entities (like tasks) launched by the workflow. - - - -.. csv-table:: WorkflowMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "quality_of_service", ":ref:`ref_flyteidl.core.QualityOfService`", "", "Indicates the runtime priority of workflow executions." - "on_failure", ":ref:`ref_flyteidl.core.WorkflowMetadata.OnFailurePolicy`", "", "Defines how the system should behave when a failure is detected in the workflow execution." - - - - - - - -.. _ref_flyteidl.core.WorkflowMetadataDefaults: - -WorkflowMetadataDefaults ------------------------------------------------------------------- - -The difference between these settings and the WorkflowMetadata ones is that these are meant to be passed down to -a workflow's underlying entities (like tasks). For instance, 'interruptible' has no meaning at the workflow layer, it -is only relevant when a task executes. The settings here are the defaults that are passed to all nodes -unless explicitly overridden at the node layer. -If you are adding a setting that applies to both the Workflow itself, and everything underneath it, it should be -added to both this object and the WorkflowMetadata object above. - - - -.. csv-table:: WorkflowMetadataDefaults type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "interruptible", ":ref:`ref_bool`", "", "Whether child nodes of the workflow are interruptible." - - - - - - - -.. _ref_flyteidl.core.WorkflowNode: - -WorkflowNode ------------------------------------------------------------------- - -Refers to a the workflow the node is to execute. - - - -.. csv-table:: WorkflowNode type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "launchplan_ref", ":ref:`ref_flyteidl.core.Identifier`", "", "A globally unique identifier for the launch plan." - "sub_workflow_ref", ":ref:`ref_flyteidl.core.Identifier`", "", "Reference to a subworkflow, that should be defined with the compiler context" - - - - - - - -.. _ref_flyteidl.core.WorkflowTemplate: - -WorkflowTemplate ------------------------------------------------------------------- - -Flyte Workflow Structure that encapsulates task, branch and subworkflow nodes to form a statically analyzable, -directed acyclic graph. - - - -.. csv-table:: WorkflowTemplate type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "A globally unique identifier for the workflow." - "metadata", ":ref:`ref_flyteidl.core.WorkflowMetadata`", "", "Extra metadata about the workflow." - "interface", ":ref:`ref_flyteidl.core.TypedInterface`", "", "Defines a strongly typed interface for the Workflow. This can include some optional parameters." - "nodes", ":ref:`ref_flyteidl.core.Node`", "repeated", "A list of nodes. In addition, "globals" is a special reserved node id that can be used to consume workflow inputs." - "outputs", ":ref:`ref_flyteidl.core.Binding`", "repeated", "A list of output bindings that specify how to construct workflow outputs. Bindings can pull node outputs or specify literals. All workflow outputs specified in the interface field must be bound in order for the workflow to be validated. A workflow has an implicit dependency on all of its nodes to execute successfully in order to bind final outputs. Most of these outputs will be Binding's with a BindingData of type OutputReference. That is, your workflow can just have an output of some constant (`Output(5)`), but usually, the workflow will be pulling outputs from the output of a task." - "failure_node", ":ref:`ref_flyteidl.core.Node`", "", "+optional A catch-all node. This node is executed whenever the execution engine determines the workflow has failed. The interface of this node must match the Workflow interface with an additional input named "error" of type pb.lyft.flyte.core.Error." - "metadata_defaults", ":ref:`ref_flyteidl.core.WorkflowMetadataDefaults`", "", "workflow defaults" - - - - - - - - - -.. _ref_flyteidl.core.WorkflowMetadata.OnFailurePolicy: - -WorkflowMetadata.OnFailurePolicy ------------------------------------------------------------------- - -Failure Handling Strategy - -.. csv-table:: Enum WorkflowMetadata.OnFailurePolicy values - :header: "Name", "Number", "Description" - :widths: auto - - "FAIL_IMMEDIATELY", "0", "FAIL_IMMEDIATELY instructs the system to fail as soon as a node fails in the workflow. It'll automatically abort all currently running nodes and clean up resources before finally marking the workflow executions as failed." - "FAIL_AFTER_EXECUTABLE_NODES_COMPLETE", "1", "FAIL_AFTER_EXECUTABLE_NODES_COMPLETE instructs the system to make as much progress as it can. The system will not alter the dependencies of the execution graph so any node that depend on the failed node will not be run. Other nodes that will be executed to completion before cleaning up resources and marking the workflow execution as failed." - - - - - - - - - - -.. _ref_flyteidl/core/workflow_closure.proto: - -flyteidl/core/workflow_closure.proto -================================================================== - - - - - -.. _ref_flyteidl.core.WorkflowClosure: - -WorkflowClosure ------------------------------------------------------------------- - -Defines an enclosed package of workflow and tasks it references. - - - -.. csv-table:: WorkflowClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workflow", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "required. Workflow template." - "tasks", ":ref:`ref_flyteidl.core.TaskTemplate`", "repeated", "optional. A collection of tasks referenced by the workflow. Only needed if the workflow references tasks." - - - - - - - - - - - - - - - - -.. _ref_google/protobuf/timestamp.proto: - -google/protobuf/timestamp.proto -================================================================== - - - - - -.. _ref_google.protobuf.Timestamp: - -Timestamp ------------------------------------------------------------------- - -A Timestamp represents a point in time independent of any time zone or local -calendar, encoded as a count of seconds and fractions of seconds at -nanosecond resolution. The count is relative to an epoch at UTC midnight on -January 1, 1970, in the proleptic Gregorian calendar which extends the -Gregorian calendar backwards to year one. - -All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap -second table is needed for interpretation, using a [24-hour linear -smear](https://developers.google.com/time/smear). - -The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By -restricting to that range, we ensure that we can convert to and from [RFC -3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. - -# Examples - -Example 1: Compute Timestamp from POSIX `time()`. - - Timestamp timestamp; - timestamp.set_seconds(time(NULL)); - timestamp.set_nanos(0); - -Example 2: Compute Timestamp from POSIX `gettimeofday()`. - - struct timeval tv; - gettimeofday(&tv, NULL); - - Timestamp timestamp; - timestamp.set_seconds(tv.tv_sec); - timestamp.set_nanos(tv.tv_usec * 1000); - -Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. - - FILETIME ft; - GetSystemTimeAsFileTime(&ft); - UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; - - // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z - // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. - Timestamp timestamp; - timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); - timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); - -Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. - - long millis = System.currentTimeMillis(); - - Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) - .setNanos((int) ((millis % 1000) * 1000000)).build(); - - -Example 5: Compute Timestamp from Java `Instant.now()`. - - Instant now = Instant.now(); - - Timestamp timestamp = - Timestamp.newBuilder().setSeconds(now.getEpochSecond()) - .setNanos(now.getNano()).build(); - - -Example 6: Compute Timestamp from current time in Python. - - timestamp = Timestamp() - timestamp.GetCurrentTime() - -# JSON Mapping - -In JSON format, the Timestamp type is encoded as a string in the -[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the -format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" -where {year} is always expressed using four digits while {month}, {day}, -{hour}, {min}, and {sec} are zero-padded to two digits each. The fractional -seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), -are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -is required. A proto3 JSON serializer should always use UTC (as indicated by -"Z") when printing the Timestamp type and a proto3 JSON parser should be -able to accept both UTC and other timezones (as indicated by an offset). - -For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past -01:30 UTC on January 15, 2017. - -In JavaScript, one can convert a Date object to this format using the -standard -[toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) -method. In Python, a standard `datetime.datetime` object can be converted -to this format using -[`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with -the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use -the Joda Time's [`ISODateTimeFormat.dateTime()`]( -http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D -) to obtain a formatter capable of generating timestamps in this format. - - - -.. csv-table:: Timestamp type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "seconds", ":ref:`ref_int64`", "", "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." - "nanos", ":ref:`ref_int32`", "", "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." - - - - - - - - - - - - - - - - -.. _ref_google/protobuf/duration.proto: - -google/protobuf/duration.proto -================================================================== - - - - - -.. _ref_google.protobuf.Duration: - -Duration ------------------------------------------------------------------- - -A Duration represents a signed, fixed-length span of time represented -as a count of seconds and fractions of seconds at nanosecond -resolution. It is independent of any calendar and concepts like "day" -or "month". It is related to Timestamp in that the difference between -two Timestamp values is a Duration and it can be added or subtracted -from a Timestamp. Range is approximately +-10,000 years. - -# Examples - -Example 1: Compute Duration from two Timestamps in pseudo code. - - Timestamp start = ...; - Timestamp end = ...; - Duration duration = ...; - - duration.seconds = end.seconds - start.seconds; - duration.nanos = end.nanos - start.nanos; - - if (duration.seconds < 0 && duration.nanos > 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". - - - -.. csv-table:: Duration type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "seconds", ":ref:`ref_int64`", "", "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" - "nanos", ":ref:`ref_int32`", "", "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." - - - - - - - - - - - - - - - - -.. _ref_google/protobuf/struct.proto: - -google/protobuf/struct.proto -================================================================== - - - - - -.. _ref_google.protobuf.ListValue: - -ListValue ------------------------------------------------------------------- - -`ListValue` is a wrapper around a repeated field of values. - -The JSON representation for `ListValue` is JSON array. - - - -.. csv-table:: ListValue type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "values", ":ref:`ref_google.protobuf.Value`", "repeated", "Repeated field of dynamically typed values." - - - - - - - -.. _ref_google.protobuf.Struct: - -Struct ------------------------------------------------------------------- - -`Struct` represents a structured data value, consisting of fields -which map to dynamically typed values. In some languages, `Struct` -might be supported by a native representation. For example, in -scripting languages like JS a struct is represented as an -object. The details of that representation are described together -with the proto support for the language. - -The JSON representation for `Struct` is JSON object. - - - -.. csv-table:: Struct type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "fields", ":ref:`ref_google.protobuf.Struct.FieldsEntry`", "repeated", "Unordered map of dynamically typed values." - - - - - - - -.. _ref_google.protobuf.Struct.FieldsEntry: - -Struct.FieldsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: Struct.FieldsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_google.protobuf.Value`", "", "" - - - - - - - -.. _ref_google.protobuf.Value: - -Value ------------------------------------------------------------------- - -`Value` represents a dynamically typed value which can be either -null, a number, a string, a boolean, a recursive struct value, or a -list of values. A producer of value is expected to set one of that -variants, absence of any variant indicates an error. - -The JSON representation for `Value` is JSON value. - - - -.. csv-table:: Value type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "null_value", ":ref:`ref_google.protobuf.NullValue`", "", "Represents a null value." - "number_value", ":ref:`ref_double`", "", "Represents a double value." - "string_value", ":ref:`ref_string`", "", "Represents a string value." - "bool_value", ":ref:`ref_bool`", "", "Represents a boolean value." - "struct_value", ":ref:`ref_google.protobuf.Struct`", "", "Represents a structured value." - "list_value", ":ref:`ref_google.protobuf.ListValue`", "", "Represents a repeated `Value`." - - - - - - - - - -.. _ref_google.protobuf.NullValue: - -NullValue ------------------------------------------------------------------- - -`NullValue` is a singleton enumeration to represent the null value for the -`Value` type union. - - The JSON representation for `NullValue` is JSON `null`. - -.. csv-table:: Enum NullValue values - :header: "Name", "Number", "Description" - :widths: auto - - "NULL_VALUE", "0", "Null value." - - - - - - - - - -.. _ref_scala_types: - -Scalar Value Types -================== - - - -.. _ref_double: - -double ------------------------------ - - - -.. csv-table:: double language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "double", "double", "double", "float", "float64", "double", "float", "Float" - - - -.. _ref_float: - -float ------------------------------ - - - -.. csv-table:: float language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "float", "float", "float", "float", "float32", "float", "float", "Float" - - - -.. _ref_int32: - -int32 ------------------------------ - -Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. - -.. csv-table:: int32 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "int32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" - - - -.. _ref_int64: - -int64 ------------------------------ - -Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. - -.. csv-table:: int64 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "int64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" - - - -.. _ref_uint32: - -uint32 ------------------------------ - -Uses variable-length encoding. - -.. csv-table:: uint32 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "uint32", "uint32", "int", "int/long", "uint32", "uint", "integer", "Bignum or Fixnum (as required)" - - - -.. _ref_uint64: - -uint64 ------------------------------ - -Uses variable-length encoding. - -.. csv-table:: uint64 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "uint64", "uint64", "long", "int/long", "uint64", "ulong", "integer/string", "Bignum or Fixnum (as required)" - - - -.. _ref_sint32: - -sint32 ------------------------------ - -Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. - -.. csv-table:: sint32 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "sint32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" - - - -.. _ref_sint64: - -sint64 ------------------------------ - -Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. - -.. csv-table:: sint64 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "sint64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" - - - -.. _ref_fixed32: - -fixed32 ------------------------------ - -Always four bytes. More efficient than uint32 if values are often greater than 2^28. - -.. csv-table:: fixed32 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "fixed32", "uint32", "int", "int", "uint32", "uint", "integer", "Bignum or Fixnum (as required)" - - - -.. _ref_fixed64: - -fixed64 ------------------------------ - -Always eight bytes. More efficient than uint64 if values are often greater than 2^56. - -.. csv-table:: fixed64 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "fixed64", "uint64", "long", "int/long", "uint64", "ulong", "integer/string", "Bignum" - - - -.. _ref_sfixed32: - -sfixed32 ------------------------------ - -Always four bytes. - -.. csv-table:: sfixed32 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "sfixed32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" - - - -.. _ref_sfixed64: - -sfixed64 ------------------------------ - -Always eight bytes. - -.. csv-table:: sfixed64 language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "sfixed64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" - - - -.. _ref_bool: - -bool ------------------------------ - - - -.. csv-table:: bool language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "bool", "bool", "boolean", "boolean", "bool", "bool", "boolean", "TrueClass/FalseClass" - - - -.. _ref_string: - -string ------------------------------ - -A string must always contain UTF-8 encoded or 7-bit ASCII text. - -.. csv-table:: string language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "string", "string", "String", "str/unicode", "string", "string", "string", "String (UTF-8)" - - - -.. _ref_bytes: - -bytes ------------------------------ - -May contain any arbitrary sequence of bytes. - -.. csv-table:: bytes language representation - :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" - :widths: auto - - "bytes", "string", "ByteString", "str", "[]byte", "ByteString", "string", "String (ASCII-8BIT)" - - \ No newline at end of file diff --git a/flyteidl/protos/docs/datacatalog/datacatalog.rst b/flyteidl/protos/docs/datacatalog/datacatalog.rst deleted file mode 100644 index b212cf8c7d..0000000000 --- a/flyteidl/protos/docs/datacatalog/datacatalog.rst +++ /dev/null @@ -1,902 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/datacatalog/datacatalog.proto: - -flyteidl/datacatalog/datacatalog.proto -================================================================== - - - - - -.. _ref_datacatalog.AddTagRequest: - -AddTagRequest ------------------------------------------------------------------- - -Request message for tagging an Artifact. - - - -.. csv-table:: AddTagRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tag", ":ref:`ref_datacatalog.Tag`", "", "" - - - - - - - -.. _ref_datacatalog.AddTagResponse: - -AddTagResponse ------------------------------------------------------------------- - -Response message for tagging an Artifact. - - - - - - - - -.. _ref_datacatalog.Artifact: - -Artifact ------------------------------------------------------------------- - -Artifact message. It is composed of several string fields. - - - -.. csv-table:: Artifact type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_string`", "", "The unique ID of the artifact" - "dataset", ":ref:`ref_datacatalog.DatasetID`", "", "The Dataset that the artifact belongs to" - "data", ":ref:`ref_datacatalog.ArtifactData`", "repeated", "A list of data that is associated with the artifact" - "metadata", ":ref:`ref_datacatalog.Metadata`", "", "Free-form metadata associated with the artifact" - "partitions", ":ref:`ref_datacatalog.Partition`", "repeated", "" - "tags", ":ref:`ref_datacatalog.Tag`", "repeated", "" - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "creation timestamp of artifact, autogenerated by service" - - - - - - - -.. _ref_datacatalog.ArtifactData: - -ArtifactData ------------------------------------------------------------------- - -ArtifactData that belongs to an artifact - - - -.. csv-table:: ArtifactData type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_flyteidl.core.Literal`", "", "" - - - - - - - -.. _ref_datacatalog.ArtifactPropertyFilter: - -ArtifactPropertyFilter ------------------------------------------------------------------- - -Artifact properties we can filter by - - - -.. csv-table:: ArtifactPropertyFilter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifact_id", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.CreateArtifactRequest: - -CreateArtifactRequest ------------------------------------------------------------------- - -Request message for creating an Artifact and its associated artifact Data. - - - -.. csv-table:: CreateArtifactRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifact", ":ref:`ref_datacatalog.Artifact`", "", "" - - - - - - - -.. _ref_datacatalog.CreateArtifactResponse: - -CreateArtifactResponse ------------------------------------------------------------------- - -Response message for creating an Artifact. - - - - - - - - -.. _ref_datacatalog.CreateDatasetRequest: - -CreateDatasetRequest ------------------------------------------------------------------- - -Request message for creating a Dataset. - - - -.. csv-table:: CreateDatasetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset", ":ref:`ref_datacatalog.Dataset`", "", "" - - - - - - - -.. _ref_datacatalog.CreateDatasetResponse: - -CreateDatasetResponse ------------------------------------------------------------------- - -Response message for creating a Dataset - - - - - - - - -.. _ref_datacatalog.Dataset: - -Dataset ------------------------------------------------------------------- - -Dataset message. It is uniquely identified by DatasetID. - - - -.. csv-table:: Dataset type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_datacatalog.DatasetID`", "", "" - "metadata", ":ref:`ref_datacatalog.Metadata`", "", "" - "partitionKeys", ":ref:`ref_string`", "repeated", "" - - - - - - - -.. _ref_datacatalog.DatasetID: - -DatasetID ------------------------------------------------------------------- - -DatasetID message that is composed of several string fields. - - - -.. csv-table:: DatasetID type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "The name of the project" - "name", ":ref:`ref_string`", "", "The name of the dataset" - "domain", ":ref:`ref_string`", "", "The domain (eg. environment)" - "version", ":ref:`ref_string`", "", "Version of the data schema" - "UUID", ":ref:`ref_string`", "", "UUID for the dataset (if set the above fields are optional)" - - - - - - - -.. _ref_datacatalog.DatasetPropertyFilter: - -DatasetPropertyFilter ------------------------------------------------------------------- - -Dataset properties we can filter by - - - -.. csv-table:: DatasetPropertyFilter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "project", ":ref:`ref_string`", "", "" - "name", ":ref:`ref_string`", "", "" - "domain", ":ref:`ref_string`", "", "" - "version", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.ExtendReservationRequest: - -ExtendReservationRequest ------------------------------------------------------------------- - -Request to extend reservation - - - -.. csv-table:: ExtendReservationRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset_id", ":ref:`ref_datacatalog.DatasetID`", "", "" - "tag_name", ":ref:`ref_string`", "", "" - "owner_id", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.ExtendReservationResponse: - -ExtendReservationResponse ------------------------------------------------------------------- - -Response to extend reservation - - - - - - - - -.. _ref_datacatalog.FilterExpression: - -FilterExpression ------------------------------------------------------------------- - -Filter expression that is composed of a combination of single filters - - - -.. csv-table:: FilterExpression type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "filters", ":ref:`ref_datacatalog.SinglePropertyFilter`", "repeated", "" - - - - - - - -.. _ref_datacatalog.GetArtifactRequest: - -GetArtifactRequest ------------------------------------------------------------------- - -Request message for retrieving an Artifact. Retrieve an artifact based on a query handle that -can be one of artifact_id or tag. The result returned will include the artifact data and metadata -associated with the artifact. - - - -.. csv-table:: GetArtifactRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset", ":ref:`ref_datacatalog.DatasetID`", "", "" - "artifact_id", ":ref:`ref_string`", "", "" - "tag_name", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.GetArtifactResponse: - -GetArtifactResponse ------------------------------------------------------------------- - -Response message for retrieving an Artifact. The result returned will include the artifact data -and metadata associated with the artifact. - - - -.. csv-table:: GetArtifactResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifact", ":ref:`ref_datacatalog.Artifact`", "", "" - - - - - - - -.. _ref_datacatalog.GetDatasetRequest: - -GetDatasetRequest ------------------------------------------------------------------- - -Request message for retrieving a Dataset. The Dataset is retrieved by it's unique identifier -which is a combination of several fields. - - - -.. csv-table:: GetDatasetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset", ":ref:`ref_datacatalog.DatasetID`", "", "" - - - - - - - -.. _ref_datacatalog.GetDatasetResponse: - -GetDatasetResponse ------------------------------------------------------------------- - -Response message for retrieving a Dataset. The response will include the metadata for the -Dataset. - - - -.. csv-table:: GetDatasetResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset", ":ref:`ref_datacatalog.Dataset`", "", "" - - - - - - - -.. _ref_datacatalog.GetOrReserveArtifactRequest: - -GetOrReserveArtifactRequest ------------------------------------------------------------------- - -Get the Artifact or try to reserve a spot if the Artifact does not exist. - - - -.. csv-table:: GetOrReserveArtifactRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset_id", ":ref:`ref_datacatalog.DatasetID`", "", "" - "tag_name", ":ref:`ref_string`", "", "" - "owner_id", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.GetOrReserveArtifactResponse: - -GetOrReserveArtifactResponse ------------------------------------------------------------------- - -Response to get artifact or reserve spot. - - - -.. csv-table:: GetOrReserveArtifactResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifact", ":ref:`ref_datacatalog.Artifact`", "", "" - "reservation_status", ":ref:`ref_datacatalog.ReservationStatus`", "", "" - - - - - - - -.. _ref_datacatalog.KeyValuePair: - -KeyValuePair ------------------------------------------------------------------- - - - - - -.. csv-table:: KeyValuePair type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.ListArtifactsRequest: - -ListArtifactsRequest ------------------------------------------------------------------- - -List the artifacts that belong to the Dataset, optionally filtered using filtered expression. - - - -.. csv-table:: ListArtifactsRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset", ":ref:`ref_datacatalog.DatasetID`", "", "Use a datasetID for which you want to retrieve the artifacts" - "filter", ":ref:`ref_datacatalog.FilterExpression`", "", "Apply the filter expression to this query" - "pagination", ":ref:`ref_datacatalog.PaginationOptions`", "", "Pagination options to get a page of artifacts" - - - - - - - -.. _ref_datacatalog.ListArtifactsResponse: - -ListArtifactsResponse ------------------------------------------------------------------- - -Response to list artifacts - - - -.. csv-table:: ListArtifactsResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "artifacts", ":ref:`ref_datacatalog.Artifact`", "repeated", "The list of artifacts" - "next_token", ":ref:`ref_string`", "", "Token to use to request the next page, pass this into the next requests PaginationOptions" - - - - - - - -.. _ref_datacatalog.ListDatasetsRequest: - -ListDatasetsRequest ------------------------------------------------------------------- - -List the datasets for the given query - - - -.. csv-table:: ListDatasetsRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "filter", ":ref:`ref_datacatalog.FilterExpression`", "", "Apply the filter expression to this query" - "pagination", ":ref:`ref_datacatalog.PaginationOptions`", "", "Pagination options to get a page of datasets" - - - - - - - -.. _ref_datacatalog.ListDatasetsResponse: - -ListDatasetsResponse ------------------------------------------------------------------- - -List the datasets response with token for next pagination - - - -.. csv-table:: ListDatasetsResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "datasets", ":ref:`ref_datacatalog.Dataset`", "repeated", "The list of datasets" - "next_token", ":ref:`ref_string`", "", "Token to use to request the next page, pass this into the next requests PaginationOptions" - - - - - - - -.. _ref_datacatalog.Metadata: - -Metadata ------------------------------------------------------------------- - -Metadata representation for artifacts and datasets - - - -.. csv-table:: Metadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key_map", ":ref:`ref_datacatalog.Metadata.KeyMapEntry`", "repeated", "key map is a dictionary of key/val strings that represent metadata" - - - - - - - -.. _ref_datacatalog.Metadata.KeyMapEntry: - -Metadata.KeyMapEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: Metadata.KeyMapEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.PaginationOptions: - -PaginationOptions ------------------------------------------------------------------- - -Pagination options for making list requests - - - -.. csv-table:: PaginationOptions type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "limit", ":ref:`ref_uint32`", "", "the max number of results to return" - "token", ":ref:`ref_string`", "", "the token to pass to fetch the next page" - "sortKey", ":ref:`ref_datacatalog.PaginationOptions.SortKey`", "", "the property that we want to sort the results by" - "sortOrder", ":ref:`ref_datacatalog.PaginationOptions.SortOrder`", "", "the sort order of the results" - - - - - - - -.. _ref_datacatalog.Partition: - -Partition ------------------------------------------------------------------- - -An artifact could have multiple partitions and each partition can have an arbitrary string key/value pair - - - -.. csv-table:: Partition type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.PartitionPropertyFilter: - -PartitionPropertyFilter ------------------------------------------------------------------- - -Partition properties we can filter by - - - -.. csv-table:: PartitionPropertyFilter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key_val", ":ref:`ref_datacatalog.KeyValuePair`", "", "" - - - - - - - -.. _ref_datacatalog.ReleaseReservationRequest: - -ReleaseReservationRequest ------------------------------------------------------------------- - -Request to release reservation - - - -.. csv-table:: ReleaseReservationRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "dataset_id", ":ref:`ref_datacatalog.DatasetID`", "", "" - "tag_name", ":ref:`ref_string`", "", "" - "owner_id", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.ReleaseReservationResponse: - -ReleaseReservationResponse ------------------------------------------------------------------- - -Response to release reservation - - - - - - - - -.. _ref_datacatalog.ReservationStatus: - -ReservationStatus ------------------------------------------------------------------- - -Whether we successfully reserve a spot. - - - -.. csv-table:: ReservationStatus type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "state", ":ref:`ref_datacatalog.ReservationStatus.State`", "", "" - "metadata", ":ref:`ref_datacatalog.Metadata`", "", "" - "owner_id", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_datacatalog.SinglePropertyFilter: - -SinglePropertyFilter ------------------------------------------------------------------- - -A single property to filter on. - - - -.. csv-table:: SinglePropertyFilter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tag_filter", ":ref:`ref_datacatalog.TagPropertyFilter`", "", "" - "partition_filter", ":ref:`ref_datacatalog.PartitionPropertyFilter`", "", "" - "artifact_filter", ":ref:`ref_datacatalog.ArtifactPropertyFilter`", "", "" - "dataset_filter", ":ref:`ref_datacatalog.DatasetPropertyFilter`", "", "" - "operator", ":ref:`ref_datacatalog.SinglePropertyFilter.ComparisonOperator`", "", "field 10 in case we add more entities to query" - - - - - - - -.. _ref_datacatalog.Tag: - -Tag ------------------------------------------------------------------- - -Tag message that is unique to a Dataset. It is associated to a single artifact and -can be retrieved by name later. - - - -.. csv-table:: Tag type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "name", ":ref:`ref_string`", "", "Name of tag" - "artifact_id", ":ref:`ref_string`", "", "The tagged artifact" - "dataset", ":ref:`ref_datacatalog.DatasetID`", "", "The Dataset that this tag belongs to" - - - - - - - -.. _ref_datacatalog.TagPropertyFilter: - -TagPropertyFilter ------------------------------------------------------------------- - -Tag properties we can filter by - - - -.. csv-table:: TagPropertyFilter type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "tag_name", ":ref:`ref_string`", "", "" - - - - - - - - - -.. _ref_datacatalog.PaginationOptions.SortKey: - -PaginationOptions.SortKey ------------------------------------------------------------------- - - - -.. csv-table:: Enum PaginationOptions.SortKey values - :header: "Name", "Number", "Description" - :widths: auto - - "CREATION_TIME", "0", "" - - - -.. _ref_datacatalog.PaginationOptions.SortOrder: - -PaginationOptions.SortOrder ------------------------------------------------------------------- - - - -.. csv-table:: Enum PaginationOptions.SortOrder values - :header: "Name", "Number", "Description" - :widths: auto - - "DESCENDING", "0", "" - "ASCENDING", "1", "" - - - -.. _ref_datacatalog.ReservationStatus.State: - -ReservationStatus.State ------------------------------------------------------------------- - - - -.. csv-table:: Enum ReservationStatus.State values - :header: "Name", "Number", "Description" - :widths: auto - - "ACQUIRED", "0", "Acquired the reservation successfully." - "ALREADY_IN_PROGRESS", "1", "Indicates an existing active reservation exist for a different owner_id." - - - -.. _ref_datacatalog.SinglePropertyFilter.ComparisonOperator: - -SinglePropertyFilter.ComparisonOperator ------------------------------------------------------------------- - -as use-cases come up we can add more operators, ex: gte, like, not eq etc. - -.. csv-table:: Enum SinglePropertyFilter.ComparisonOperator values - :header: "Name", "Number", "Description" - :widths: auto - - "EQUALS", "0", "" - - - - - - - -.. _ref_datacatalog.DataCatalog: - -DataCatalog ------------------------------------------------------------------- - -Data Catalog service definition -Data Catalog is a service for indexing parameterized, strongly-typed data artifacts across revisions. -Artifacts are associated with a Dataset, and can be tagged for retrieval. - -.. csv-table:: DataCatalog service methods - :header: "Method Name", "Request Type", "Response Type", "Description" - :widths: auto - - "CreateDataset", ":ref:`ref_datacatalog.CreateDatasetRequest`", ":ref:`ref_datacatalog.CreateDatasetResponse`", "Create a new Dataset. Datasets are unique based on the DatasetID. Datasets are logical groupings of artifacts. Each dataset can have one or more artifacts" - "GetDataset", ":ref:`ref_datacatalog.GetDatasetRequest`", ":ref:`ref_datacatalog.GetDatasetResponse`", "Get a Dataset by the DatasetID. This returns the Dataset with the associated metadata." - "CreateArtifact", ":ref:`ref_datacatalog.CreateArtifactRequest`", ":ref:`ref_datacatalog.CreateArtifactResponse`", "Create an artifact and the artifact data associated with it. An artifact can be a hive partition or arbitrary files or data values" - "GetArtifact", ":ref:`ref_datacatalog.GetArtifactRequest`", ":ref:`ref_datacatalog.GetArtifactResponse`", "Retrieve an artifact by an identifying handle. This returns an artifact along with the artifact data." - "AddTag", ":ref:`ref_datacatalog.AddTagRequest`", ":ref:`ref_datacatalog.AddTagResponse`", "Associate a tag with an artifact. Tags are unique within a Dataset." - "ListArtifacts", ":ref:`ref_datacatalog.ListArtifactsRequest`", ":ref:`ref_datacatalog.ListArtifactsResponse`", "Return a paginated list of artifacts" - "ListDatasets", ":ref:`ref_datacatalog.ListDatasetsRequest`", ":ref:`ref_datacatalog.ListDatasetsResponse`", "Return a paginated list of datasets" - "GetOrReserveArtifact", ":ref:`ref_datacatalog.GetOrReserveArtifactRequest`", ":ref:`ref_datacatalog.GetOrReserveArtifactResponse`", "Get an artifact and the corresponding data. If the artifact does not exist, try to reserve a spot for populating the artifact. Once you preserve a spot, you should call ExtendReservation API periodically to extend the reservation. Otherwise, the reservation can expire and other tasks may take the spot. If the same owner_id calls this API for the same dataset and it has an active reservation and the artifacts have not been written yet by a different owner, the API will respond with an Acquired Reservation Status (providing idempotency). Note: We may have multiple concurrent tasks with the same signature and the same input that try to populate the same artifact at the same time. Thus with reservation, only one task can run at a time, until the reservation expires. Note: If task A does not extend the reservation in time and the reservation expires, another task B may take over the reservation, resulting in two tasks A and B running in parallel. So a third task C may get the Artifact from A or B, whichever writes last." - "ExtendReservation", ":ref:`ref_datacatalog.ExtendReservationRequest`", ":ref:`ref_datacatalog.ExtendReservationResponse`", "Extend the reservation to keep it from expiring. If the reservation expires, other tasks can take over the reservation by calling GetOrReserveArtifact." - "ReleaseReservation", ":ref:`ref_datacatalog.ReleaseReservationRequest`", ":ref:`ref_datacatalog.ReleaseReservationResponse`", "Release the reservation when the task holding the spot fails so that the other tasks can grab the spot." - - - diff --git a/flyteidl/protos/docs/event/event.rst b/flyteidl/protos/docs/event/event.rst deleted file mode 100644 index 4490b46949..0000000000 --- a/flyteidl/protos/docs/event/event.rst +++ /dev/null @@ -1,314 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/event/event.proto: - -flyteidl/event/event.proto -================================================================== - - - - - -.. _ref_flyteidl.event.DynamicWorkflowNodeMetadata: - -DynamicWorkflowNodeMetadata ------------------------------------------------------------------- - -For dynamic workflow nodes we send information about the dynamic workflow definition that gets generated. - - - -.. csv-table:: DynamicWorkflowNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." - "compiled_workflow", ":ref:`ref_flyteidl.core.CompiledWorkflowClosure`", "", "Represents the compiled representation of the embedded dynamic workflow." - - - - - - - -.. _ref_flyteidl.event.ExternalResourceInfo: - -ExternalResourceInfo ------------------------------------------------------------------- - -This message contains metadata about external resources produced or used by a specific task execution. - - - -.. csv-table:: ExternalResourceInfo type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "external_id", ":ref:`ref_string`", "", "Identifier for an external resource created by this task execution, for example Qubole query ID or presto query ids." - - - - - - - -.. _ref_flyteidl.event.NodeExecutionEvent: - -NodeExecutionEvent ------------------------------------------------------------------- - - - - - -.. csv-table:: NodeExecutionEvent type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Unique identifier for this node execution" - "producer_id", ":ref:`ref_string`", "", "the id of the originator (Propeller) of the event" - "phase", ":ref:`ref_flyteidl.core.NodeExecution.Phase`", "", "" - "occurred_at", ":ref:`ref_google.protobuf.Timestamp`", "", "This timestamp represents when the original event occurred, it is generated by the executor of the node." - "input_uri", ":ref:`ref_string`", "", "" - "output_uri", ":ref:`ref_string`", "", "URL to the output of the execution, it encodes all the information including Cloud source provider. ie., s3://..." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the execution" - "workflow_node_metadata", ":ref:`ref_flyteidl.event.WorkflowNodeMetadata`", "", "" - "task_node_metadata", ":ref:`ref_flyteidl.event.TaskNodeMetadata`", "", "" - "parent_task_metadata", ":ref:`ref_flyteidl.event.ParentTaskExecutionMetadata`", "", "[To be deprecated] Specifies which task (if any) launched this node." - "parent_node_metadata", ":ref:`ref_flyteidl.event.ParentNodeExecutionMetadata`", "", "Specifies the parent node of the current node execution. Node executions at level zero will not have a parent node." - "retry_group", ":ref:`ref_string`", "", "Retry group to indicate grouping of nodes by retries" - "spec_node_id", ":ref:`ref_string`", "", "Identifier of the node in the original workflow/graph This maps to value of WorkflowTemplate.nodes[X].id" - "node_name", ":ref:`ref_string`", "", "Friendly readable name for the node" - - - - - - - -.. _ref_flyteidl.event.ParentNodeExecutionMetadata: - -ParentNodeExecutionMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: ParentNodeExecutionMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "node_id", ":ref:`ref_string`", "", "Unique identifier of the parent node id within the execution This is value of core.NodeExecutionIdentifier.node_id of the parent node" - - - - - - - -.. _ref_flyteidl.event.ParentTaskExecutionMetadata: - -ParentTaskExecutionMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: ParentTaskExecutionMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "" - - - - - - - -.. _ref_flyteidl.event.ResourcePoolInfo: - -ResourcePoolInfo ------------------------------------------------------------------- - -This message holds task execution metadata specific to resource allocation used to manage concurrent -executions for a project namespace. - - - -.. csv-table:: ResourcePoolInfo type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "allocation_token", ":ref:`ref_string`", "", "Unique resource ID used to identify this execution when allocating a token." - "namespace", ":ref:`ref_string`", "", "Namespace under which this task execution requested an allocation token." - - - - - - - -.. _ref_flyteidl.event.TaskExecutionEvent: - -TaskExecutionEvent ------------------------------------------------------------------- - -Plugin specific execution event information. For tasks like Python, Hive, Spark, DynamicJob. - - - -.. csv-table:: TaskExecutionEvent type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "task_id", ":ref:`ref_flyteidl.core.Identifier`", "", "ID of the task. In combination with the retryAttempt this will indicate the task execution uniquely for a given parent node execution." - "parent_node_execution_id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "A task execution is always kicked off by a node execution, the event consumer will use the parent_id to relate the task to it's parent node execution" - "retry_attempt", ":ref:`ref_uint32`", "", "retry attempt number for this task, ie., 2 for the second attempt" - "phase", ":ref:`ref_flyteidl.core.TaskExecution.Phase`", "", "Phase associated with the event" - "producer_id", ":ref:`ref_string`", "", "id of the process that sent this event, mainly for trace debugging" - "logs", ":ref:`ref_flyteidl.core.TaskLog`", "repeated", "log information for the task execution" - "occurred_at", ":ref:`ref_google.protobuf.Timestamp`", "", "This timestamp represents when the original event occurred, it is generated by the executor of the task." - "input_uri", ":ref:`ref_string`", "", "URI of the input file, it encodes all the information including Cloud source provider. ie., s3://..." - "output_uri", ":ref:`ref_string`", "", "URI to the output of the execution, it will be in a format that encodes all the information including Cloud source provider. ie., s3://..." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the execution" - "custom_info", ":ref:`ref_google.protobuf.Struct`", "", "Custom data that the task plugin sends back. This is extensible to allow various plugins in the system." - "phase_version", ":ref:`ref_uint32`", "", "Some phases, like RUNNING, can send multiple events with changed metadata (new logs, additional custom_info, etc) that should be recorded regardless of the lack of phase change. The version field should be incremented when metadata changes across the duration of an individual phase." - "reason", ":ref:`ref_string`", "", "An optional explanation for the phase transition." - "task_type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier. If the task definition is already registered in flyte admin this type will be identical, but not all task executions necessarily use pre-registered definitions and this type is useful to render the task in the UI, filter task executions, etc." - "metadata", ":ref:`ref_flyteidl.event.TaskExecutionMetadata`", "", "Metadata around how a task was executed." - - - - - - - -.. _ref_flyteidl.event.TaskExecutionMetadata: - -TaskExecutionMetadata ------------------------------------------------------------------- - -Holds metadata around how a task was executed. -As a task transitions across event phases during execution some attributes, such its generated name, generated external resources, -and more may grow in size but not change necessarily based on the phase transition that sparked the event update. -Metadata is a container for these attributes across the task execution lifecycle. - - - -.. csv-table:: TaskExecutionMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "generated_name", ":ref:`ref_string`", "", "Unique, generated name for this task execution used by the backend." - "external_resources", ":ref:`ref_flyteidl.event.ExternalResourceInfo`", "repeated", "Additional data on external resources on other back-ends or platforms (e.g. Hive, Qubole, etc) launched by this task execution." - "resource_pool_info", ":ref:`ref_flyteidl.event.ResourcePoolInfo`", "repeated", "Includes additional data on concurrent resource management used during execution.. This is a repeated field because a plugin can request multiple resource allocations during execution." - "plugin_identifier", ":ref:`ref_string`", "", "The identifier of the plugin used to execute this task." - "instance_class", ":ref:`ref_flyteidl.event.TaskExecutionMetadata.InstanceClass`", "", "" - - - - - - - -.. _ref_flyteidl.event.TaskNodeMetadata: - -TaskNodeMetadata ------------------------------------------------------------------- - - - - - -.. csv-table:: TaskNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cache_status", ":ref:`ref_flyteidl.core.CatalogCacheStatus`", "", "Captures the status of caching for this execution." - "catalog_key", ":ref:`ref_flyteidl.core.CatalogMetadata`", "", "This structure carries the catalog artifact information" - "dynamic_workflow", ":ref:`ref_flyteidl.event.DynamicWorkflowNodeMetadata`", "", "In the case this task launched a dynamic workflow we capture its structure here." - - - - - - - -.. _ref_flyteidl.event.WorkflowExecutionEvent: - -WorkflowExecutionEvent ------------------------------------------------------------------- - - - - - -.. csv-table:: WorkflowExecutionEvent type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "execution_id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "Workflow execution id" - "producer_id", ":ref:`ref_string`", "", "the id of the originator (Propeller) of the event" - "phase", ":ref:`ref_flyteidl.core.WorkflowExecution.Phase`", "", "" - "occurred_at", ":ref:`ref_google.protobuf.Timestamp`", "", "This timestamp represents when the original event occurred, it is generated by the executor of the workflow." - "output_uri", ":ref:`ref_string`", "", "URL to the output of the execution, it encodes all the information including Cloud source provider. ie., s3://..." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the execution" - - - - - - - -.. _ref_flyteidl.event.WorkflowNodeMetadata: - -WorkflowNodeMetadata ------------------------------------------------------------------- - -For Workflow Nodes we need to send information about the workflow that's launched - - - -.. csv-table:: WorkflowNodeMetadata type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "execution_id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "" - - - - - - - - - -.. _ref_flyteidl.event.TaskExecutionMetadata.InstanceClass: - -TaskExecutionMetadata.InstanceClass ------------------------------------------------------------------- - -Includes the broad cateogry of machine used for this specific task execution. - -.. csv-table:: Enum TaskExecutionMetadata.InstanceClass values - :header: "Name", "Number", "Description" - :widths: auto - - "DEFAULT", "0", "The default instance class configured for the flyte application platform." - "INTERRUPTIBLE", "1", "The instance class configured for interruptible tasks." - - - - - - - - diff --git a/flyteidl/protos/docs/plugins/plugins.rst b/flyteidl/protos/docs/plugins/plugins.rst deleted file mode 100644 index a9deac8846..0000000000 --- a/flyteidl/protos/docs/plugins/plugins.rst +++ /dev/null @@ -1,507 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/plugins/array_job.proto: - -flyteidl/plugins/array_job.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.ArrayJob: - -ArrayJob ------------------------------------------------------------------- - -Describes a job that can process independent pieces of data concurrently. Multiple copies of the runnable component -will be executed concurrently. - - - -.. csv-table:: ArrayJob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "parallelism", ":ref:`ref_int64`", "", "Defines the minimum number of instances to bring up concurrently at any given point. Note that this is an optimistic restriction and that, due to network partitioning or other failures, the actual number of currently running instances might be more. This has to be a positive number if assigned. Default value is size." - "size", ":ref:`ref_int64`", "", "Defines the number of instances to launch at most. This number should match the size of the input if the job requires processing of all input data. This has to be a positive number. In the case this is not defined, the back-end will determine the size at run-time by reading the inputs." - "min_successes", ":ref:`ref_int64`", "", "An absolute number of the minimum number of successful completions of subtasks. As soon as this criteria is met, the array job will be marked as successful and outputs will be computed. This has to be a non-negative number if assigned. Default value is size (if specified)." - "min_success_ratio", ":ref:`ref_float`", "", "If the array job size is not known beforehand, the min_success_ratio can instead be used to determine when an array job can be marked successful." - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/presto.proto: - -flyteidl/plugins/presto.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.PrestoQuery: - -PrestoQuery ------------------------------------------------------------------- - -This message works with the 'presto' task type in the SDK and is the object that will be in the 'custom' field -of a Presto task's TaskTemplate - - - -.. csv-table:: PrestoQuery type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "routing_group", ":ref:`ref_string`", "", "" - "catalog", ":ref:`ref_string`", "", "" - "schema", ":ref:`ref_string`", "", "" - "statement", ":ref:`ref_string`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/pytorch.proto: - -flyteidl/plugins/pytorch.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.DistributedPyTorchTrainingTask: - -DistributedPyTorchTrainingTask ------------------------------------------------------------------- - -Custom proto for plugin that enables distributed training using https://github.com/kubeflow/pytorch-operator - - - -.. csv-table:: DistributedPyTorchTrainingTask type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workers", ":ref:`ref_int32`", "", "number of worker replicas spawned in the cluster for this job" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/qubole.proto: - -flyteidl/plugins/qubole.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.HiveQuery: - -HiveQuery ------------------------------------------------------------------- - -Defines a query to execute on a hive cluster. - - - -.. csv-table:: HiveQuery type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "query", ":ref:`ref_string`", "", "" - "timeout_sec", ":ref:`ref_uint32`", "", "" - "retryCount", ":ref:`ref_uint32`", "", "" - - - - - - - -.. _ref_flyteidl.plugins.HiveQueryCollection: - -HiveQueryCollection ------------------------------------------------------------------- - -Defines a collection of hive queries. - - - -.. csv-table:: HiveQueryCollection type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "queries", ":ref:`ref_flyteidl.plugins.HiveQuery`", "repeated", "" - - - - - - - -.. _ref_flyteidl.plugins.QuboleHiveJob: - -QuboleHiveJob ------------------------------------------------------------------- - -This message works with the 'hive' task type in the SDK and is the object that will be in the 'custom' field -of a hive task's TaskTemplate - - - -.. csv-table:: QuboleHiveJob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "cluster_label", ":ref:`ref_string`", "", "" - "query_collection", ":ref:`ref_flyteidl.plugins.HiveQueryCollection`", "", "**Deprecated.** " - "tags", ":ref:`ref_string`", "repeated", "" - "query", ":ref:`ref_flyteidl.plugins.HiveQuery`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/sidecar.proto: - -flyteidl/plugins/sidecar.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.SidecarJob: - -SidecarJob ------------------------------------------------------------------- - -A sidecar job brings up the desired pod_spec. -The plugin executor is responsible for keeping the pod alive until the primary container terminates -or the task itself times out. - - - -.. csv-table:: SidecarJob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "pod_spec", ":ref:`ref_k8s.io.api.core.v1.PodSpec`", "", "" - "primary_container_name", ":ref:`ref_string`", "", "" - "annotations", ":ref:`ref_flyteidl.plugins.SidecarJob.AnnotationsEntry`", "repeated", "Pod annotations" - "labels", ":ref:`ref_flyteidl.plugins.SidecarJob.LabelsEntry`", "repeated", "Pod labels" - - - - - - - -.. _ref_flyteidl.plugins.SidecarJob.AnnotationsEntry: - -SidecarJob.AnnotationsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: SidecarJob.AnnotationsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.plugins.SidecarJob.LabelsEntry: - -SidecarJob.LabelsEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: SidecarJob.LabelsEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/spark.proto: - -flyteidl/plugins/spark.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.SparkApplication: - -SparkApplication ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.plugins.SparkJob: - -SparkJob ------------------------------------------------------------------- - -Custom Proto for Spark Plugin. - - - -.. csv-table:: SparkJob type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "applicationType", ":ref:`ref_flyteidl.plugins.SparkApplication.Type`", "", "" - "mainApplicationFile", ":ref:`ref_string`", "", "" - "mainClass", ":ref:`ref_string`", "", "" - "sparkConf", ":ref:`ref_flyteidl.plugins.SparkJob.SparkConfEntry`", "repeated", "" - "hadoopConf", ":ref:`ref_flyteidl.plugins.SparkJob.HadoopConfEntry`", "repeated", "" - "executorPath", ":ref:`ref_string`", "", "Executor path for Python jobs." - - - - - - - -.. _ref_flyteidl.plugins.SparkJob.HadoopConfEntry: - -SparkJob.HadoopConfEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: SparkJob.HadoopConfEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - -.. _ref_flyteidl.plugins.SparkJob.SparkConfEntry: - -SparkJob.SparkConfEntry ------------------------------------------------------------------- - - - - - -.. csv-table:: SparkJob.SparkConfEntry type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "key", ":ref:`ref_string`", "", "" - "value", ":ref:`ref_string`", "", "" - - - - - - - - - -.. _ref_flyteidl.plugins.SparkApplication.Type: - -SparkApplication.Type ------------------------------------------------------------------- - - - -.. csv-table:: Enum SparkApplication.Type values - :header: "Name", "Number", "Description" - :widths: auto - - "PYTHON", "0", "" - "JAVA", "1", "" - "SCALA", "2", "" - "R", "3", "" - - - - - - - - - - -.. _ref_flyteidl/plugins/tensorflow.proto: - -flyteidl/plugins/tensorflow.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.DistributedTensorflowTrainingTask: - -DistributedTensorflowTrainingTask ------------------------------------------------------------------- - -Custom proto for plugin that enables distributed training using https://github.com/kubeflow/tf-operator - - - -.. csv-table:: DistributedTensorflowTrainingTask type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workers", ":ref:`ref_int32`", "", "number of worker, ps, chief replicas spawned in the cluster for this job" - "ps_replicas", ":ref:`ref_int32`", "", "PS -> Parameter server" - "chief_replicas", ":ref:`ref_int32`", "", "" - - - - - - - - - - - - - - - - -.. _ref_flyteidl/plugins/waitable.proto: - -flyteidl/plugins/waitable.proto -================================================================== - - - - - -.. _ref_flyteidl.plugins.Waitable: - -Waitable ------------------------------------------------------------------- - -Represents an Execution that was launched and could be waited on. - - - -.. csv-table:: Waitable type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "wf_exec_id", ":ref:`ref_flyteidl.core.WorkflowExecutionIdentifier`", "", "" - "phase", ":ref:`ref_flyteidl.core.WorkflowExecution.Phase`", "", "" - "workflow_id", ":ref:`ref_string`", "", "" - - - - - - - - - - - - - - diff --git a/flyteidl/protos/docs/service/service.rst b/flyteidl/protos/docs/service/service.rst deleted file mode 100644 index ef6b6cfa3d..0000000000 --- a/flyteidl/protos/docs/service/service.rst +++ /dev/null @@ -1,272 +0,0 @@ -###################### -Protocol Documentation -###################### - - - - -.. _ref_flyteidl/service/admin.proto: - -flyteidl/service/admin.proto -================================================================== - - - - - - - - - - - -.. _ref_flyteidl.service.AdminService: - -AdminService ------------------------------------------------------------------- - -The following defines an RPC service that is also served over HTTP via grpc-gateway. -Standard response codes for both are defined here: https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go - -.. csv-table:: AdminService service methods - :header: "Method Name", "Request Type", "Response Type", "Description" - :widths: auto - - "CreateTask", ":ref:`ref_flyteidl.admin.TaskCreateRequest`", ":ref:`ref_flyteidl.admin.TaskCreateResponse`", "" - "GetTask", ":ref:`ref_flyteidl.admin.ObjectGetRequest`", ":ref:`ref_flyteidl.admin.Task`", "" - "ListTaskIds", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierListRequest`", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierList`", "" - "ListTasks", ":ref:`ref_flyteidl.admin.ResourceListRequest`", ":ref:`ref_flyteidl.admin.TaskList`", "" - "CreateWorkflow", ":ref:`ref_flyteidl.admin.WorkflowCreateRequest`", ":ref:`ref_flyteidl.admin.WorkflowCreateResponse`", "" - "GetWorkflow", ":ref:`ref_flyteidl.admin.ObjectGetRequest`", ":ref:`ref_flyteidl.admin.Workflow`", "" - "ListWorkflowIds", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierListRequest`", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierList`", "" - "ListWorkflows", ":ref:`ref_flyteidl.admin.ResourceListRequest`", ":ref:`ref_flyteidl.admin.WorkflowList`", "" - "CreateLaunchPlan", ":ref:`ref_flyteidl.admin.LaunchPlanCreateRequest`", ":ref:`ref_flyteidl.admin.LaunchPlanCreateResponse`", "" - "GetLaunchPlan", ":ref:`ref_flyteidl.admin.ObjectGetRequest`", ":ref:`ref_flyteidl.admin.LaunchPlan`", "" - "GetActiveLaunchPlan", ":ref:`ref_flyteidl.admin.ActiveLaunchPlanRequest`", ":ref:`ref_flyteidl.admin.LaunchPlan`", "" - "ListActiveLaunchPlans", ":ref:`ref_flyteidl.admin.ActiveLaunchPlanListRequest`", ":ref:`ref_flyteidl.admin.LaunchPlanList`", "" - "ListLaunchPlanIds", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierListRequest`", ":ref:`ref_flyteidl.admin.NamedEntityIdentifierList`", "" - "ListLaunchPlans", ":ref:`ref_flyteidl.admin.ResourceListRequest`", ":ref:`ref_flyteidl.admin.LaunchPlanList`", "" - "UpdateLaunchPlan", ":ref:`ref_flyteidl.admin.LaunchPlanUpdateRequest`", ":ref:`ref_flyteidl.admin.LaunchPlanUpdateResponse`", "" - "CreateExecution", ":ref:`ref_flyteidl.admin.ExecutionCreateRequest`", ":ref:`ref_flyteidl.admin.ExecutionCreateResponse`", "" - "RelaunchExecution", ":ref:`ref_flyteidl.admin.ExecutionRelaunchRequest`", ":ref:`ref_flyteidl.admin.ExecutionCreateResponse`", "" - "GetExecution", ":ref:`ref_flyteidl.admin.WorkflowExecutionGetRequest`", ":ref:`ref_flyteidl.admin.Execution`", "" - "GetExecutionData", ":ref:`ref_flyteidl.admin.WorkflowExecutionGetDataRequest`", ":ref:`ref_flyteidl.admin.WorkflowExecutionGetDataResponse`", "" - "ListExecutions", ":ref:`ref_flyteidl.admin.ResourceListRequest`", ":ref:`ref_flyteidl.admin.ExecutionList`", "" - "TerminateExecution", ":ref:`ref_flyteidl.admin.ExecutionTerminateRequest`", ":ref:`ref_flyteidl.admin.ExecutionTerminateResponse`", "" - "GetNodeExecution", ":ref:`ref_flyteidl.admin.NodeExecutionGetRequest`", ":ref:`ref_flyteidl.admin.NodeExecution`", "" - "ListNodeExecutions", ":ref:`ref_flyteidl.admin.NodeExecutionListRequest`", ":ref:`ref_flyteidl.admin.NodeExecutionList`", "" - "ListNodeExecutionsForTask", ":ref:`ref_flyteidl.admin.NodeExecutionForTaskListRequest`", ":ref:`ref_flyteidl.admin.NodeExecutionList`", "" - "GetNodeExecutionData", ":ref:`ref_flyteidl.admin.NodeExecutionGetDataRequest`", ":ref:`ref_flyteidl.admin.NodeExecutionGetDataResponse`", "" - "RegisterProject", ":ref:`ref_flyteidl.admin.ProjectRegisterRequest`", ":ref:`ref_flyteidl.admin.ProjectRegisterResponse`", "" - "UpdateProject", ":ref:`ref_flyteidl.admin.Project`", ":ref:`ref_flyteidl.admin.ProjectUpdateResponse`", "flyteidl.admin.Project should be passed but the domains property should be empty; it will be ignored in the handler as domains cannot be updated via this API." - "ListProjects", ":ref:`ref_flyteidl.admin.ProjectListRequest`", ":ref:`ref_flyteidl.admin.Projects`", "" - "CreateWorkflowEvent", ":ref:`ref_flyteidl.admin.WorkflowExecutionEventRequest`", ":ref:`ref_flyteidl.admin.WorkflowExecutionEventResponse`", "" - "CreateNodeEvent", ":ref:`ref_flyteidl.admin.NodeExecutionEventRequest`", ":ref:`ref_flyteidl.admin.NodeExecutionEventResponse`", "" - "CreateTaskEvent", ":ref:`ref_flyteidl.admin.TaskExecutionEventRequest`", ":ref:`ref_flyteidl.admin.TaskExecutionEventResponse`", "" - "GetTaskExecution", ":ref:`ref_flyteidl.admin.TaskExecutionGetRequest`", ":ref:`ref_flyteidl.admin.TaskExecution`", "" - "ListTaskExecutions", ":ref:`ref_flyteidl.admin.TaskExecutionListRequest`", ":ref:`ref_flyteidl.admin.TaskExecutionList`", "" - "GetTaskExecutionData", ":ref:`ref_flyteidl.admin.TaskExecutionGetDataRequest`", ":ref:`ref_flyteidl.admin.TaskExecutionGetDataResponse`", "" - "UpdateProjectDomainAttributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesUpdateRequest`", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesUpdateResponse`", "" - "GetProjectDomainAttributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesGetRequest`", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesGetResponse`", "" - "DeleteProjectDomainAttributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesDeleteRequest`", ":ref:`ref_flyteidl.admin.ProjectDomainAttributesDeleteResponse`", "" - "UpdateWorkflowAttributes", ":ref:`ref_flyteidl.admin.WorkflowAttributesUpdateRequest`", ":ref:`ref_flyteidl.admin.WorkflowAttributesUpdateResponse`", "" - "GetWorkflowAttributes", ":ref:`ref_flyteidl.admin.WorkflowAttributesGetRequest`", ":ref:`ref_flyteidl.admin.WorkflowAttributesGetResponse`", "" - "DeleteWorkflowAttributes", ":ref:`ref_flyteidl.admin.WorkflowAttributesDeleteRequest`", ":ref:`ref_flyteidl.admin.WorkflowAttributesDeleteResponse`", "" - "ListMatchableAttributes", ":ref:`ref_flyteidl.admin.ListMatchableAttributesRequest`", ":ref:`ref_flyteidl.admin.ListMatchableAttributesResponse`", "" - "ListNamedEntities", ":ref:`ref_flyteidl.admin.NamedEntityListRequest`", ":ref:`ref_flyteidl.admin.NamedEntityList`", "" - "GetNamedEntity", ":ref:`ref_flyteidl.admin.NamedEntityGetRequest`", ":ref:`ref_flyteidl.admin.NamedEntity`", "" - "UpdateNamedEntity", ":ref:`ref_flyteidl.admin.NamedEntityUpdateRequest`", ":ref:`ref_flyteidl.admin.NamedEntityUpdateResponse`", "" - "GetVersion", ":ref:`ref_flyteidl.admin.GetVersionRequest`", ":ref:`ref_flyteidl.admin.GetVersionResponse`", "" - - - - - -.. _ref_flyteidl/service/auth.proto: - -flyteidl/service/auth.proto -================================================================== - - - - - -.. _ref_flyteidl.service.OAuth2MetadataRequest: - -OAuth2MetadataRequest ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.service.OAuth2MetadataResponse: - -OAuth2MetadataResponse ------------------------------------------------------------------- - -OAuth2MetadataResponse defines an RFC-Compliant response for /.well-known/oauth-authorization-server metadata -as defined in https://tools.ietf.org/html/rfc8414 - - - -.. csv-table:: OAuth2MetadataResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "issuer", ":ref:`ref_string`", "", "Defines the issuer string in all JWT tokens this server issues. The issuer can be admin itself or an external issuer." - "authorization_endpoint", ":ref:`ref_string`", "", "URL of the authorization server's authorization endpoint [RFC6749]. This is REQUIRED unless no grant types are supported that use the authorization endpoint." - "token_endpoint", ":ref:`ref_string`", "", "URL of the authorization server's token endpoint [RFC6749]." - "response_types_supported", ":ref:`ref_string`", "repeated", "Array containing a list of the OAuth 2.0 response_type values that this authorization server supports." - "scopes_supported", ":ref:`ref_string`", "repeated", "JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this authorization server supports." - "token_endpoint_auth_methods_supported", ":ref:`ref_string`", "repeated", "JSON array containing a list of client authentication methods supported by this token endpoint." - "jwks_uri", ":ref:`ref_string`", "", "URL of the authorization server's JWK Set [JWK] document. The referenced document contains the signing key(s) the client uses to validate signatures from the authorization server." - "code_challenge_methods_supported", ":ref:`ref_string`", "repeated", "JSON array containing a list of Proof Key for Code Exchange (PKCE) [RFC7636] code challenge methods supported by this authorization server." - "grant_types_supported", ":ref:`ref_string`", "repeated", "JSON array containing a list of the OAuth 2.0 grant type values that this authorization server supports." - - - - - - - -.. _ref_flyteidl.service.PublicClientAuthConfigRequest: - -PublicClientAuthConfigRequest ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.service.PublicClientAuthConfigResponse: - -PublicClientAuthConfigResponse ------------------------------------------------------------------- - -FlyteClientResponse encapsulates public information that flyte clients (CLIs... etc.) can use to authenticate users. - - - -.. csv-table:: PublicClientAuthConfigResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "client_id", ":ref:`ref_string`", "", "client_id to use when initiating OAuth2 authorization requests." - "redirect_uri", ":ref:`ref_string`", "", "redirect uri to use when initiating OAuth2 authorization requests." - "scopes", ":ref:`ref_string`", "repeated", "scopes to request when initiating OAuth2 authorization requests." - "authorization_metadata_key", ":ref:`ref_string`", "", "Authorization Header to use when passing Access Tokens to the server. If not provided, the client should use the default http `Authorization` header." - - - - - - - - - - - - - -.. _ref_flyteidl.service.AuthMetadataService: - -AuthMetadataService ------------------------------------------------------------------- - -The following defines an RPC service that is also served over HTTP via grpc-gateway. -Standard response codes for both are defined here: https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go -RPCs defined in this service must be anonymously accessible. - -.. csv-table:: AuthMetadataService service methods - :header: "Method Name", "Request Type", "Response Type", "Description" - :widths: auto - - "GetOAuth2Metadata", ":ref:`ref_flyteidl.service.OAuth2MetadataRequest`", ":ref:`ref_flyteidl.service.OAuth2MetadataResponse`", "Anonymously accessible. Retrieves local or external oauth authorization server metadata." - "GetPublicClientConfig", ":ref:`ref_flyteidl.service.PublicClientAuthConfigRequest`", ":ref:`ref_flyteidl.service.PublicClientAuthConfigResponse`", "Anonymously accessible. Retrieves the client information clients should use when initiating OAuth2 authorization requests." - - - - - -.. _ref_flyteidl/service/identity.proto: - -flyteidl/service/identity.proto -================================================================== - - - - - -.. _ref_flyteidl.service.UserInfoRequest: - -UserInfoRequest ------------------------------------------------------------------- - - - - - - - - - - -.. _ref_flyteidl.service.UserInfoResponse: - -UserInfoResponse ------------------------------------------------------------------- - -See the OpenID Connect spec at https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse for more information. - - - -.. csv-table:: UserInfoResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "subject", ":ref:`ref_string`", "", "Locally unique and never reassigned identifier within the Issuer for the End-User, which is intended to be consumed by the Client." - "name", ":ref:`ref_string`", "", "Full name" - "preferred_username", ":ref:`ref_string`", "", "Shorthand name by which the End-User wishes to be referred to" - "given_name", ":ref:`ref_string`", "", "Given name(s) or first name(s)" - "family_name", ":ref:`ref_string`", "", "Surname(s) or last name(s)" - "email", ":ref:`ref_string`", "", "Preferred e-mail address" - "picture", ":ref:`ref_string`", "", "Profile picture URL" - - - - - - - - - - - - - -.. _ref_flyteidl.service.IdentityService: - -IdentityService ------------------------------------------------------------------- - -IdentityService defines an RPC Service that interacts with user/app identities. - -.. csv-table:: IdentityService service methods - :header: "Method Name", "Request Type", "Response Type", "Description" - :widths: auto - - "UserInfo", ":ref:`ref_flyteidl.service.UserInfoRequest`", ":ref:`ref_flyteidl.service.UserInfoResponse`", "Retrieves user information about the currently logged in user." - - - diff --git a/flyteidl/protos/flyteidl/core/types.proto b/flyteidl/protos/flyteidl/core/types.proto index a2025a3004..8dcc32169e 100644 --- a/flyteidl/protos/flyteidl/core/types.proto +++ b/flyteidl/protos/flyteidl/core/types.proto @@ -56,6 +56,14 @@ message BlobType { BlobDimensionality dimensionality = 2; } +// Enables declaring enum types, with predefined string values +// For len(values) > 0, the first value in the ordered list is regarded as the default value. If you wish +// To provide no defaults, make the first value as undefined. +message EnumType { + // Predefined set of enum values. + repeated string values = 1; +} + // Defines a strong type to allow type checking between interfaces. message LiteralType { oneof type { @@ -73,6 +81,9 @@ message LiteralType { // A blob might have specialized implementation details depending on associated metadata. BlobType blob = 5; + + // Defines an enum with pre-defined string values. + EnumType enum_type = 7; } // This field contains type metadata that is descriptive of the type, but is NOT considered in type-checking. This might be used by